2

这里的 printf 语句只打印出文件中的最后一个单词。这是为什么?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    FILE *fp;
    int c;
    char string[100];
    fp = fopen("exam.txt", "r");
    c = getc(fp);
    while(c!=EOF)
    { 
        fscanf(fp, "%s", string);
        c = getc(fp);
    }
    fclose(fp);
    printf("%s", string);
    return 0; 

}
4

1 回答 1

3

因为你最后只打印一次......

printf("%s", string); 

您需要在此循环内打印:

while(c!=EOF)
{ 
    fscanf(fp, "%99s", string);
    printf("%s\n", string);  // now you can see the files as you read it.
     c = getc(fp);
} 

如果你想看到每一行。你只是string每次都覆盖。

int c此外,您在使用它之前不会进行初始化。

分解fscanf()

 fscanf(fp,       // read from here   (file pointer to your file)
        "%99s",   // read this format (string up to 99 characters)
         string); // store the data here (your char array)

您的循环条件是当下一个字符不是 EOF 表示文件结束时(在从文件中读取所有数据后发生的条件)

所以:

while (we're not at the end of the file)
     read up a line and store it in string
     get the next character

您会注意到您的算法不会检查该字符串中的任何内容,它只是写入它。这将每次覆盖那里的数据。这就是为什么您只能看到文件的最后一行,因为您一直在写string,而其中的最后一件事恰好是您在看到 EOF 字符并跳出 while 循环之前阅读的最后一行。

于 2012-12-19T18:17:17.490 回答