C语言从文件中读取信息

Reading information from a file in C language

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

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

  2. 写下该文档的行数。

所以,我这样写:

#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 != [=12=]。所以,它工作正常并打印文档的所有元素,然后它开始打印文档的最后一行,没有结束。那么有什么建议吗?我需要用C语言做这个作业,我正在使用VS 2012 C++编译器。

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

试试这个:

#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() 是确保您按预期读取文件的简单方法。

OP 的代码很接近,但需要使用 fgets() 而不是 fgetc() 并使用 fgets() 的 return 值来检测何时退出,它将是 NULL 。还要添加一个行计数器。

#include <stdio.h>

int main(void) {
  FILE *student = fopen("student.txt", "r");
  unsigned line_count = 0;
  if (student) {
    char brst[255];

    //  fgetc(brst, 255, (FILE*)student);
    while (fgets(brst, sizeof brst, student)) {
      line_count++;
      printf("%u %s", line_count, brst);
    }
    fclose(student);
  }
  printf("Line Count %u\n", line_count);
  return 0;
}