| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4896 人关注过本帖
标题:[求助]用Scanf输入完字符串之后,为什么要处理一下后面的回车符?
只看楼主 加入收藏
Quill
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-1-4
收藏
 问题点数:0 回复次数:3 
[求助]用Scanf输入完字符串之后,为什么要处理一下后面的回车符?
  在谭浩强的《C程序设计第三版》里,在对fputc和fgetc两个函数进行应用举例的时候,用到下面一个例子:
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp;
char ch,filename[10];
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("Can't open file\n");
exit(0);
}
ch=getchar();/*此语句用来接收执行Scanf语句时最后输入的回车符*/
ch=getchar();
while(ch!='#')
{
fputc(ch,fp);
putchar(ch);
ch=getchar();
}
putchar(10);
fclose(fp);
}
其他的注释我都先省略掉了,我不明白为什么还要用这样一条语句接收这个回车。小弟才疏学浅,一直认为程序执行到某个地方等待用户的响应,回车符是让机子接收用户响应的一个标志,在这里怎么又成了一个字符了?如果它是一个字符,为什么在其他地方用scanf的时候没有多出这么一句?为什么像getchar这样的函数不需要再这样专门接收一下回车符?
  等待高手的解释,在这里先谢过了!
搜索更多相关主题的帖子: Scanf 字符 回车 输入 
2007-01-05 00:42
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
因为回车(\n)也是一个字符,而scanf遇到'\n'时即停止对字符串的输入
所以在键盘缓冲区中还有一个回车字符没有被使用,所以下一次读入时还要将缓冲区的'\n'读取,导致错误.

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-01-05 20:18
Quill
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-1-4
收藏
得分:0 

我还有一点不明白,是只有scanf函数这样还是getchar()、gets()都会这样?举个例子,假如我有一条语句写成

ch=getchar();

那么输入完字符之后还要敲回车,这个时候缓冲区里还有回车符么?为什么?

2007-01-06 16:16
何必天才
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-12-15
收藏
得分:0 
用汇编的看法
输入时其实不用回车
字符已经被输入到电脑缓冲区里了
程序按照先后从缓冲区读取数据
低级语言里有体现

我只会C和PC
2007-01-06 17:10
快速回复:[求助]用Scanf输入完字符串之后,为什么要处理一下后面的回车符?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016970 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved