为什么在c++中每个循环都不要求命令行输入?
Why does a loop not ask for command line input every cycle in C++?
我有一个用c++编写的小程序,它请求命令行输入用户的等级。如果输入是有效的(即0到100之间的数字),则调用一个开关,根据用户的等级输出一些东西,然后程序成功退出。
如果用户输入的数字不是有效的等级,则程序成功地循环并请求有效的输入,直到用户输入适当的等级。
但是,如果用户输入一个根本不是数字的String,例如"no",循环将无限地请求一个有效的分数,而不会停下来接受输入,最终导致命令行崩溃。
完整程序:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(int argc, char** argv) {
cout << "nEnter your grade: ";
int grade;
// Infinite input loop.
while(true) {
// Is the String a valid grade?
if(cin >> grade && grade >= 0 && grade <= 100) {
switch(grade / 10) {
case 10:
case 9:
cout << "A is for "Awesome"!";
break;
case 8:
cout << "B is okay.";
break;
case 7:
cout << "C isn't okay.";
break;
case 6:
cout << "Bad luck.";
break;
case 5:
case 4:
case 3:
case 2:
case 1:
cout << "Ouch!";
break;
}
cout << "nn";
break;
} else {
cout << "Please enter a valid grade: ";
}
}
}
这是因为流进入了失败状态。当在流中设置失败位时,所有操作都将失败。您需要在流上调用clear()
以清除错误标志,然后您需要删除流中可能仍然存在的任何额外输入。你可以用
cin.clear(); // clear error flags
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
您需要为此包含<limits>
标头
相关文章:
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- 是否可以在命令行中将输入参数传递给可执行文件
- 使用makefile中的命令行输入
- 如何在窗口上的命令行中读取输入 .in 文件
- C++使用命令行输入 txt 文件,但打开文件失败
- C 错误:从命令行输入更改为变量输入
- 如何创建一个 void 数组,其大小将由用户从命令行输入指定
- 从命令行输入分配二维数组
- istream用于C++/Poco的命令行输入
- 命令行输入c++
- 从命令行输入
- 基于命令行输入创建 2D 数组
- 从命令行输入参数为带 N 字节的十六进制
- 如何为此C++程序提供命令行输入
- 如何在c++中对命令行输入进行类型检查
- 以不同的方式接收命令行输入
- 为什么在c++中每个循环都不要求命令行输入?
- Visual studio c++从命令行输入大字符串
- 从c++命令行输入文本文件