所以我有txt文件,我需要从中读取该文件中写入的学生人数,并且因为每个学生都在单独的行中,这意味着我需要读取该文档中的行数。所以我需要:
打印该文档中的所有行
写下该文档中的行数。
所以,我写这个:
#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 != EOF
,brst != \0
。因此,它工作正常并打印文档的所有元素,然后它开始打印文档的最后一行没有结束。那有什么建议吗?我需要用C语言做这个功课,我正在使用VS 2012 C++
编译器。
答案 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()是确保按预期读取文件的简单方法。