#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";
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个程序,让用户输入他们的作业分数并显示他们的结果字母等级.如果用户输入不是有效分数,则会输出"无效输入",并应再次询问用户输入.但是,当我实际运行程序并输入无效值时,它会进入打印"无效输入"的无限循环.为什么是这样?提前致谢.
当用户输入无效输入时,将cin >> score失败并在流上设置错误标志.
在您清除该标志之前,后续的读取操作不会执行任何操作std::basic_ios::clear().
此外,由于读取失败,score有一些未指定的值(因为你没有初始化它),并且显然在你的测试运行中,未指定的值发生不匹配任何继续,所以你从来没有命中break.
而不仅仅是:
std::cin >> score;
Run Code Online (Sandbox Code Playgroud)
试试这个:
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;
}
Run Code Online (Sandbox Code Playgroud)
您可能还需要让流在输入缓冲区中占用换行符.如果你得到"无效的价值!" 消息两次,查看SO如何做到这一点.