在C中一次读一行

可以使用哪种方法从C中的文件一次读取一行?

我正在使用fgetsfunction,但它不起作用。 它只读取空格分隔的标记。

该怎么办?

当你因某些原因无法使用fgets()时,这应该可行。

 int readline(FILE *f, char *buffer, size_t len) { char c; int i; memset(buffer, 0, len); for (i = 0; i < len; i++) { int c = fgetc(f); if (!feof(f)) { if (c == '\r') buffer[i] = 0; else if (c == '\n') { buffer[i] = 0; return i+1; } else buffer[i] = c; } else { //fprintf(stderr, "read_line(): recv returned %d\n", c); return -1; } } return -1; } 

使用以下程序从文件中逐行获取。

 #include  int main ( void ) { char filename[] = "file.txt"; FILE *file = fopen ( filename, "r" ); if (file != NULL) { char line [1000]; while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */ { fprintf(stdout,"%s",line); //print the file contents on stdout. } fclose(file); } else { perror(filename); //print the error message on stderr. } return 0; } 

如果您正在编写具有GNU C库可用的平台,则可以使用getline():

http://www.gnu.org/s/libc/manual/html_node/Line-Input.html

fgets函数将从一个或多个字符读取一行,其中num是传递给fgets的第二个参数。 你是否通过一个足够大的数字来读取这条线?

例如

 // Reads 500 characters or 1 line, whichever is shorter char c[500]; fgets(c, 500, pFile); 

比。

 // Reads at most 1 character char c; fgets(&c,1,pFile); 

这不是一个评论,而是一个完整的答案,但我没有足够的评论。 🙂

这是fgets()的函数原型:

 char *fgets(char *restrict s, int n, FILE *restrict stream); 

它将读取n-1个字节或直到新行或eof。 有关详情,请参阅此处

fgets()应该是要走的路……

如果您知道您的线条适合缓冲区或使用fgetc来更好地控制读取,请使用fgets

使用fgets从行读取,然后使用getc(...)来咀嚼换行符或行尾以继续阅读….这是一个永远阅读行的例子……

 //读取500个字符或1行,以较短者为准
 char c [500],chewup;
 while(true){
     fgets(c,sizeof(c),pFile);
     if(!feof(pFile)){
         chewup = getc(pFile);  //咀嚼换行终结器
         //用C做点什么
     }其他{
        打破;  //文件结尾到达了......
     }
 }

错误来源:

实际上这不是我的错……在这种情况下。 我正在使用strtok函数,并且意外地修改了我原来的原始字符串。 因此,在打印时,我收到了错误……

谢谢大家帮助我.. 🙂

您可以使用fscanf而不是fgets。 因为fgets fscanf用于包含空格的字符但是在使用fscanf时你可以单独访问保存在file.eg中的数据。有一个名为class roll.now的文件声明一个字符串和两个整数行。