尝试重复读取输入会出错

Trying to repeatedly read input goes wrong

本文关键字:输入 出错 读取 复读      更新时间:2023-10-16

我一直在拼命地试图解决这个问题,但就是找不到有效的解决方案。我的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): ";
}
}