函数连续调用问题

intg(void);main(){intx,y;g();g();getch();}intg(){charb;scanf("%c",&b);printf("%c",b);... int g(void);
main()
{
int x,y;
g();
g();
getch();
}
int g()
{
char b;
scanf("%c",&b);
printf("%c",b);
return 0;
}
在运行过程中,第二个g()函数被忽略,直接退出了。这是为什么呢?
越是看起来简单的问题,好像越是复杂。我预感这个问题可能跟函数的底层问题有关系。事实上,我主要想知道这是为什么?
展开
 我来答
yangzhe2291
2010-06-16 · TA获得超过691个赞
知道小有建树答主
回答量:351
采纳率:0%
帮助的人:469万
展开全部
不要乱想了,和什么函数的底层问题没啥关系
告诉你为什么吧,scanf函数对于输入缓冲区的处理不够完美
scanf("%c",&b);时,是靠输入回车来进行结束的那么输入的字符赋值给了b
而回车还留在了缓冲区
调用第二个函数的时候,scanf就自动接收了缓冲区里面的回车符,也就视为输入结束了,结果得到了一个空字符

事实上,是2次函数都调用了,并不是你说的被忽略,不信你加个全局变量计数器就知道了

处理方法如luzhiwei512所说,但不是所有编译器都支持fflush
一般可以用
char ch;
while((ch=getchar())!='\n'&&ch!=EOF);
来清除缓冲区
273383283
2010-06-16 · TA获得超过198个赞
知道答主
回答量:86
采纳率:0%
帮助的人:50.4万
展开全部
return 0这句有问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luzhiwei512
2010-06-16 · TA获得超过386个赞
知道小有建树答主
回答量:407
采纳率:0%
帮助的人:354万
展开全部
printf("%c",b);下加

fflush(stdin);执行流错误这样就安心了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
L_o_o_n_i_e
2010-06-16 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5122万
展开全部
scanf("%c",&b); -- 当你拍入一个字符,加一个 Enter 键 时, scanf 才开始 读入 一个字符,Enter 键 却留在了缓冲区里。
第二次调g(),scanf("%c",&b); 从 缓冲区里 读取 上次残余 的 Enter 键,printf("%c",b); 打印不可见 的Enter,所以你以为 第二个g()函数被忽略。

你可以添fflush(stdin);:
int g()
{char b;scanf("%c",&b); printf("%c",b); fflush(stdin);return 0;}
清除 残余 的 字符。

------------------------------------------------------
也可以改用 b=getch(); 不用 scanf("%c",&b);
getch(); 能立即读 一个 字符,(只读一个字符!不要打Enter键!)

int g()
{
char b;
b = getch();
printf("--%c",b);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
可可可可86
2010-06-16 · TA获得超过197个赞
知道答主
回答量:150
采纳率:0%
帮助的人:161万
展开全部
楼主很犀利!
你自己单步调试看看。确实调用了两次。并且如果你在第一次就直接输入两个字母,就能输出两个字母。估计是库函数不完美
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wgl_lwm
2010-06-16
知道答主
回答量:77
采纳率:0%
帮助的人:34.4万
展开全部
你在调用第一次时输入了一个字符和回车,字符被接收了,回车在调用第二次时才被接收,所以就不用你输入了,解决办法#include <stdlib.h>在第一次输入下面加入fflush(stdin),我也是初学者,可以相互讨论,我的qq383976404
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式