#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
//this program will let the user input their assignment score and see their letter grade
int main() {
int score;
cout << "Input your score: ";
//to make the while loop
int x = 1;
while (x == 1) {
cin >> score;
if (score >= 90){
cout << "\nA";
break;
}
else if (score >= 80) {
cout << "\nB";
break;
}
else if (score >= 70) {
cout << "\nC";
break;
}
else if (score >= 60) {
cout << "\nD";
break;
}
else if (score >= 0) {
cout << "\nF";
break;
}
else
cout << "\nInvalid input";
}
}
我正在尝试编写一个程序,让用户输入他们的作业分数并显示他们的结果字母等级。如果用户输入不是有效分数,则会输出“无效输入”,并应再次询问用户输入。但是,当我实际运行程序并输入无效值时,它会进入打印“无效输入”的无限循环。为什么是这样?提前谢谢。
答案 0 :(得分:7)
当用户输入无效输入时,cin >> score
失败并在流上设置错误标记。
在您使用std::basic_ios::clear()
清除该标记之前,后续的读取操作不会执行任何操作。
此外,由于读取失败,score
有一些未指定的值(因为你没有初始化它),并且显然在你的测试运行中,未指定的值发生不匹配任何继续,所以你永远不会break
。
而不仅仅是:
std::cin >> score;
试试这个:
if (!(cin >> score)) {
// If reading into an int failed, we come here
cout << "Invalid value! Try again" << endl;
// Clear error flag
cin.clear();
// Restart the loop
continue;
}
您可能还需要让流在输入缓冲区中占用换行符。如果你得到“无效的价值!”消息两次,查看SO怎么做。
答案 1 :(得分:0)
你设置x = 1并检查x == 1。对于编译器来说,似乎它可能是一个无限循环,因为它不确定是否会发生中断,这就是为什么它只是一个警告而不是一个错误。对于那种行为,你甚至不需要扩大变量x,你也可以使用while(true)
。