【问题标题】:How to read from a text file I made in C如何读取我用 C 制作的文本文件
【发布时间】:2016-08-01 16:16:32
【问题描述】:

我是 C 新手,我只是想阅读我在 C 中创建的一个简单文本文件。我通过单击新建 -> 空文件 -> 将其保存到我想要的位置然后添加文件扩展名 ( .txt) 文本文件包含一个示例数独板,完整文件名为 sudokuchar.txt。

我必须从文件中读取并打印出来的代码是:

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

int main()
{
    FILE *fpointer = fopen("sudokuchar.txt", "r");
    char input[100];
    while(fgets(input,100,fpointer))
    {
        printf("%s",input);
    }
    fclose(fpointer);
}

所以当我编译程序时不会打印任何内容并返回 -1。我认为我试图读取的文件有问题??如果有人可以提供帮助,将不胜感激。

【问题讨论】:

  • "我想要的位置" - 除非想要的位置也是进程运行时的活动工作目录,否则发布的代码将无法找到该文件,fopen 将返回 NULL。未能检查这一点,而是错误地假设它刚刚工作,将 NULL 作为文件指针传递给fgets 然后调用未定义行为。似乎一些错误检查和运行时启动配置更改是按顺序进行的。
  • 那么如何将文件保存到活动工作目录?
  • 另请注意,main ()int 类型的函数,在退出时应向 shell 返回零或正 8 位 值(例如 @987654326 @ 如果没有错误,1-255 错误)。另请注意,main 的正确声明是int main (void) {...int main (int argc, char *argv[]) {...(您将看到等效的char **argv 而不是*argv[],并且还有一些编译器接受的其他不可移植参数)。这不会导致读取失败(很可能是fopen 失败),但正确掌握基础知识会有所帮助。

标签: c file printf readfile


【解决方案1】:

始终检查fopen 和其他标准库调用的返回值。您的文件很可能不存在。您可以使用 errno 制作一个友好的用户友好错误消息,只需确保包含 errno.h。总的来说,您的代码应该可以工作,但您需要检查事物的返回值,因为 fopen returns NULL 如果找不到文件。

FILE *fpointer = fopen("sudokuchar.txt", "r");

if(fpointer == NULL) {
    fprintf(stderr, "Error: [Errno %d]: %s\n", 
            errno, strerror(errno));
    return 1;
}

【讨论】:

    【解决方案2】:

    建议检查文件指针返回的内容。如果文件指针返回 0 或 NULL,则文件指针无法指向您提供的文件名。你也可以用这个

    File *fp = fopen(file name with full path (i.e. /home/chex/read.txt),"r")
    

    检查man fopen FILE *fopen(const char *path, const char *mode);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-01
      • 2023-03-13
      • 2016-07-06
      • 2014-09-03
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多