2014-05-09 3 views
0

J'ai essayé d'obtenir une chaîne comme une entrée avec cin et cela a fonctionné, mais quand j'ai essayé d'obtenir un int comme une entrée juste après la chaîne, la console ne sera pas demandez-le et le programme s'arrête. Voici mon code:std :: cin n'accepte pas d'entrée, le programme se ferme immédiatement

#include <iostream> 
#include <string> 
using namespace std; 

void main(void) 
{ 
string a, b; 
int c, d, e; 

cout << "Enter two words \n"; 
cin >> a, b; 
cout << "Enter three int"; 
cin >> c, d, e; 
cout << c*d; 
} 

Ce code ne me laisse pas entrer dans la deuxième entrée, mais je peux voir la deuxième sortie avant que le programme arrête.

Répondre

5

Votre code est erroné:

cin >> a, b; 

ne vous donnera pas ce que vous attendez. Vous devez lire les chaînes de cin, utilisez:

cin >> a; 
cin >> b; 

de même pour les autres types.

Notez également que:

void main(void) 

est incorrect. maindoit retourner unint:

int main(void) 
{ 
    return 0; 
} 
+0

très bien merci ça marche! Maître a dit que nous devrions utiliser void main (vide), je ne sais pas pourquoi. – Vermz

+1

Vous pouvez également faire 'cin >> a >> b' alors que les opérateurs de flux renvoient des références à eux-mêmes. – 0x499602D2

3

Ceci est faux:

cin >> a, b; 

Il devrait être:

cin >> a >> b; 

De même:

cin >> c, d, e; 

devrait être:

cin >> c >> d >> e; 

Assurez-vous que vous activez les avertissements du compilateur à l'avenir - de cette façon, le compilateur peut signaler de nombreuses erreurs simples comme celle-ci pour vous. Lorsque je compile votre code d'origine avec des avertissements a permis que je reçois:

$ g++ -Wall junk.cpp 
junk.cpp:5:1: error: 'main' must return 'int' 
void main(void) 
^~~~ 
int 
junk.cpp:13:11: warning: expression result unused [-Wunused-value] 
cin >> c, d, e; 
     ^
junk.cpp:11:11: warning: expression result unused [-Wunused-value] 
cin >> a, b; 
     ^
junk.cpp:13:14: warning: expression result unused [-Wunused-value] 
cin >> c, d, e; 
      ^
3 warnings and 1 error generated. 

De cela, il est facile de voir qu'il ya quelque chose de mal avec les deux cin lignes, et que vous avez aussi besoin de changer le type de retour de main à int .

+0

Merci beaucoup! ça a marché! – Vermz

+0

Génial - assurez-vous d'activer ces avertissements (et notez-les!). –

1

Essayez avec:

int main(void) 
{ 
string a, b; 
int c, d, e; 

cout << "Enter two words \n"; 
cin >> a >> b; 
cout << "Enter three int"; 
cin >> c >> d >> e; 
cout << c*d; 
} 
4

La ligne cin >> a, b; utilise l'opérateur virgule qui sévalue les différentes expressions de gauche à droite. Le résultat est le même que le code suivant:

cin >> a; 
b; 

Lorsque la ligne cin >> c, d, e; est atteinte, il est tout aussi evaluted que:

cin >> c; 
d; 
e; 

Le résultat est que, lorsque la deuxième déclaration cin >> ... est evaluted la deuxième le mot que vous avez entré est toujours dans le tampon d'entrée qu'il complète sans attendre plus de saisie de la part de l'utilisateur.

Questions connexes