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

如何将用户输入与CSV文件内容对比?代码执行失败求助

解决strcmp对比始终返回fail的问题

你的代码出现这个问题主要有几个关键原因,对应修复方案如下:

  • 核心问题:fgets读取到换行符
    当你用fgets读取文件内容时,如果Accounts.csv里的"gaber123"末尾带有换行符(文本文件保存时通常会自动添加),fgets会把这个换行符\n也存入data数组。而用户通过scanf输入的内容不会包含换行符,这就导致strcmp对比的是"gaber123\n"和"gaber123",自然不相等。
    修复:读取后移除data中的换行符,用strcspn函数可以快速实现:

    fgets(data,20,fp);
    data[strcspn(data, "\n")] = '\0'; // 把换行符替换为字符串结束符
    
  • 次要问题:scanf参数错误
    scanf("%s",&x);里的&x是多余的,数组名x本身就代表数组首元素的地址,应该写成scanf("%s",x);,虽然部分编译器不会报错,但这属于不规范写法。

  • 潜在问题:未检查文件打开状态
    如果Accounts.csv不存在或无法读取,fopen会返回NULL,此时调用fgets会触发未定义行为。必须添加文件打开检查:

    FILE *fp= fopen("Accounts.csv","r");
    if(fp == NULL){
        printf("无法打开文件");
        return 1;
    }
    

修改后的完整代码

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

int main() {
    char x[20],data[20];

    scanf("%s",x);
    FILE *fp= fopen("Accounts.csv","r");
    if(fp == NULL){
        printf("无法打开文件");
        return 1;
    }
    fgets(data,20,fp);
    data[strcspn(data, "\n")] = '\0';

    int compare= strcmp(data, x);
    if(compare==0){
        printf("success!");
    }
    else{
        printf("fail");
    }
    fclose(fp); // 记得关闭文件
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:55:19