2010-10-07 15 views
0

Pourquoi ma chaîne est-elle ignorée dans ce qui suit?sk sk sk sk sk sk

int main() { 
     int option; 
     cin >> option; 
     while(!cin.good()) { 
       cout << "Looping" << endl; 
       cin >> option; 
     } 
} 
+0

Vous n'êtes pas en train de taper une lettre, n'est-ce pas? – JoshD

+0

Je m'attendais à m'arrêter pour vous permettre d'entrer mais il a juste fait LoopingLoopingLooping etc. J'ai essayé ceci sur ciawinwin vista et g ++ ubuntu linux. – Will

Répondre

3

Les erreurs dans les flux internes sont collantes. Vous devez effacer l'état d'erreur avant que cin ne fonctionne à nouveau.

int main() { 
     int option; 
     cin >> option; 
     while(!cin.good()) { 
       cout << "Looping" << endl; 
       cin.clear(); // ignore erroneous line of input: 
       cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
       cin >> option; 
     } 
} 
+0

menu.cpp: Dans la fonction membre 'int notekeeper :: menu :: getOption()': menu.cpp: 27: erreur: conversion invalide de 'int (*)() throw()' en 'std :: streamsize ' menu.cpp: 27: erreur: initialisation de l'argument 1 de' std :: basic_istream <_CharT, _Traits> & std :: basic_istream <_CharT, _Traits> :: ignore (std :: streamsize, nom de type _Traits :: int_type) [ avec _CharT = char, _Traits = std :: char_traits ] ' – Will

+0

@Will: 'max' est une fonction; notez les parenthèses après. – Potatoswatter