首页 > 用户发贴区 > 编程问题提问区 > getchar函数只能用一次吗?
2008
07-27

getchar函数只能用一次吗?

getchar函数只能用一次吗?
#include<stdio.h>
void main()
{int a,b;
a=5;b=4;
if(getchar()==’+')
 printf(“%d+%d=%d”,a,b,a+b);
else if(getchar()==’-')
 printf(“%d-%d=%d”,a,b,a-b);
else
 printf(“input error”);
}
输入’+'号时能得到计算结果,但输入-号和其它字符时都显示错误,请教下这是为什么???


getchar函数只能用一次吗?》有 15 条评论

  1. whos 说:

    加个循环就行了,如下:

    #include<stdio.h>
    void main()
    {int a,b;
    a=5;b=4;

    while(1){
    if(getchar()==’+')
     printf(“%d+%d=%d”,a,b,a+b);
    else if(getchar()==’-')
     printf(“%d-%d=%d”,a,b,a-b);
    else
     printf(“input error”);
     }
    }

  2. 253610623 说:

    这个对啦 ==+ 单引号 字符型

  3. whos 说:

    不好意思,我没看到最后的问题。

  4. whos 说:

    给个正确的

    #include<stdio.h>
    void main()
    {int a,b;
    char ch;
    a=5;b=4;
    ch=getchar();
    if(ch==’+')
     printf(“%d+%d=%d”,a,b,a+b);
    else if(ch==’-')
     printf(“%d-%d=%d”,a,b,a-b);
    else
     printf(“input error”);
    }

  5. whos 说:

    解答下:

    if(getchar()==’+')  //此时要求第一次输入并判断
     printf(“%d+%d=%d”,a,b,a+b);
    else if(getchar()==’-')  //此时要求第二次输入并判断
     printf(“%d-%d=%d”,a,b,a-b);
    else
     printf(“input error”);

    输入:–

    输出:5-4=1

    输入:-回车

    输出:input error

    输入:回车 回车

    输出:input error

    getchar()出现了两次,要求输入两次

  6. iloveyouf1987 说:

    明白了,谢谢各位~~~~辛苦了~~

  7. zhuyun94822 说:

    whos

    有几个问题想请教下

    #include<stdio.h>
    void main()
    {int a,b;
    a=5;b=4;
    if(getchar()==’+')
     printf(“%d+%d=%d”,a,b,a+b);
    else if(getchar()==’-')
     printf(“%d-%d=%d”,a,b,a-b);
    else
     printf(“input error”);
    }

    1。这段程序中‘+’ ‘-’为字符型,没有给它开辟空间,往那存啊?但是为什么输入’+'号时能得到计算结果,输入-号和其它字符时都显示错误,他用的是选择结构啊?

    2。你给的第1个程序中 加了个循环 while(1) 这个条件 1(代表什么)???,为什么运行后+只能运算一次,以后就出错,-为什么一直可以计算?

  8. whos 说:

    回复:

    1.在getchar()读取字符的时候,是从stdin的“缓存”中读的。系统在内存确定的位置定义了一个可以存15个键的扩充ASCII码的32个单元的键盘缓冲区。从键盘输入时,键值首先送到键盘缓冲区里,然后系统再从缓冲区里读取键值。

    在运行程序的时候,执行到 if(getchar()==’+') 时要求输入一次,输入的是 +回车,+键和回车的键值就被送到键盘缓冲区里,系统从缓冲区提取第一个键值,即是 +,符合判断条件,执行printf(“%d+%d=%d”,a,b,a+b),程序结束。

    执行到 if(getchar()==’+') 时要求输入一次,输入的是 -回车,-键和回车的键值被送到键盘缓冲区,系统从缓冲区提取第一个键值,即是 -,不符合条件,转去执行 else if(getchar()==’-'),此时键盘缓冲区内还有键值——回车键的键值,于是系统提取回车键的键值,条件getchar()==’-'不成立,所以程序转到 printf(“input error”)。

    2.while(1)中的1代表的是条件永远为真,就是无限循环下去的意思。
    至于“为什么运行后+只能运算一次,以后就出错,-为什么一直可以计算”我当时没有测试,因为没看到帖子最后一行的问题,汗一个。估计也是和键盘缓冲区有关。

    还有什么问题吗?

  9. whos 说:

    说明一下,第六楼的我的解答有些错误,是关于getchar()的解释。

  10. 爱好c的学者 说:

    whos真是太强了   楼主的只要输入两个减号  就能得到  结果了

  11. whos 说:

    强?晕。

    呵呵,别捧杀我啦。我不知道的东西还有好多。

  12. 爱好c的学者 说:

    #include<stdio.h>
    void main()
    {int a,b;
    char ch;
    a=5;b=4;

    ch=getchar();
    switch(ch)
    {
    case (‘+’):
      printf(“%d+%d=%d”,a,b,a+b);break;
    case (‘-’):
     printf(“%d-%d=%d”,a,b,a-b);break;
    default:
     printf(“input error”);

    }
    }

  13. zhuyun94822 说:

    Dear :whos

    thx

  14. whos 说:

    楼上的有什么问题吗?

  15. zhuyun94822 说:

    很感谢你的解答

    看来我还是要多多实践

留下一个回复