函数连续调用问题
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()函数被忽略,直接退出了。这是为什么呢?
越是看起来简单的问题,好像越是复杂。我预感这个问题可能跟函数的底层问题有关系。事实上,我主要想知道这是为什么? 展开
main()
{
int x,y;
g();
g();
getch();
}
int g()
{
char b;
scanf("%c",&b);
printf("%c",b);
return 0;
}
在运行过程中,第二个g()函数被忽略,直接退出了。这是为什么呢?
越是看起来简单的问题,好像越是复杂。我预感这个问题可能跟函数的底层问题有关系。事实上,我主要想知道这是为什么? 展开
展开全部
不要乱想了,和什么函数的底层问题没啥关系
告诉你为什么吧,scanf函数对于输入缓冲区的处理不够完美
scanf("%c",&b);时,是靠输入回车来进行结束的那么输入的字符赋值给了b
而回车还留在了缓冲区
调用第二个函数的时候,scanf就自动接收了缓冲区里面的回车符,也就视为输入结束了,结果得到了一个空字符
事实上,是2次函数都调用了,并不是你说的被忽略,不信你加个全局变量计数器就知道了
处理方法如luzhiwei512所说,但不是所有编译器都支持fflush
一般可以用
char ch;
while((ch=getchar())!='\n'&&ch!=EOF);
来清除缓冲区
告诉你为什么吧,scanf函数对于输入缓冲区的处理不够完美
scanf("%c",&b);时,是靠输入回车来进行结束的那么输入的字符赋值给了b
而回车还留在了缓冲区
调用第二个函数的时候,scanf就自动接收了缓冲区里面的回车符,也就视为输入结束了,结果得到了一个空字符
事实上,是2次函数都调用了,并不是你说的被忽略,不信你加个全局变量计数器就知道了
处理方法如luzhiwei512所说,但不是所有编译器都支持fflush
一般可以用
char ch;
while((ch=getchar())!='\n'&&ch!=EOF);
来清除缓冲区
展开全部
return 0这句有问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf("%c",b);下加
fflush(stdin);执行流错误这样就安心了
fflush(stdin);执行流错误这样就安心了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
第二次调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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主很犀利!
你自己单步调试看看。确实调用了两次。并且如果你在第一次就直接输入两个字母,就能输出两个字母。估计是库函数不完美
你自己单步调试看看。确实调用了两次。并且如果你在第一次就直接输入两个字母,就能输出两个字母。估计是库函数不完美
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你在调用第一次时输入了一个字符和回车,字符被接收了,回车在调用第二次时才被接收,所以就不用你输入了,解决办法#include <stdlib.h>在第一次输入下面加入fflush(stdin),我也是初学者,可以相互讨论,我的qq383976404
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询