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

C语言用户输入存为变量方法及新手程序输入异常排查求助

问题分析与修复方案

嘿,作为纯新手能写出代码已经超棒啦!咱们一步步揪出这些小bug,让你的搞笑程序正常跑起来:

1. 变量类型与输入格式完全不匹配

你定义了int yorn(整数类型),但要接收的是"yes"/"no"这类字符串——整数根本存不了字符串啊!而且scanf("%d", &yorn)是专门用来读取整数的,你输入字符串的话,scanf会直接罢工,导致后续逻辑彻底乱掉。

2. 字符串比较犯了两个致命错误

  • 首先,if (yorn = "yes")里的=是赋值运算符,不是比较用的==!这行代码会把字符串"yes"的内存地址强行塞给整数变量yorn,这个赋值表达式的结果永远是非零(地址不会是空的),所以if条件永远成立,直接执行printf输出那段话——这就是你看到程序直接输出结果、根本不等你输入的核心原因!
  • 其次,就算改成==,C语言里也不能直接用==比较字符串,必须用标准库的strcmp函数(得先包含<string.h>头文件才行)。

3. 小细节:输出缓冲区没刷新

你的printf结尾没加换行符\n,有时候会导致输出内容卡在缓冲区里,看起来像是程序没反应,加上换行就能立刻看到输出啦。

修复后的搞笑程序代码

#include <stdio.h>
#include <string.h> // 必须包含这个头文件才能用strcmp

int main() {
    char yorn[10]; // 用字符数组来存储输入的字符串
    printf("do you have friends? please answer yes or no.\n"); // 加换行符刷新输出
    scanf("%s", yorn ); // %s是读取字符串的格式符,数组名本身就是地址,不用加&
    
    // 用strcmp比较两个字符串,返回0表示两者完全相等
    if (strcmp(yorn, "yes") == 0) {
        printf("no, you dont. ...\n"); // 你的搞笑核心逻辑
    } else if (strcmp(yorn, "no") == 0) {
        printf("haha, you just admitted it!\n"); // 加个补刀的搞笑分支
    } else {
        printf("hey, follow the rules! answer yes or no only!\n"); // 处理无效输入
    }
    return 0;
}

额外小提示

  • 用scanf("%s", yorn)读取字符串时,它会自动跳过空格,直到遇到下一个空格或换行,所以用户输入"yes"完全没问题,但如果输入"yes please"只会读取"yes",不过你的场景里完全够用啦。
  • 编译的时候直接用gcc yourfilename.c -o yourprogram就行,一般编译器默认会链接标准库,不用额外操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:07:59