输入的数据先放在缓冲区中,当输入结束时再由‘cin流’从缓冲区将第一个类型的正确数据取走。如果输入浮点数,假如你输入45.6,‘cin流’会把整数部分45从缓冲区取走,此时缓冲区还剩下的数据为.6(因为缓冲区还有数据存在,所以就暂时不用人为的从键盘输入数据了,直到cin流把缓冲区中的数据全部取走),当进入循环时,cin流无法再从缓冲区取走数据了,所以变量i也就无法再被重新赋值了,所以输出就会一直是‘青年’或其他,程序也因cin流不断的在取数据而进入了无限循环中..
[/color]
程序代码:
[color=#0000FF]#include<iostream> using namespace std; void main() { int year,i; cout<<"year="; cin>>year; if(year<0) cout<<"input error!"<<endl; while(year>=0 && year<=130) { /// if(cin.fail()) { cout<<"输入有误"<<endl; cin.clear(); double d; cin>>d; } cout<<"请重新输入,year="; cin>>year; /// i=year/10; switch(i) { case 0: cout<<"小孩"<<endl; break; case 1: cout<<"少年"<<endl; break; case 2: cout<<"青年"<<endl; break; case 3: case 4: cout<<"中年"<<endl; break; case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: cout<<"老年"<<endl; break; default: cout<<"input error!"<<endl; } cout<<"input year="; cin>>year; } }
[/color]