cin输入格式不正确的问题

C++语言 码拜 9年前 (2016-02-03) 1293次浏览
 int main()
 {
 	int num;
 	cout<<"请输入题号:" << endl;
 	while(1)
 	{
		cin>> num;
		cout<<num<<endl;
		if(num >= 1 && num <= 4)
			break;
		cout<< "没有这道题,重新输入:" << endl; 
          //当本人输入9.9或其他小数时,程序会一直输出“没有这道题,重新输入:”这句话。
          //哪位高手能指点一下?
 	}
	switch (num)
 	{
 		case 1:	punish();break;
 		case 2: day();break;
 		case 3: triangle();break;
 		case 4: sort();break;
	}
 	return 0;
 } 
解决方案:25分
cin尝试将输入的double型数字读为int型数据失败后,会产生一个错误状态–cin.fail().而要用cin读取输入流中的数据,输入流必须处于无错误状态。因此,由于错误状态的存在,会一直执行while循环。
LZ可以在cin>>num;下面加一句就知道输入缓冲区中还剩下啥了
(num会读取double的整数部分(还留下小数点和小数点后的数字,假如是1到5之间的小数都能通过break跳出while循环)

if ( std::cin.fail() ) {
			char error_str[32] = {0};
            std::cin.clear();
            std::cin >> error_str;
            std::cout << "fail,the input char is:" <<error_str << std::endl;
        }
解决方案:10分
原因是你的输入流已经破坏了
使用以下恢复:
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), “”\n””);
解决方案:5分
你输入浮点型数据,导致流发生错误,后续就读不成功,所以num就一直是 9

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明cin输入格式不正确的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)