为了账号安全,请及时绑定邮箱和手机立即绑定

这个该咋滴办啊?谁能帮忙解释下

这个该咋滴办啊?谁能帮忙解释下

C
撒科打诨 2023-03-15 16:12:44
#include <stdio.h>void main(){FILE * fp3;char buffer[64];if((fp3=fopen("file4.txt","a"))==NULL){printf("can't open file \n");exit(1);}while(strlen(fgets(buffer,64,stdin))>0){fputs(buffer,fp3);fputs("\n",fp3);}fclose(fp3);}这是教材上的一个程序,目的是“从键盘输入若干行字符,把他们添加到磁盘文件file4.txt中”,但我执行了好多次,不但没有添加进去,反而程序无法正常结束,不管怎么按回车都没能退出程序。而教材解释说 while(strlen(fgets(buffer,64,stdin))>0)的功能是“从键盘读入一行字符,并测试读入的字符串长度是否为0”,最后解释“程序通过检测输入的字符串长度是否为0控制是否结束循环,因而输入完所有的字符串之后,在输入新一行开始就输入一个回车键,便可以终止程序”,貌似很有道理,可执行起来怎么就没完没了了呢?把程序改成下面的形式倒是可以结束了,可是输出来却不如人意。在vc中产生了一连串火星文,在TC中只能输出第一个字符,然后换行。#include<stdio.h>#include<string.h>int main(){FILE * fp;char s[64];char s2[64];int i;int j=0;if((fp=fopen("f:\\cfile2.txt","w"))==NULL){printf("cfile.txt canot be open ! \n");getchar();return 0;}printf("请输入一组字符的字符串并回车,按esc键退出:\n");while(strlen(fgets(s,64,stdin))>0){for(i=0;i<64;i++){if(s[i]=='\0'){  while(j<i-1)s2[j++]=s[j++];fputs(s2,fp);fputs("\n",fp);if(fclose(fp)!=0){printf("f:\\cfile.txt cannot be closed !\n");}elseprintf("cfile.txt was now closed !\n");getchar();return 0;}}fputs(s,fp);fputs("\n",fp);}if(fclose(fp)!=0){printf("f:\\cfile.txt cannot be closed !\n");}elseprintf("cfile.txt was now closed !\n");getchar();return 0;}
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

while(strlen(fgets(buffer,64,stdin))>2)
{
fputs(buffer,fp3);
}
fclose(fp3);
}
别忘了 回车,换行

至于你的那程序,多的没认真看,不过j=0放循环体内吧

查看完整回答
反对 回复 2023-03-18
?
白板的微信

TA贡献1883条经验 获得超3个赞

string[strlen(string)-1]='\0'
将那个回车的字符所在的位置改成串结束符就ok了

查看完整回答
反对 回复 2023-03-18
?
ITMISS

TA贡献1871条经验 获得超8个赞

#include <stdio.h>
void main()
{
FILE * fp3;
char buffer[64];
if((fp3=fopen("file4.txt","a"))==NULL)
{
printf("can't open file \n");
exit(1);
}
while(strlen(fgets(buffer,64,stdin))>0)
{
fputs(buffer,fp3);
fputs("\n",fp3);
}
fclose(fp3);
}
你的函数调用fgets并没有错啊
把while改成if就可以了,只需要将buffer的值写到文件中一次就可以了,没有必要用循环,如果用循环的话,条件一直成立,一直向其中写入数据,循环无法结束...

查看完整回答
反对 回复 2023-03-18
  • 3 回答
  • 0 关注
  • 72 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信