标题:[讨论]大家看这是怎么回事
只看楼主
weishj
Rank: 1
等 级:新手上路
威 望:2
帖 子:141
专家分:0
注 册:2007-4-22
 问题点数:0 回复次数:3 
[讨论]大家看这是怎么回事

下面是我写的一个函数,用于读取用户输入的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;
}

请问第一个函数的问题出在哪里,为什么只能用第二种方法?
谢谢!

搜索更多相关主题的帖子: color while 用户 
2007-04-22 12:50
weishj
Rank: 1
等 级:新手上路
威 望:2
帖 子:141
专家分:0
注 册:2007-4-22
得分:0 

在线等待ing,这个问题是问了老师他无法解决后我才发到这里的,请高手不吝赐教


If you shed tears when you miss the sun, you also miss the stars.
2007-04-22 13:10
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
http://bbs.bc-cn.net/viewthread.php?tid=132283&star=at#


这里有你想要的答案

[此贴子已经被作者于2007-4-22 14:28:11编辑过]


Fight  to win  or  die...
2007-04-22 14:26
weishj
Rank: 1
等 级:新手上路
威 望:2
帖 子:141
专家分:0
注 册:2007-4-22
得分:0 
非常感谢楼上的指引

If you shed tears when you miss the sun, you also miss the stars.
2007-04-22 14:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-133979-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.148878 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved