Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用FGET从用户处读取多行输入,并使用C中的FPUT将其写入文件?_C_File_Fgets_Fputs - Fatal编程技术网

如何使用FGET从用户处读取多行输入,并使用C中的FPUT将其写入文件?

如何使用FGET从用户处读取多行输入,并使用C中的FPUT将其写入文件?,c,file,fgets,fputs,C,File,Fgets,Fputs,我想从用户处读取输入(多行),并使用fputs()将其写入文件 这是我的密码 #include<stdio.h> #include<stdlib.h> int main() { FILE *fp; char s[25]; fp=fopen("myname","w"); if(fp==NULL) { perror("Error opening file\n"); exit(1); } while(fgets(s,25,stdin)!=NULL)

我想从用户处读取输入(多行),并使用fputs()将其写入文件

这是我的密码

#include<stdio.h>
#include<stdlib.h>
int main()
{
 FILE *fp;
 char s[25];
 fp=fopen("myname","w");
 if(fp==NULL)
 {
  perror("Error opening file\n");
  exit(1);
 }

 while(fgets(s,25,stdin)!=NULL)
  fputs(s,fp);
 fclose(fp);
 return 0;
}
#包括
#包括
int main()
{
文件*fp;
chars[25];
fp=fopen(“我的名字”,“w”);
如果(fp==NULL)
{
perror(“打开文件时出错”);
出口(1);
}
while(fgets(s,25,stdin)!=NULL)
fput(s,fp);
fclose(fp);
返回0;
}
从用户那里获得输入后,我使用Ctrl+C关闭程序的输入提示符(我使用的是linux)。然后,如果我打开文件,它不包含任何内容。我如何解决这个问题

fputs()和fgets()的用法有什么问题吗

由于缓冲可能会终止进程,因此这些行不会到达文件(除非有很多行并且它们填满了缓冲区)

您应该使用
C-D
(Unix)或
C-Z
(Dos)结束输出,而不是
C-C


作为旁注:
fgets
不会删除换行符,而
fputs
会添加自己的换行符。但我想您会注意到:-)

您的代码将中断25字节的行。您可以使用
fgets(s,sizeof(s)-1,stdin)
并且您最好使用
memeset(s,0,sizeof(s))之前。对于这一点,
getline
是一个更好的函数(因为它动态地分配行)。@BasileStarynkevitch,
fgets
的手册页说
fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。。。。。“\0”存储在缓冲区中最后一个字符之后
。因此,在
fgets()中调用25个是安全的。我用超过25个字符的行测试了这段代码。不工作的原因是缓冲。添加
fflush(fp)
解决了这个问题。很抱歉这么晚才发表评论。谢谢老兄,你说得对。现在,我得到了正确的输出:)