如何使用FGET从用户处读取多行输入,并使用C中的FPUT将其写入文件?
我想从用户处读取输入(多行),并使用fputs()将其写入文件 这是我的密码如何使用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)
#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)
解决了这个问题。很抱歉这么晚才发表评论。谢谢老兄,你说得对。现在,我得到了正确的输出:)