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

C语言猜数字游戏如何正确读取用户输入的y/n确认回复?

代码存在的核心问题

  • 未初始化的指针越界:你声明了char* response;字符指针,但没有为其分配有效的内存空间,直接通过scanf向该指针指向的未知地址写入内容属于未定义行为,会导致程序崩溃或者运行结果异常。你只需要存储单个输入字符,不需要用指针,直接声明char response;普通字符变量即可。
  • 字符/字符串比较逻辑错误:你使用response == "y"做判断,这里有两个错误:
    1. 双引号包裹的"y"是C语言的字符串常量,实际存储的是'y' + '\0'两个字符,和单个字符类型不匹配
    2. 就算你用指针存储字符串,==比较的是两个指针的内存地址,不是实际的字符串内容,永远不会相等,所以不管你输入什么都会走else分支把running设为false,这就是你程序无论输入什么都会直接终止的原因。
  • 输出格式符不匹配:你用%s输出单个字符,和变量类型不匹配,会导致输出异常。

修复后的完整代码

#include <stdio.h>
#include <stdbool.h>

int main()
{
    int num = 5; /* temp placeholder for testing */
    int guess;
    char response; // 改为普通字符变量,不需要指针
    bool running = true;

    while (running)
    {
        printf("Guess a number: ");
        scanf("%d", &guess);
            
        if (guess < num)
        {
            printf("That's too low.\n\n");
        }
        else if (guess > num)
        {
            printf("That's too high.\n\n");
        }
        else
        {
            printf("That is correct.\n\n");
            guess = 0;
            printf("Play again? (y/n): ");
            scanf(" %c", &response); // 传入字符变量的地址
            printf("Response: [%c]\n", response); // 用%c输出单个字符
            
            // 和单引号包裹的字符常量比较
            if (response == 'y')
            {
                running = true;
            }
            else
            {
                running = false;
            }
        }
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:54:04