程序经常会提供从标准输入流中输入的操作,但是如果其中发生错误,则有可能导致后续的读取失败。 程序中应该判断输入流的状态,并在错误发生时,清除缓冲区,重置状态。 C的解决方式: while(1) { int i; if (scanf("%d",&i)) { printf("ok:%d/n",i); if (666 == i) break; }else { printf("invalid input!/n"); rewind(stdin); } } C++的解决方式: while(1) { int i; cin >> i; if ( !cin ) { cout<<"invalid input!"<<endl; //cin.clear(); cin.sync(); }else { cout<<"ok:"<<i<<endl; if (666 == i) break; } }