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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:53:11