读书人

自学成材好难啊但是小弟我发现小弟我编

发布时间: 2012-03-09 21:42:54 作者: rapoo

自学成材好难啊,但是我发现我编写的一个程序里有BUG(无意中发现的),怎么解决?
先看下源码
--------------------
//lab2_4.cpp
#include <iostream.h>
struct time
{
int year;
int month;
int day;
int hour;
int minute;
int second;
}Time;
void main()
{
int month;
cout < < "请输入年: ";
cin> > Time.year;
while(Time.year <0||Time.year> 10000)
{
Time.year=0;
cout < < "错误的输入,请重新输入: " < <endl;
cin> > Time.year;
}
cout < < "请输入月: ";
------------------------------------------------------
问题:
如果我在输入时输入一个很大的数字(比如很多9……9)就会出现错误,虽然我加了一个判断,
while(Time.year <0||Time.year> 10000)
{
Time.year=0; //强行将Time.year赋值为0
cout < < "错误的输入,请重新输入: " < <endl;
cin> > Time.year;
}
但是有时候还是会出错,我在调试的过程中,
DOS窗口屏幕上显示了很多 "错误的输入,请重新输入: "
最后我在Watch窗口里看到Time.year=8了,要是这样再判断就等于是通过了,所以我认为这是一个BUG。
如果要解决这个BUG,我的思路是在循环的第2次时强行给Time.year赋值为0,但是在调试过程中,调试到cin> > Time.year时,输入不了数字,继续下去,然后Watch窗口显示Time.year=2147483647,然后循环体就在不断的循环,显示窗口也不断的显示“错误的输入,请重新输入:”,所以我想问,有没有办法在这种情况下解决这种问题?
我还有一个思路,就是在输入时,设定一定的字符,比如输入year时,只允许输入4个数字,这种方法。



[解决办法]
你用错了书而已,当然自学很难进行下去。换C++Primer吧。
你现在要的是
while(true)
{
cin> > Time.year;

if (cin.fail())
{
cout < <  "请输入数字 ";
cin.ignore(1000, '\n ');
cin.clear();
continue();
}
if (Time.year <0||Time.year> 10000)
{
cout < < "错误的输入,请重新输入: " < <endl;
continue();
}

break;
}

读书人网 >C++

热点推荐