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

C语言Linux学习文本游戏的名字判断逻辑异常问题求助

问题分析与修复方案

代码中的核心错误

  • 名字判断逻辑完全失效:if("Linus Torvalds\n")是在判断字符串字面量的内存地址,该值永远非空,所以无论输入什么名字都会进入Richard Stallman分支,必须用strcmp进行字符串比较。
  • 无法读取带空格的名字:scanf("%s", name)会在空格处停止读取,输入"Linus Torvalds"时,name只会存储"Linus",导致后续匹配失败。
  • 输入处理与条件逻辑混乱:
    • char yesno[1]长度不足,无法存储字符串终止符\0,导致strcmp行为异常。
    • strcmp的返回值逻辑搞反了:返回0才表示字符串相等,原代码的条件判断完全颠倒了分支逻辑。
    • scanf读取字符后残留的换行符会干扰后续输入,导致名字读取为空。

修复后的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 调整全局变量长度,确保能容纳带空格的名字
char name[30];
char yesno;

int main() {
    system("clear");
    printf("???: Hello adventurer, are you here to learn Linux?\n");
    printf("y/n\n");

    // 读取用户输入的y/n,同时清理缓冲区残留的换行符
    scanf("%c", &yesno);
    while ((getchar()) != '\n');

    // 修正分支逻辑:输入y进入学习流程,n则退出
    if (yesno == 'y') {
        printf("???: Great!, What is your name?\n");
        
        // 用fgets读取整行输入,支持带空格的名字
        fgets(name, sizeof(name), stdin);
        // 去掉fgets自动读取的换行符,避免影响字符串比较
        size_t name_len = strlen(name);
        if (name_len > 0 && name[name_len - 1] == '\n') {
            name[name_len - 1] = '\0';
        }
        
        // 精准匹配目标名字
        if (strcmp(name, "Linus Torvalds") == 0) {
            printf("Achievment complete: In God We Trust\n");
            printf("Nice to meet you!, my name is Richard Stallman.\n");
        } else {
            printf("Nice to meet you!, my name is Linus Torvalds.\n");
        }
    } else if (yesno == 'n') {
        printf("Ok!, bye!");
    } else {
        printf("That's not an answer.\n");
    }

    return 0;
}

关键修改说明

  1. 名字匹配修复:用strcmp(name, "Linus Torvalds") == 0替代无效的字面量判断,只有当输入名字完全匹配时才触发Richard Stallman分支。
  2. 支持带空格输入:改用fgets读取整行内容,解决scanf("%s")无法处理空格的问题,同时手动移除换行符保证比较准确性。
  3. 输入逻辑修正:
    • 将yesno改为单个字符,直接用字符比较替代strcmp,避免字符串终止符的问题。
    • 用while ((getchar()) != '\n');清空输入缓冲区的残留换行符,防止后续读取名字时出错。
    • 颠倒了原代码的分支逻辑,确保输入y进入学习流程,输入n退出,符合需求描述。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:25:25