标题:有关getchar()函数的问题
只看楼主
ryxhh
Rank: 1
等 级:新手上路
威 望:1
帖 子:63
专家分:0
注 册:2005-12-18
 问题点数:0 回复次数:12 
有关getchar()函数的问题

各位高手,大家好,这是一个重复调用函数的题目
有一个问题弄不太清楚,所以请教,就是有关getchar()函数的问题,
大家注意了, 这个程序中用到了两个gechchar()函数,如果只用一个的话就不会重复调用,
为什么啊??

#include <stdio.h>
#include<stdlib.h>
void print()
{
printf("\nthis is a programmer\n\n");
}

void main()
{
int flag=1;
char ch;
while(flag)
{
printf("enter 'f' to start\n");
ch=getchar();
getchar();
if(ch=='F' || ch=='f')
print();
else
flag=0;
}

}

搜索更多相关主题的帖子: getchar 函数 
2006-01-11 16:35
大法师之杖
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-1-11
得分:0 
不知道你想说什么,看程序的话第二个getchar似乎没什么意义.
2006-01-11 16:42
ryxhh
Rank: 1
等 级:新手上路
威 望:1
帖 子:63
专家分:0
注 册:2005-12-18
得分:0 
因为不用第二个getchar(),函数调用一次就会结束.

2006-01-11 17:10
大法师之杖
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-1-11
得分:0 
我想了想应该是这个原因,因为你输入了f后ch的值就是f了,这时候语句执行到后面的getchar(),这个时候你就会按回车,这点很重要,因为回车的值已经在后面那个getchar()里面了,如果去掉后面那个的话,在你输入f后,会自动循环回前面那个getchar(),这时候回车的话就会把回车的值重新赋予了ch,那么ch就不等于f了,flag就会等于0,这时候就跳出了循环.

[此贴子已经被作者于2006-1-11 18:44:01编辑过]


2006-01-11 18:42
sn_1021
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2005-12-28
得分:0 
回复:(大法师之杖)我想了想应该是这个原因,因为你输...
将第二句替换为fflush(stdin)

2006-01-11 21:58
落花吹雪
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2005-11-20
得分:0 
你试着编个最简单的程序,如果后边不加GETCHAR()会有什么效果?那就是显示不了
再想想为什么一般你的这种从这个函数获得字符来判断回写成 比如IF((C=GETCHAR()!=0)
2006-01-11 22:52
ryxhh
Rank: 1
等 级:新手上路
威 望:1
帖 子:63
专家分:0
注 册:2005-12-18
得分:0 
感谢各位了,尤其是 大法师之杖 的解释让我茅塞顿开,谢了

2006-01-11 23:39
martinmcx
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2005-12-26
得分:0 
以下是引用大法师之杖在2006-1-11 18:42:00的发言:
我想了想应该是这个原因,因为你输入了f后ch的值就是f了,这时候语句执行到后面的getchar(),这个时候你就会按回车,这点很重要,因为回车的值已经在后面那个getchar()里面了,如果去掉后面那个的话,在你输入f后,会自动循环回前面那个getchar(),这时候回车的话就会把回车的值重新赋予了ch,那么ch就不等于f了,flag就会等于0,这时候就跳出了循环.

有道理!

[此贴子已经被作者于2006-1-12 14:07:12编辑过]

2006-01-12 14:04
吸血鬼王
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2005-12-17
得分:0 
不同意思大法师的说法,其实你就算不加第二个getchar()也能调用一次print()函数,但此时有一个回车在缓冲区中,所以下一次循环时 ch=getchar();就读入了这个回车值至使flag=0;退出循环。你的第二个getchar()的作用就是除掉这个回车,当然也可以用5楼所说的fflush(stdin)来处理
2006-01-13 08:42
ryxhh
Rank: 1
等 级:新手上路
威 望:1
帖 子:63
专家分:0
注 册:2005-12-18
得分:0 

那么第二个getchar()是怎么去掉回车符的呢


2006-01-13 09:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-42453-1-1.html




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

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