提问人:BiBeoLovesCoding 提问时间:11/5/2023 最后编辑:BiBeoLovesCoding 更新时间:11/5/2023 访问量:55
如何阅读文件的第一行并与您在 C 中输入的内容进行比较?我是 C 语言的新手,需要一些支持
How to read the first line of a File and compare to what you input in C? I'm new to C and need some support
问:
我正在尝试将表数据写入 C 文件中,我只想在一次输入后文件的第一行保持不变!我该怎么做?提前致谢
我尝试了很多方法,但似乎没有什么适合我想要的。
这是我的代码
#include<stdio.h>
#include<sting.h>
ỉnt main(){
FILE *fptr;
fptr = fopen("text.txt", "r");
if(strcmp(fgets("123", 1, fptr),"123")==0){
fclose(fptr);
}
else{
fptr = fopen("text.txt", "r");
fprintf(fptr, "123");
fclose(fptr);
}
}
答:
1赞
chqrlie
11/5/2023
#1
以下是一些问题:
- 您必须包括和
<stdio.h>
<string.h>
- 您应该在读取模式下打开文件,而不是 ,
"r"
"w"
- 您应该使用局部数组来读取该行。
- 您应该在字符串中包含尾随换行符以进行比较
这是修改后的版本:
#include <stdio.h>
#include <string.h>
ỉnt main() {
FILE *fptr = fopen("text.txt", "r");
if (fptr) {
char buf[80];
if (fgets(buf, sizeof buf, fptr)) {
if (strcmp(buf, "123\n") == 0) {
printf("file contains 123\n");
} else {
printf("file does not contain 123: %s\n", buf);
}
} else {
printf("file is empty\n");
}
fclose(fptr);
} else {
printf("cannot open file %s\n", "text.txt");
}
return 0;
}
评论
strcmp(fgets("123", 1, fptr),"123")
是双重剂量的未定义行为:尝试将一个 () 字节写入字符串文字 指向的只读内存,或传递给 if 失败。目前还不清楚你要做什么,但至少你应该阅读一些关于fgets
的文档。1
"123"
NULL
strcmp
fgets
fopen("text.txt", "w")
-"w"
每次运行此程序时,都会截断文件(删除其所有内容),并打开文件进行写入。同样,建议阅读fopen
的文档。fgets()
STDIN