2010-09-09 16 views
0

Salut J'ai une question concernant cin et buffer. Je veux faire un simple programme io qui prend des nombres entiers.Problème cin et buffer

De toute façon je suis tombé sur un problème avec le tampon. En utilisant MinGW dans Windows7, le code suivant affichera les quatre nombres entiers que j'ai saisis. Mais quand je passe à SunOS et que je le compile avec G ++, il imprime seulement le premier entier. Est-ce un problème de compilateur ou est-ce un problème de système d'exploitation?

#include <iostream> 

using namespace std; 

int main() 
{ 
    int i; 

    cout << "Enter four integers: "; 
    cin >> i; 
    cout << "\nYou entered the numbers: " << i << " "; 

    cin >> i; cout << " "; 
    cin >> i; cout << " "; 
    cin >> i; cout << " "; 

    return 0; 
} 

Répondre

1

Le code devrait imprimer le premier nombre sur n'importe quel système.

cout << " "; 

contre

cout << " " << i; 

Etat Par conséquent de nombreuses lignes directrices pour faire une seule opération par ligne. La cinque encombre optiquement la lecture. En fait, vous ne publiez jamais i excepté la première fois.

+0

ah, vrai .. Je n'ai pas vu celui-là ^^; – starcorn

+0

Pas de problème, je pense que vous avez probablement reformaté le code pour savoir où était le problème. :-) – jdehaan

1

Dans ces lignes:

cin >> i; cout << " "; 
cin >> i; cout << " "; 
cin >> i; cout << " "; 

... vous lisez un numéro (si possible) mais simplement l'impression d'un espace, pas le numéro que vous venez de lire. Si vous avez vraiment besoin de faire cela, je serais probablement écrire une petite fonction, et l'utiliser:

int get_input() { 
    int ret; 
    cin >> ret; 
    cout << ret; 
    return ret; 
} 

// ... 
cout << "Enter four integers: "; 

for (int i=0; i<4; i++) 
    get_input(); 

Je ne peux pas dire que je suis particulièrement heureux de cette fonction, mais dans les circonstances, il est probablement à un peu mieux que rien (juste pas beaucoup mieux).