You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

输入非y/n字符时,循环为何重复两次提示有效字符要求?

问题分析与解决

核心问题原因

  1. 重复读取输入:开头用get_char读取了一次输入,后续do-while循环里又用scanf读取,导致输入逻辑混乱。
  2. 未处理换行符:scanf("%c", &answer)会读取输入的所有字符,包括用户按下回车产生的换行符\n。当你输入a加回车时,第一次scanf读走a,第二次循环读走\n,这两个字符都不是y/n,所以触发两次提示。
  3. 循环条件逻辑错误:原代码while (answer != 'y' || answer != 'n')永远为真(一个字符不可能同时是y和n),只能靠break强制退出循环,逻辑不严谨。

修正后的代码

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    char answer;
    do{
        printf("Do You Agree? y/n \n");
        // 前面加空格,自动跳过所有空白字符(换行、空格等)
        scanf(" %c", &answer);

        if (answer == 'y')
        {
            printf("Great!\n");
            break;
        }
        else if(answer == 'n')
        {
            printf("That's unfortunate\n");
            break;
        }
        else
        {
            printf("only y/n please.\n");
        }
    }while (answer != 'y' && answer != 'n');
}

关键修改说明

  • 移除开头的get_char,统一用printf输出提示,避免重复读取输入。
  • scanf改为" %c":前面的空格会过滤掉输入中的空白字符(比如回车产生的\n),确保每次只读取有效字符。
  • 修正循环条件为answer != 'y' && answer != 'n':只有当输入既不是y也不是n时才继续循环,逻辑更清晰。

运行效果验证

输入非y/n字符时,只会提示一次;输入y或n时,正常输出对应内容并退出程序。

内容的提问来源于stack exchange,提问作者jaudiola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:57:21