C语言字符串条件判断失效问题求助(CS50入门编程)
问题排查与修正
核心问题1:误用赋值运算符而非比较运算符
你代码里的if((s = "yes"))是把字符串常量"yes"的内存地址赋值给变量s,这个赋值表达式的结果永远是非空指针,所以条件永远为真,不管用户输入什么都会执行printf语句。要做比较得先把=改成==,但这还不够——核心问题2:C语言中不能直接用
==比较字符串内容
在C里,CS50定义的string本质是char*(字符指针),用==比较的是两个指针的内存地址,而非字符串的实际内容。用户输入的字符串存在堆内存,"yes"是存放在只读数据段的常量,二者地址必然不同,所以哪怕输入yes,s == "yes"的结果也是假。正确做法是用标准库的
strcmp函数,它会逐字符对比两个字符串的内容:- 当两个字符串完全相同时,
strcmp(s, "yes")返回0 - 若
s的ASCII值序列小于"yes",返回负数;反之返回正数
- 当两个字符串完全相同时,
修正后的完整代码:
#include <stdio.h> #include <cs50.h> #include <string.h> // 必须包含该头文件才能使用strcmp int main() { printf("Do you want to watch Overlord?\n"); string s = get_string(""); if(strcmp(s, "yes") == 0) // 比较字符串内容是否相等 printf("How old are you?\n"); else if(strcmp(s, "no") == 0) // 补充你需要的no分支逻辑 printf("Maybe next time!\n"); }
内容的提问来源于stack exchange,提问作者Misha Derbent
相关产品推荐
相关产品推荐

