如何解决程序在C ++中运行而不会永远停止
我只是一个初学者,我正在尝试学习C ++作为我的第一语言。自从我开始学习它以来只有2-3天,所以我确实是该领域的新手,这就是为什么这对您来说可能听起来有些愚蠢的问题。因此,我仍在学习C ++中的命令,同时尝试在while循环中学习更多信息,我只是为了练习而创建了此代码。
它可以按我的意图很好地工作,但是当我尝试强制错误并检查while循环如何工作时出现了问题。首先,当我输入了将使while循环给出错误并给出“请输入有效年份”的语句的年份后,当您第一次尝试输入有效年份但如果您首先输入错误的年份时,该方法就可以正常工作然后输入正确的年份,仍然会显示输入有效的年份。无论如何,我对代码进行了一些调整来解决该问题。
问题是当我输入一个数字时。等于或大于10位的数字,程序将继续运行,并显示“请输入有效年份”语句。否,它可以正常工作。比那要小。 (请参见附件。)
我知道这并不是什么大问题,但是正如我告诉我的我只是个初学者,我真的很想知道我在做什么错。我使用了Eclipse IDE,并尝试使用MinGW编译器在Windows CMD中进行手动编译。结果是一样的。
知道我在做什么错是非常有帮助的,因为如果我什至无法弄清楚基础知识,那么我将如何学习更复杂的东西。图片链接和代码如下。
#include <iostream>
using namespace std;
int main()
{
cout << "Enter your birth year \n";
int age,year;
cin >> year;
age = 2020 - year;
while (age <= 0) {cout << "Please input a valid year \n"; cin >> year; age = 2020 - year;}
cout << "So you are " << age << " years old \n";
if (13 < age && age < 18 ) { cout << "That classifies you as a teenager. \n"; }
else { if ( age < 13 ) { cout << "You are still a child \n";}}
if (age >= 18) { cout << "That classifies you as an adult. \n";
if (age > 60)
{cout << "And also thats quite a number you have reached. \nIt's actually higher than the average human life expectancy \nCONGRATS \n";}
}
return 0;
}
解决方法
istream::operator>>
将设置failbit
。
failbit
将阻止它接受新输入。
通常,大于10位的整数被认为是无效的,因为int
(32位长)最多只能存储2,147,483,647
个数字。
要解决此问题,您可以使用basic_ios::clear
重置failbit
。
while (age <= 0) {cout << "Please input a valid year \n"; cin >> year; age = 2020 - year;}
应该是
while (age <= 0) {
cout << "Please input a valid year \n";
cin.clear(); // add this to clear failbit
cin >> year;
age = 2020 - year;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。