使用C语言从文件中读取信息

时间:2016-10-19 18:59:52

标签: c file document fgetc

所以我有txt文件,我需要从中读取该文件中写入的学生人数,并且因为每个学生都在单独的行中,这意味着我需要读取该文档中的行数。所以我需要:

  1. 打印该文档中的所有行

  2. 写下该文档中的行数。

  3. 所以,我写这个:

    #include "stdafx.h"
    #include <stdio.h>
    
    int _tmain(int argc, _TCHAR* Argo[]){
    
        FILE *student;
        char brst[255];
    
        student = fopen("student.txt", "r");
    
        while(what kind of condition to put here?)
        {
            fgetc(brst, 255, (FILE*)student);
            printf("%s\n", brst);
        }
    
        return 0;
    }
    

    好的,我知道我可以使用相同的循环来打印和计算行数,但我找不到任何工作规则来结束循环。我尝试过的每一条规则都会导致无休止我尝试了brst != EOFbrst != \0。因此,它工作正常并打印文档的所有元素,然后它开始打印文档的最后一行没有结束。那有什么建议吗?我需要用C语言做这个功课,我正在使用VS 2012 C++编译器。

3 个答案:

答案 0 :(得分:1)

OP的代码已关闭,但需要使用fgets()而不是fgetc()并使用fgets()的返回值来检测何时退出,它将是{{1 }} @Weather Vane。还要添加一个行计数器。

NULL

答案 1 :(得分:0)

使用feof()检查eof条件。 您正在逐行正确读取文件,但使用fgets()而不是fgetc() - 并且不需要强制转换。 然后使用sscanf()将行数据分配给变量(或者它的某些“安全”形式)。

答案 2 :(得分:0)

试试这个:

#include "stdafx.h"
#include <stdio.h>
int _tmain(int argc, _TCHAR* Argo[]){
FILE *student;
char brst[255];
char* result = NULL;

  //Ensure file open works, if it doesn't quit
if ((student = fopen("student.txt", "r")) == NULL)
{
  printf("Failed to load file\n");
  return 1;
}

  //Read in the file
for ( (result = fgets( brst, sizeof(brst), student)); 
      !feof(student); 
      (result = fgets( brst, sizeof(brst), student)) )
{
  if ( result == NULL ) break; //I've worked on embedded systems where this actually ment waiting on data, not EOF, so a 'continue' would go here instead of break in that case
  printf("%s\n", brst);
}
fclose( student );
return 0;
}

feof()仅在您读完文件末尾后才会出现。使用带有两个相同读取的for和条件上的feof()是确保按预期读取文件的简单方法。