C 为什么fprintf()不';即使该文件存在并且它';开关是否正确?

C 为什么fprintf()不';即使该文件存在并且它';开关是否正确?,c,printf,C,Printf,这是我关于文件的第一个练习,我必须编写一些代码,这样,如果我在控制台中编写一个单词,它就会被打印到文件中。如果我输入单词“fine”(意大利语表示end),程序将结束。看起来文件的打开和关闭都是正确的,程序读取插入的字符,但是文件仍然是空白的 我尝试以各种模式打开文件,我尝试打印读取了多少字符,我甚至尝试删除文件(但即使添加了exit(1),它实际上也不会退出) \define\u CRT\u SECURE\u NO\u反对 #包括 #包括 #包括 #包括 int main(){ 文件*fp;

这是我关于文件的第一个练习,我必须编写一些代码,这样,如果我在控制台中编写一个单词,它就会被打印到文件中。如果我输入单词“fine”(意大利语表示end),程序将结束。看起来文件的打开和关闭都是正确的,程序读取插入的字符,但是文件仍然是空白的

我尝试以各种模式打开文件,我尝试打印读取了多少字符,我甚至尝试删除文件(但即使添加了exit(1),它实际上也不会退出)

\define\u CRT\u SECURE\u NO\u反对
#包括
#包括
#包括
#包括
int main(){
文件*fp;
chars[64];
如果((fp=fopen(“prova.txt”,“r+”)==NULL){
printf(“错误。\n”);
出口(1);
}
做{
scanf(“%s”,s);
if(strcmp(“精细”,s)!=0){
fprintf(fp,“%s”,s);
}
}而(strcmp(“罚款”,s)!=0);
fclose(fp);
返回0;
}
它应该将所有单词保存在一个文本文件中,但仍然为空。

您必须使用“w”打开一个具有写入权限的新文件

改变

if((fp=fopen(“prova.txt”,“r+”)==NULL){

if((fp=fopen(“prova.txt”,“w+”)==NULL){


编辑:可能我自己没有解释,如果文件不存在,r+将失败,更改它对我有效。您的程序看起来正常。很可能是您检查了错误的文件


一个有根据的猜测:您正在使用某个IDE。如果是这种情况,则会创建该文件,但会在其他地方创建。当然,请打印工作目录(
man-getcwd
)在程序开头的某个地方,并在那里查找文件。

@KBir nor writing only。读取是从STDIN开始的。关闭文件还应刷新缓冲区。只有在程序运行时检查文件时,才需要手动执行此操作。在上测试代码,并且您的代码已将字正确写入文件。它应该rk.除了您应该检查
scanf
返回状态外,它看起来还可以。该程序对我来说运行良好。正如前面提到的,prova.txt包含程序成功终止后的单词可能性:(a)您正在写入的文件的副本不是您正在检查的副本。使用
\define\CRT\u SECURE\u NO\u DEPRECATE
建议使用Visual Studio,因此请检查
Debug
和/或
Release
目录,查看更新的文件是否在那里(或者更好的是,在
fopen
调用中包含完整路径)。(b)您查看文件时使用的工具不喜欢没有CRLF…请尝试(至少暂时尝试)使用
fprintf(fp,%s\n,s);
。否。
r+
打开进行读写操作。请参阅
“r+”读取扩展打开文件进行读/写操作
,这是正确的,但OP声明打开()这样我们就可以假设它存在如果我可以发布一个截图,我会…文件存在,因为我删除了它,我创建了另一个同名文件,但它不存在。如果是这样,meI不会认为OP会看到他们的“错误”输出。