一次从文件输出一行

时间:2009-11-17 06:15:03

标签: c++ file-io

我正在尝试一次输出一行文件。我目前正在硬编码,到目前为止我有这个:

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。我想我需要这样做,但不知道为什么。还在学习....谢谢!

5 个答案:

答案 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)

C的{p> 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)

你应该从fgetc的输出中检查eof:

...
x = fgetc(file);
while (x != '\n' && x != EOF) {
...
那里有

fgetc手册