我正在尝试编写一个程序,我将文字添加到一个文本文件中。此外,我可以删除此文件中的任何单词,并将没有该单词的结果保存到另一个文本文件。但是当我运行它时,我的第二个文本文件用H符号填充,其大小可以超过100 MB。这段代码有什么问题?这是:
int main(void)
{
int wordNumbers;
int i;
char buf[512];
char word[128];
FILE *o_file = fopen("C:\\atest.txt", "a");
FILE *s_file = fopen("C:\\btest.txt", "w");
printf("please add an amount of words of the dictionary ");
scanf("%i", &wordNumbers);
for (i=0; i< wordNumbers; i++)
{ char word[100] = {0};
printf("add a word into the dictionary please\n");
scanf("%s", &word);
fprintf(o_file, "%s\n", word);
}
if(!o_file || !s_file) return -1;
printf("please write down the word you want to delete\n");
scanf("%s",&word);
do
{
fscanf(o_file, "%511s", buf);
if(!strcmp(buf, word))
continue;
fprintf(s_file, "%s\n", buf);
}
while(!feof(o_file));
fclose(o_file);
fclose(s_file);
}
答案 0 :(得分:2)
您打印到文件o_file
以插入字符串。然后,在此之后,您开始从同一个文件中读取。
对单个文件的读写都使用相同的文件指针。由于文件指针始终位于这些write
之后的文件末尾,因此下一个read
应该会失败 - 但是因为您没有检查fscanf
的结果,你没有意识到这一点,并且将未初始化的数据写入新文件。
o_file
后,将文件指针重置为fseek (o_file, 0, SEEK_SET)
或rewind (o_file)
开头。fscanf
(和scanf
)是否返回正确数量的已识别项目。返回值是有原因的。