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
相关产品推荐
相关产品推荐

