首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

自学成材好难啊但是小弟我发现小弟我编写的一个程序里有BUG(无意中发现的),如何解决

2012-03-09 
自学成材好难啊,但是我发现我编写的一个程序里有BUG(无意中发现的),怎么解决?先看下源码-----------------

自学成材好难啊,但是我发现我编写的一个程序里有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;
}

热点排行