程序输入问题

Samuel52 2018-10-10 10:23:46
在看谭浩强的C语言的时候,下面的这段代码有点疑问,来这问问各位大佬,希望能够帮我解惑。

关于下面那段标红的代码,如果没有这行代码,输入第二个数据是莫名其妙的回车到下一行了,并且保存文件是带回车的,输出结果如下:


但是加上这行代码的话,输出结果和文件内容就比较正常了:


#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char ch, filename[10];
printf("请输入所用的文件名:");
scanf("%s", filename);
if((fp=fopen(filename, "w"))== NULL){
printf("无法打开此文件\n");
exit (0);
}
ch=getchar(); //如果没这行代码,之前输入文件名时的回车,空格都会保存进文件
printf("请输入一个准备存储到磁盘的字符串(以#结束):");
ch=getchar();
while(ch!='#'){
fputc(ch, fp);
putchar(ch);
ch=getchar();
}
fclose(fp);
putchar(10);
return 0;
}
...全文
216 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
King_of_Kindom 2018-10-12
  • 打赏
  • 举报
回复
应该是缓冲区残留,没有取走,或者没有清空,下一次scanf就直接取走了。
自信男孩 2018-10-12
  • 打赏
  • 举报
回复
引用 4 楼 cfjtaishan 的回复:
程序没问题,应该是缓冲区理解的问题。scanf输入之后,其实有一个换行符“残留”在输入缓冲区里,因此第二个while正好接收到了这个'\n'。

程序没问题,应该是缓冲区理解的问题。scanf输入之后,其实有一个换行符“残留”在输入缓冲区里,因此第二个个体插入()正好接收到了这个'\n'。并将其“吸收”了。
自信男孩 2018-10-12
  • 打赏
  • 举报
回复
程序没问题,应该是缓冲区理解的问题。scanf输入之后,其实有一个换行符“残留”在输入缓冲区里,因此第二个while正好接收到了这个'\n'。
幻夢之葉 2018-10-11
  • 打赏
  • 举报
回复
ch=getchar();
获取流中的下一个字符,在你这个操作中也就是换行/回车符
红色标注的代码作用主要就是丢弃掉这个字符
Samuel52 2018-10-11
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:
ch=getchar();
获取流中的下一个字符,在你这个操作中也就是换行/回车符
红色标注的代码作用主要就是丢弃掉这个字符

那请问没有这行代码的话,为什么第二个printf函数就会自动换行呢?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧