C语言fscanf的一个问题

xingty 2012-12-22 04:46:37
下面程序是《C Primer Plus》上的一个例子。请问words数组在下面程序的作用是什么?我的理解是它是作为临时储存数据的,但是在程序中的第二个while循环中(即while (fscanf(fp,"%s",words) == 1)),不断从文件中读取数据储存到数组, 而数组最大只能容纳40个字符,但文件中的字符超过了40个,为什么还是能够正常输出?


#include <stdio.h>
#include <stdlib.h>
#define MAX 40

int main(void)
{
FILE *fp;
char words[MAX];
char ch ;
int len ;

if ((fp = fopen("wordy", "a+")) == NULL)
{
fprintf(stdout,"Can't open \"words\" file.\n");
exit(1);
}

puts("Enter words to add to the file; press the Enter");
puts("key at the beginning of a line to terminate.");
while (gets(words) != NULL && words[0] != '\0')
{
fprintf(fp, "%s ", words);
}

puts("File contents:");
rewind(fp);
while (fscanf(fp,"%s",words) == 1)
{
puts(words);
}

if (fclose(fp) != 0)
fprintf(stderr,"Error closing file\n");

return 0;
}
...全文
199 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingty 2012-12-23
  • 打赏
  • 举报
回复
非常感谢大家的解答!
lxw_it 2012-12-23
  • 打赏
  • 举报
回复
fscanf每次只读一个字符串,遇到空格,回车换行等即停止。 下一次读取重新填充。 所以单个字符串不超过40 字符是没问题的。 因为你用,gets多次向文件写数据,并且注意到, while (gets(words) != NULL && words[0] != '\0') { fprintf(fp, "%s ", words); } %s都有加一个空格,所以fscanf是可以正常输出的。 你可以把%s后面的空格去掉再试试。
PIE 2012-12-23
  • 打赏
  • 举报
回复
就是将原来读入的字符从前面开始覆盖
引用 3 楼 xingty 的回复:
引用 1 楼 gumh 的回复:引用(即while (fscanf(fp,"%s",words) == 1)),不断从文件中读取数据储存到数组, 而数组最大只能容纳40个字符,但文件中的字符超过了40个,为什么还是能够正常输出? 每次都是讀一個單詞(按空格隔開)到words中,然後輸出,只要單個單詞不超過40個字符就不會溢出。 下一次會將上一次的讀取得沖調。 ……
xingty 2012-12-22
  • 打赏
  • 举报
回复
引用 1 楼 gumh 的回复:
引用(即while (fscanf(fp,"%s",words) == 1)),不断从文件中读取数据储存到数组, 而数组最大只能容纳40个字符,但文件中的字符超过了40个,为什么还是能够正常输出? 每次都是讀一個單詞(按空格隔開)到words中,然後輸出,只要單個單詞不超過40個字符就不會溢出。 下一次會將上一次的讀取得沖調。
在下是初学者,请问“下一次會將上一次的讀取得沖調”是什么意思?
14号选手 2012-12-22
  • 打赏
  • 举报
回复
hile (gets(words) != NULL && words[0] != '\0')
因为gets的原因,这是一个很危险的库函数了,尽量使用fgets吧
prajna 2012-12-22
  • 打赏
  • 举报
回复
引用
(即while (fscanf(fp,"%s",words) == 1)),不断从文件中读取数据储存到数组, 而数组最大只能容纳40个字符,但文件中的字符超过了40个,为什么还是能够正常输出?
每次都是讀一個單詞(按空格隔開)到words中,然後輸出,只要單個單詞不超過40個字符就不會溢出。 下一次會將上一次的讀取得沖調。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧