尝试重复读取输入会出错
Trying to repeatedly read input goes wrong
我一直在拼命地试图解决这个问题,但就是找不到有效的解决方案。我的C++知识有限,所以我的代码可能也是一团糟。
我想要实现的目标:
-
要求用户输入
-
检查输入是否等于1、2 或 3
- 如果上一次检查失败,请再次提示用户,直到输入有效输入。
我当前的代码:
我已经尝试了几种解决方案及其组合,因此当前状态可能没有多大意义: `
void execute()
{
printf("Waiting for input:");
while(true) {
char buffer[10];
char input[10];
if(fgets(buffer, sizeof(buffer), stdin) != NULL){
sscanf(buffer, "%s", input);
if (!strcmp(input, "1") || !strcmp(input, "2") || !strcmp(input, "3")) {
varKey = input[0] - '0';
return;
}
else {
printf("Invalid input, try again (1, 2, or 3):");
}
}
//std::cin.sync();
//std::cin.clear();
//std::cin.ignore(INT_MAX,'n');
flushBuffer();
}
}
void flushBuffer()
{
int c;
while(c = getchar() != 'n' && c != EOF);
}
对于上下文:
主函数execute()
被重复调用,但对于每次迭代,所有内容都会完全重置。(就像您第一次启动应用程序一样)
现状:
- "快乐流动"完美运作。只要用户插入有效的输入, 应用程序完全按预期工作。 输入
- 无效输入后,我再次收到提示,但必须按两次
return
键,并且输入未正确验证。
希望屏幕截图能更清楚地说明出了什么问题。 截图
所以,作为一个完整的初学者,我可能将一堆不同的方法捣碎成一个(非)令人惊讶的方法没有成功。
这个线程为我做了诀窍:http://www.cplusplus.com/forum/articles/6046/。
这是我的结果代码:
#include <string>
#include <sstream>
void execute()
{
std::cout << "Waiting for input: ";
while(true) {
int value = 0;
std::string input;
std::getline(std::cin, input);
std::stringstream myStream(input);
//Try to convert input to integer
if (myStream >> value) {
if(value == 1 || value == 2 || value == 3) {
varKey = value;
return;
}
}
std::cout << "Invalid input, try again (1, 2, or 3): ";
}
}
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- 查找大输入的位数总和时出错?
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 当使用 std::CIN 输入结构时,它会出错
- 使用 Visual Studio 代码读取 C++ 中的输入流时出错
- 在C++中使用istringstream读取输入时出错
- 如果我决定输入 (1 2) 而它要求 x,为什么我的输出会出错,但如果我输入 (12) 工作正常
- 确定输入"conscalc: calc"的类型时出错。不能联合编码器。具有不同字段集的结构类型
- C++:使用 fgets() 读取字符输入时出错
- 这个查找查询是否出错,因为我输入的数字太大
- 尝试重复读取输入会出错
- C++输入重定向导致文件参数工作时出错
- 尝试从 csv 文件输入大量数据时出错
- 在比较特定输入中的程序的数组中出错
- 获取 ADC 输入时出错
- 使用 swig 时出错:输入 (1) 中的语法错误
- 使用 FFMPEG 将每个输入图像转换为 H264 编译时出错,该图像在 MevisLab 中运行的 Visual St
- 将字符串数组作为输入时出错
- 迭代映射以获取输入时出错
- 保护输入和输出文件描述符时出错