2016-08-01 61 views
0

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

我从文件中读取和打印的代码是:

#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。我假设我想从中读取的文件有问题?如果有人能帮助它将不胜感激。

+1

“我想要的位置” - 除非那个期望的位置也是您的进程在运行时的活动工作目录,否则发布的代码将无法找到该文件,而'fopen'将返回NULL。没有检查,而是错误地认为它刚刚工作,传递NULL作为文件指针到'fgets',然后调用* undefined behavior *。它似乎有一些错误检查和运行时启动配置更改是按顺序。 – WhozCraig

+0

那么我如何将文件保存到活动的工作目录? – katDouglas

+0

另请注意,'main()'是类型为'int'的函数,并且应该在退出时返回0或正8位*值(例如'return 0;'如果没有错误, 255'错误)。还要注意,'main'的正确声明是'int main(void){...'或'int main(int argc,char * argv []){...'(您会看到相同的'char ** argv'而不是'* argv []',并且还有一些编译器接受的其他非可移植参数)。这不会导致读取失败(最可能出现'fopen'失败),但获得正确的基础帮助。 –

回答

1

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

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

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

谢谢你,我加了这个 – katDouglas

0

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

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

检查man fopen FILE *的fopen(为const char *路径,为const char *模式);