如何让fscanf在新行之后停止阅读

时间:2014-09-10 17:31:29

标签: scanf

#include <stdio.h> 
#define MAX 1000

int line_counter (FILE *file, char buf[]);

int main(int argc, char *argv[]) {
    FILE *ptr_file; 
    char buf[MAX];
    ptr_file = fopen("alice-eg.txt", "r");

    if (!ptr_file) {
        return 1;
    } 

    int count = 0;

    while (fscanf(ptr_file, "%s", buf) == 1) {
        printf("%s", buf);
        if (buf == '\n') {
            return count;
        }
        else {
            count += 1;
        }
    }
    printf("The number of words in this line is: %d", count);
    return 0;    
} 

我想做一些与此相关的事情,但我不知道如何让它工作,因为buf只是一个字母数组的指针(纠正我,如果我错了我刚开始用C而我对指针的理解还是很糟糕的。

1 个答案:

答案 0 :(得分:0)

fscanf将文件中的行(由ENTER分隔)写入buff数组,因此如果它将读取空行buff[0] = '\n',那么这应该是你的条件。

其次:

while (fscanf(ptr_file, "%s", buf) == 1)

错误,因为fscanf返回读取字符的数量,因此对于行“abcd”形成文件,它将返回4并且您的循环将立即停止而不是读取整个文件,因此您的条件应该是:

while (fscanf(ptr_file, "%s", buf) != EOF)

因为fscanf会在到达文件末尾时返回EOF