gpt4 book ai didi

c - 为什么我的代码只使用 fscanf 存储文件中的最后一个字?

转载 作者:行者123 更新时间:2023-12-04 05:18:22 25 4
gpt4 key购买 nike

这里的 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;

}

最佳答案

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

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 循环之前阅读的最后一行。

关于c - 为什么我的代码只使用 fscanf 存储文件中的最后一个字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com