c++中关于while(t>=0&&t<=60)输入q程序退出遇到死循环问题

来源:百度知道 编辑:UC知道 时间:2024/06/11 05:16:35
#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
char * ch="欢迎使用! 小程序!(输入q退出程序) \n\n";
char * ch1="请输入你需要的时间 (输入q结束输入):";
char * ch2=" 输入到到正确位置并保存 \n\n";
char * ch3="请将 ";
char * ch4="欢迎您的使用,你真的要退出程序吗?(Y/N): ";

cout<<ch;

cout<<ch1;
int t;
cin>>t;

while(t>=0&&t<=60)
{

cout<<dec<<t<<" = ";
cout<<hex<<t;
cout<<ch3;
cout<<hex<<t;
cout<<ch2;
cout<<ch1;
cin>>t;//为何在这里输入q就编程了无限循环了呢?
}
cout<<ch4;
return 0;
}

请帮我把程序改正确~我不知道是怎么回事,明明应该是当程序徐如不是数字时自动退出,但是我试了下,无论徐如什么字母都是死循环,但是输入不再条件范围内的数字却能正确退出,麻烦大家了~

我来回答吧,这个是由于,t定义为int型的,而输入是字符型,这样在接收的时候,实际并没有对t进行赋值,直接跳过cin>>t;语句,所在循环体外面,输入q,并没有对t进行赋值,t还是一个负的很大的数,不执行循环体,从而看起来好像是退出了,实际却不是那样,而在while循环体里就会出现死循环,每次都跳过cin<<t;这个语句,这样就出来你所出现的结果。
程序可修改如下:
#include<iostream>
#include<cmath>
using namespace std;

int main()
{
char * ch="欢迎使用! 小程序!(输入q退出程序) \n\n";
char * ch1="请输入你需要的时间 (输入q结束输入):";
char * ch2=" 输入到到正确位置并保存 \n\n";
char * ch3="请将 ";
char * ch4="欢迎您的使用,你真的要退出程序吗?(Y/N): ";

cout<<ch;

cout<<ch1;
int t=0;
char str[10];
gets(str);
for(int i=0;i<strlen(str);i++)
if(!isdigit(str[i]))
{

if(str[i]=='q') {cout<<ch4;exit(1);}
else
{
printf("对不起,您的输入有误!\n");
exit(1);
}
}
else
t+=(str[i]-48)*pow(10,strlen(str)-1-i);
while(t