菜鸟刚写的,发现输入a,就出现死循环,哪位大虾指条明路?

时间:2008-07-24 13:55:45   来源:论坛整理  作者:  编辑:chinaitzhe
#include <iostream>
#include <ctime>
using namespace std;
int m;
int main()
{
cout < <"*************************************" < <endl;
cout < <"**********猜数字游戏*****************" < <endl;
cout < <"*************************************" < <endl;

void guess();//声明函数用户进行猜数
int srandnum();//声明函数,产生随机数字

//cout < <srandnum() < <endl;
guess();
system("pause");
return 0;
}

int srandnum()
{
int number;
cout < <"请设置猜数范围0-?" < <endl;
do
{
cin>>m; //这里我输入了字符a, 就出现了死循环,哪位大虾帮忙解决下?假如输入了字符串,就重新提示输入数字?
if(m==0)
cout < <"请重新输入大于0的数字" < <endl;
}
while(m==0);
srand(time(0));
number=rand()%m;

return number;
}

void guess()
{
int number1;
int number2;
int t=1;
char n;
do
{
number2 = srandnum();
cout < <"你猜猜0-" < <m < <"的数是多少?" < <endl;
cout < <"输入你猜的数字" < <endl;
//cin>>number1; //一开始写这里出现了死循环
do
{
cin>>number1;
if(number1>number2)
{
cout < <"大哥你猜大了啊" < <endl;
}
else if (number1 <number2)
{
cout < <"大哥你猜小了啊" < <endl;
}
else if (number1==number2)

{
cout < <"不错,你猜对了" < <endl;
cout < <"你共猜了" < <t < <"次" < <endl;
break;
}
t ;
}
while(1);
cout < <"你还想玩一次吗?(y/n)" < <endl;
cin>>n;
}
while(n=='y');

}


网友回复:我输入字符a就出现死循环,大虾有什么办法解决吗? 假如输入的不是数字而是字符,程序提示输入数字.我该怎么解决?谢谢
网友回复:http://topic.csdn.net/u/20071103/16/63FFF784-8BCD-4126-ACDB-61C8823E0895.html
网友回复:加一句判定是否是整形的代码
来避免出现死循环
着个程序不是很麻烦

网友回复:恩 就是cin流缓冲区没有刷新所致 用fflush
具体看brook的地址 写的很具体
网友回复:if(m="")
网友回复:#include <iostream>
#include <ctime>
using namespace std;
int m;
char buffer[ 255 ];
int main()
{
cout < <"*************************************" < <endl;
cout < <"**********猜数字游戏*****************" < <endl;
cout < <"*************************************" < <endl;

void guess();//声明函数用户进行猜数
int srandnum();//声明函数,产生随机数字

//cout < <srandnum() < <endl;
guess();
system("pause");
return 0;
}

int srandnum()
{
int number;
cout < <"请设置猜数范围0-?" < <endl;
do
{
cin>>m; //这里我输入了字符a, 就出现了死循环,哪位大虾帮忙解决下?假如输入了字符串,就重新提示输入数字?
while( cin.fail() )
{
cin.clear();// 复位标志位
cout < < "数据类型不对,请重新输入:";
cin.getline( buffer, 255 ); // 清空上次的输入
cin >>m;
}
if(m==0)
cout < <"请重新输入大于0的数字" < <endl;
}
while(m==0);
srand(time(0));
number=rand()%m;

return number;
}

void guess()
{
int number1;
int number2;
int t=1;
char n;
do
{
number2 = srandnum();
cout < <"你猜猜0-" < <m < <"的数是多少?" < <endl;
cout < <"输入你猜的数字" < <endl;
//cin>>number1; //一开始写这里出现了死循环
do
{
cin>>number1;
if(number1>number2)
{
cout < <"大哥你猜大了啊" < <endl;
}
else if (number1 <number2)
{
cout < <"大哥你猜小了啊" < <endl;
}
else if (number1==number2)

{
cout < <"不错,你猜对了" < <endl;
cout < <"你共猜了" < <t < <"次" < <endl;
break;
}
t ;
}
while(1);
cout < <"你还想玩一次吗?(y/n)" < <endl;
cin>>n;
}
while(n=='y');

}

我帮你改了下,现在可以实现了,就是在输入数字的下面加一个while()语句,来判定输入的类型是否正确;
当然还要把数组定义一下!char buffer[ 255 ];
网友回复:对了,假如你直接复制粘贴到C 下面,会提示你很多错误,把输出符 < <间空格删掉即可~~呵呵~
网友回复:该回复于2008-07-24 09:13:53被版主删除
网友回复:cin.getline( buffer, 255 ); // 清空上次的输入 为什么这个可以清空了上次的输入? 我用这个 cin.sync();//清空上次输入



网友回复:用这个cin.ignore(10000,'\n'); 来清空上次输入,我不懂,ignore()函数用于输入流.大虾门解释下吗?

istream &ignore( streamsize num=1, int delim=EOF );

ignore()函数用于输入流。它读入字符,直到已经读了num 个字符(默认为1)或是直到字符delim 被读入(默认为EOF).

网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





cin.clear(); // 恢复流的失败标志

cin.sync();  // 清空输入流使用的buffer



关键字:菜鸟,发现,输入,出现,死循环,

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面