C语言scanf函数被跳过直接执行嵌套代码输出False问题排查
问题产生原因
- 类型定义错误:你需要比对的是单词(字符串),但你将存储变量
w1、w2定义为了int整型,根本无法存储字符串内容。 scanf格式符使用错误:%%是用于匹配/输出百分号%本身的转义写法,不是读取输入的有效格式符。运行时scanf会尝试匹配输入流中的%字符,匹配失败就直接返回,不会等待用户输入有效内容,两个int变量属于未初始化的随机值,大概率不相等,所以程序直接输出False。- 字符串比对逻辑错误:就算修改为字符串存储,也不能直接用
==判断相等,==只会比对两个字符串的内存首地址,不会比对内容。
修复方案
按以下步骤修改代码:
- 将
w1、w2修改为字符数组,用于存储输入的单词,数组长度可根据实际单词最大长度调整,示例设置为100。 - 将
scanf的格式符修改为%s,数组名本身就是首地址,不需要加取地址符&。 - 调用
string.h头文件中的strcmp函数比对字符串,当返回值为0时代表两个字符串完全相等。
修复后的完整代码如下:
#include <string.h> #include <stdio.h> int main() { // 定义字符数组存储单词 char w1[100], w2[100]; printf("What is the first word?"); scanf("%s", w1); printf("What is the second word?"); scanf("%s", w2); if (strcmp(w1, w2) == 0) { printf("True"); } else { printf("False"); } return 0; }
内容的提问来源于stack exchange,提问作者JAKE Cho
相关产品推荐
相关产品推荐

