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

C语言如何实现持续提问直到输入满足Y/N大小写的合法条件

代码存在两个核心错误:

  • 变量重复声明:你在main函数开头已经声明了char answer,又在do循环内部重新声明了一个同名的局部变量,循环外声明的变量从未被赋值,while判断的是未初始化的垃圾值,逻辑完全失效。
  • 循环终止条件逻辑错误:你使用了逻辑或||,这个条件永远为真——比如输入'y'时,answer != 'n'的条件会成立,循环永远不会终止。应该改用逻辑与&&,只要不是四个合法值之一就继续循环。

修正后的可运行代码:

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

int main(void)
{
    char answer;
    do
    {
        answer = get_char("Are you okay? Y/N: ");
        if (answer == 'y' || answer == 'Y')
        {
            printf("you are okay\n");
        }
        else if (answer == 'n' || answer == 'N')
        {
            printf("you are not okay\n");
        }
    } while(answer != 'y' && answer != 'Y' && answer != 'n' && answer != 'N');
}

可选优化写法

可以引入<ctype.h>库的tolower函数将输入统一转为小写后判断,简化条件逻辑:

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

int main(void)
{
    char answer;
    do
    {
        answer = tolower(get_char("Are you okay? Y/N: "));
        if (answer == 'y')
        {
            printf("you are okay\n");
        }
        else if (answer == 'n')
        {
            printf("you are not okay\n");
        }
    } while(answer != 'y' && answer != 'n');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:54:03