试图反复阅读输入错误

时间:2017-05-13 16:22:38

标签: c++ io

我一直在拼命想出这个问题,但却无法找到有效的解决方案。我的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键,输入未正确验证。

希望屏幕截图提供更清晰的错误信息。 Screenshot

1 个答案:

答案 0 :(得分:0)

所以,作为一个完整的初学者,我可能会将一堆不同的方法混合成一个(非)令人惊讶地无法解决的问题。

这个帖子对我有用: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): ";
    }
}