您尚未登录。

#1 2016-05-02 16:28:02

Mesopotamian
会员
注册时间: 2016-04-19
帖子: 11

[已解决]C语言中getchar函数为什么这么奇怪?

人机对话方式从键盘输入a、b、c、d四个整数,计算(a+b-c)*d并显示结果。

然后我用scanf可以,用getchar就见了鬼了(我是个菜鸟).
程序如下:

# include<stdio.h>

int main()
{
        int a, b, c, d;

        printf("Enter a:\n");
        a = getchar();
        printf("Enter b:\n");
        b = getchar();
        printf("Enter c:\n");
        c = getchar();
        printf("Enter d:\n");
        d = getchar();

        printf("(a+b-c)*d = %d\n", (a + b - c) * d);
}

运行结果是这个样子的

./ex1.8
Enter a:
1
Enter b:
Enter c:
2
Enter d:
(a+b-c)*d = 90

如果采用下面的scanf就一切正常:

# include<stdio.h>

int main()
{
        int a, b, c, d;

        printf("Enter a:b:c:d\n");
        scanf("%d:%d:%d:%d", &a, &b, &c, &d);
        printf("(a+b-c)*d=%d\n", (a +b -c) * d);
}

最近编辑记录 Mesopotamian (2016-05-02 17:18:53)

离线

#2 2016-05-02 17:18:27

Mesopotamian
会员
注册时间: 2016-04-19
帖子: 11

Re: [已解决]C语言中getchar函数为什么这么奇怪?

解决了。
如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。

离线

#3 2016-07-21 21:30:39

wojiushiwolh
会员
注册时间: 2016-07-21
帖子: 1

Re: [已解决]C语言中getchar函数为什么这么奇怪?

你的理解稍有偏差,getchar接受所有字符,包括enter键,所以你的enter键也被放在缓冲区了

离线

#4 2016-07-21 22:06:19

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: [已解决]C语言中getchar函数为什么这么奇怪?

那个是终端的行缓冲区啦。

离线

页脚