[讨论]大家看这是怎么回事
下面是我写的一个函数,用于读取用户输入的1到12的数字,并且判断输入是否合法.(其它代码没贴出来m_Month是CMonth类的一个成员变量)
void CMonth::ReadMonthByInt()
{
int temp;
do
{
cout<<"请输入1到12的数字表示的月份:"<<endl;
cin>>temp;
}
while(temp<1 || temp>12);
m_Month=temp;
}
这个函数预期结果应该是当用户输入的数字在1到12之间时,m_Month被正确赋值;当输入小于1或大于12的数字时,提示用户重新输入.运行时也确实是这样.
但问题是当用户输入内容非数字时,比如输入a,这时程序会一直循环下去,并且在提示了"请输入1到12的数字表示的月份:"以后根本没有停止下来再次接收用户输入的内容而是直接跳过继续显示那一个提示.
但若这样写函数,就没有了问题:
void CMonth::ReadMonthByInt()
{
char temp[3];
int b;
do
{
cout<<"请输入1到12的数字表示的月份:"<<endl;
cin>>temp;
b=atoi(temp);
}
while(b<1 || b>12);
m_Month=b;
}
请问第一个函数的问题出在哪里,为什么只能用第二种方法?
谢谢!