如何在运行带有重定向输入的C程序时知道EOF?

时间:2015-10-09 02:21:10

标签: c file-io io

我正在运行一个带有来自文本文件的重定向输入的C程序,如下所示:

./a.out < data.txt

data.txt是一堆单词,每行一个,如下所示:

WORDONE
WORDTWO
WORDTHREE
WORDFOUR

我的程序一次输入一个字。有没有办法检测我什么时候到达最后一个字?有没有办法在使用重定向输入时检查EOF?

以下是我阅读输入的代码:

int main() {
    char word[51];
    while(getNextWord(word)) {
        printf("%s\n", word);
    }
}

int getNextWord(char word[51]) {
    char input[51];
    scanf("%s", input);
    if (strcmp(input, word) != 0) {
        strcpy(word, input);
        return 1;
    } else {
        return 0;
    }

}

1 个答案:

答案 0 :(得分:1)

添加支票以确保scanf成功。

而不仅仅是:

scanf("%s", input);

使用:

// Specify a maximum width to prevent buffer overflow
if ( scanf("%50s", input) == 1 )
{
   // Success. Use input.
   return 1;
}
else
{
   // Most likely EOF has been reached.
   // Do the right thing.
   return 0;
}