我正在尝试一次输出一行文件。我目前正在硬编码,到目前为止我有这个:
int main(int argc, char *argv[])
{
int x;
int k;
int limit = 5;
FILE *file;
file = fopen("C:\\Documents and Settings\\jon\\My Documents\\Visual Studio 2008\\Projects\\Project1\\Assignment8_2\\Debug\\TestFile1.txt", "r");
if (file == NULL) {
perror("Error");
}
for (k = 1; k <= limit; k++) {
while ((x = fgetc(file)) != '\n') {
printf("%c", x);
}
}
fclose(file);
}
我想知道上面的代码在哪里,如果有的话,我可以检查EOF。我想我需要这样做,但不知道为什么。还在学习....谢谢!
答案 0 :(得分:5)
如果你可以约束一行的最大长度,fgets可能是一个更好的阅读每一行的方法;但是既然你提到了C ++,你可以考虑使用getline(警告:fgets也将\n
放在它填充的缓冲区中,getline不会。两者都很容易检查文件结尾(fgets在eof上返回NULL,getline在其istream参数上设置eofbit,它也返回)。
答案 1 :(得分:2)
也许你可以试试这个:
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int main() {
int sum = 0;
int x;
ifstream inFile;
inFile.open("test.txt");
if (!inFile) {
cout << "Unable to open file";
exit(1); // terminate with error
}
while (inFile >> x) {
sum = sum + x;
}
inFile.close();
cout << "Sum = " << sum << endl;
return 0;
}
答案 2 :(得分:2)
fgets()
,C ++的getline()
。
C:
#include <stdio.h>
#include <stdlib.h>
// adjust as appropriate
size_t const MAX_LINE_LENGTH = 1024;
int main()
{
FILE * in;
char line[ MAX_LINE_LENGTH ];
if ( ( in = fopen( "test.txt", "r" ) ) == NULL )
{
puts( "Failed to open test.txt." );
return EXIT_FAILURE;
}
while ( fgets( line, MAX_LINE_LENGTH, in ) != NULL )
{
printf( "%s", line );
}
fclose( in );
return EXIT_SUCCESS;
}
C ++:
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::ifstream in( "test.txt" );
std::string line;
while ( getline( in, line ) )
{
std::cout << line << std::endl;
}
in.close();
return 0;
}
答案 3 :(得分:0)
您可以调用feof()来检查EOF或检查fgetc()的返回码是否与EOF匹配。
我在你的代码中添加了两个版本,虽然我不确定循环(尤其是外部循环)应该做什么,但是在你的示例的上下文中,EOF检查看起来像这样..
/* EOF would now terminate both loops, using feof() and fgetc() return to check EOF */
for (k = 1; k <= limit && !feof(file); k++) {
while ((x = fgetc(file))!='\n' && x!=EOF) {
printf("%c", x);
}
}
答案 4 :(得分:-1)