【问题标题】:error message outputs for each character user enters in single line?用户在单行中输入的每个字符的错误消息输出?
【发布时间】:2019-09-16 01:52:33
【问题描述】:

所以我正在用 c 编写程序的一部分,我需要用户输入一个字符(A、B 或 C)。如果输入小写,输入多个字符,或者输入超出上述范围的空格或字母,应输出“Answer is invalid. Please try again”。直到他们输入一个有效的答案。

我遇到了一个问题,它会为他们在一行中输入的每个字符输出错误消息。所以说如果他们输入“asdas”,它会输出五次错误信息。有没有办法确保错误信息只被输出一次?我正在考虑让程序只读取输入的句子中的第一个字符,但我不确定。

我还应该提到,这个任务的一个要求是 getAnswer() 函数返回一个字符。

char getAnswer(){
    char usersAnswer;
    while(1){
        printf("Enter your answer (A, B, C): \n");
        scanf("%c", &usersAnswer);
        if(checkAnswer(usersAnswer)){
            return usersAnswer;
            return 0;
        }else{
            printf("Answer is invalid. Please try again. \n");
        }
    }
}

【问题讨论】:

  • 请不要在标题前面添加“c -”。这就是标签的用途。

标签: c while-loop character


【解决方案1】:

它被多次输出的原因是因为 scanf 试图从输入流中读取数据。而且您只将输入存储在一个字符中,因此所有其他字符仍在流中。因此 scanf 只是在任何时候数据可用时从流中提取,而不是阻塞和等待更多输入。每次输入时都必须清除输入流。 在您的 if(checkAnswer(usersAnswer)) 语句之前,插入这一行

int c = 0;
while(c!='\n' && c!=EOF)
  c = getchar();

这应该会清除您的输入流。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2020-05-03
    • 2016-06-13
    相关资源
    最近更新 更多