我编写了这个C代码段,使用for循环将'n'个单词读入文件。应该在文件的开头插入一个新单词,我每次都使用fseek
到达。
问题:只有最后扫描的单词才会被放入文件中,而之前的n-1个单词不会出现在文件中。没有显示错误,消息“完成!”正确打印'n'次。我做错了吗?
printf("No. OF words: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Enter word: ");
scanf("%s",word);
fprintf(fp,"%s \n",word);
printf("done!\n\n");
fseek( fp, 0, SEEK_SET );
}
fclose(fp);
答案 0 :(得分:3)
无法在文件的开头追加。您当前的代码将覆盖文件的先前内容。
您基本上有两个选择:
将所有单词存储在内存中并按所需顺序打印到文件或
将整个文件fseek
读到开头,打印新单词,然后打印其余内容。
答案 1 :(得分:0)
你明显覆盖了现有的单词。我已经理解了有一个文件&#34; file.txt&#34;有一些数据,你会输入单词:
w1,w2,w3,.....,w_n-1,wn应该写在文件中,如:
wn,w_n-1,w_n-2,....... w3,w2,w1,原始数据。这是一个迂回的方法:
1.创建一个重复的文件&#34; dup1.txt&#34;与原文在同一个地方,并在那里添加新词 2.然后添加另一个文件,以相反的顺序复制新输入的单词。将此文件重命名为&#34; dup1.txt&#34;覆盖。 2.现在将原始数据复制到此文件并重命名此文件&#34; file.txt&#34;覆盖..
应该这样做。如果我错过了什么,请指出。
答案 2 :(得分:0)
你可以这样做,这会在你文件的顶部添加新信息。所以,输出将是hwllo 9,hellow 8 ..... hellow 0。
FILE *f;
for(i=0;i<10;i++)
{
f = fopen(cycleInfoFileName11,"at");
fprintf(f,"hellow : %d\n",i);
printf("hellow : %d\n",i);
}