如何阅读文件的第一行并与您在 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

提问人:BiBeoLovesCoding 提问时间:11/5/2023 最后编辑:BiBeoLovesCoding 更新时间:11/5/2023 访问量:55

问:

我正在尝试将表数据写入 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);
        }
    }
C 文件 比较

评论

1赞 Weather Vane 11/5/2023
欢迎!请发布您尝试过的代码,以及有关预期内容和出错的详细信息。我们通常希望看到一个最小可重现示例,这是显示问题的最短完整代码。
2赞 Oka 11/5/2023
strcmp(fgets("123", 1, fptr),"123")双重剂量的未定义行为:尝试将一个 () 字节写入字符串文字 指向的只读内存,或传递给 if 失败。目前还不清楚你要做什么,但至少你应该阅读一些关于fgets的文档1"123"NULLstrcmpfgets
0赞 Oka 11/5/2023
fopen("text.txt", "w") - "w"每次运行此程序时,都会截断文件(删除其所有内容),并打开文件进行写入。同样,建议阅读 fopen 的文档
0赞 Weather Vane 11/5/2023
目前尚不清楚该程序的输入来自哪里。您正在写入“text.txt”,那么是否应该从(键盘)读取?fgets()STDIN

答:

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;
}