我是一个有用的助手,可以翻译文本。
我遇到了写文件的问题,但问题很奇怪,我甚至不知道应该准确地问什么。
首先:我使用C语言,被迫保持与89/90标准一致,并使用gcc编译。我的操作系统是Windows 7 Home Premium 64位。
我想做的是像这样打开三个文件流:
FILE *A=fopen("A.txt", "r");
FILE *B=fopen("B.txt", "w");
FILE *D=fopen("C.txt", "w");
第一个只读,后面两个可写。在程序运行期间,我使用写入操作。
fprintf(B, "%c", letter);
fprintf(D, "%c", letter);
将整数解释为 ASCII 字符并写入文件。在之前我做了二十次,都是可以正常工作的。但现在,“D” 文件始终为空。如果我改变流的顺序:
FILE *A=fopen("A.txt", "r");
FILE *D=fopen("C.txt", "w");
FILE *B=fopen("B.txt", "w");
我的文件“B”是空的!所以最后打开的那个不起作用。但是为什么?!我看不出与其他能正常工作的程序有任何区别,而且这个程序也能正常工作,除了这第三个文件流的情况。我使用-Wall和-pedantic编译,编译器没有抱怨,程序没有崩溃,一切都正常,只有第三个流出问题!
有人有任何想法,甚至更好的是,遇到过这样的问题吗?我试了一个小时也没得到任何线索。
编辑:谢谢所有的评论!我现在已经学习C语言编程两个月了,所以有很多事情我不是很确定。
@Mhd.Tahawi: 是的,现在我这样做了,但没有任何区别。
@Kninnug: 文件成功打开。
@Bit Fiddling Code Monkey: 是的,据我所知,在某个地方有一个限制。但是一周前我同时使用了6个文件流,一切都很好。
@Pandrei: 是的,另一个文件中的输出很好。
@Martin James: 我不确定你的意思。如果你的意思是fclose或类似的东西:因为你们中有这么多人问我这个,我尝试了一下,但没有任何区别。
@hmjd: 'letter'是一个通过fgetc(A)获得值的整数。
@squeamish ossifrage: 我将一个个字符打印到文件中,并获得每个字符的“1”,似乎没问题。
编辑2:现在,这很好,我面临某种Heisenbug。我要检查返回值,因为你们中有这么多人告诉我这样做。所以我初始化了一个新的int retval=0;并写道:
letter=fgtec(A);
while (letter!=EOF)
{
retval=fprintf(B, "%c", letter);
printf("%d", retval); /*Want to see the return values on stdout*/
if (retval<0) /*If writing fails, the program stops*/
{
printf("Error while writing in file");
return (-1);
}
letter=fgetc(A);
}
这个可以正常工作!新文件被填充,一切都很好。除了一个问题,我完全不知道为什么旧的文件:
letter=fgtec(A);
while (letter!=EOF)
{
fprintf(B, "%c", letter);
letter=fgetc(A);
}
曾经成功过万次的方法,现在却毫无作用。
有没有其他的想法?不过,非常感谢你们迄今为止提供的建议!
fopen
的返回值吗? - Kninnugfprintf()
得到了什么返回值? - r3mainer