如何将用户输入与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
相关产品推荐
相关产品推荐

