独一无② 发表于 2015-11-12 14:14:36

C语言 加减乘除 字符 问题

第一行 表示 输入测试数据 有几组
下面 输入 测试数据,有小数 保留2位
比如 输入
2
+ 5 6
/ 1 5
输出
11
0.20

# include <stdio.h>
int main()
{
        char a;
        int b,c,d,i;
        float j;
        scanf("%d",&b);
        for(i=1;i<=b;i++)
        {
                scanf("%c %d %d",&a,&c,&d);
                if(a == '+')
             printf("%d\n",c+d);
      if(a == '-')
         printf("%d\n",c-d);
      if(a == '*')
         printf("%d\n",c*d);
      if(a == '/')
      {
              if(c % d != 0)
              {
                        j=(float)c/d;
                        printf("%.2f",j);
                }
                else
                printf("%d",c/d);
      }
                  
               
        }
        return 0;
}


我发现我的代码 根本不能输出,调试发现 输入a 的值并不是 + - * /,所以都不符合条件,但是我不明白为什么 我输入是+,但是事实上不是 +。
求 大神 帮帮忙,我不知道如何改

ryxcaixia 发表于 2015-11-12 14:14:37

# include <stdio.h>
int main()
{
        char a;
        int b,c,d,i;
        float j;
        scanf("%d",&b);
        fflush(stdin);
        for(i=1;i<=b;i++)
        {
                scanf("%c %d %d",&a,&c,&d);
                if(a == '+')
                        printf("%d\n",c+d);
                if(a == '-')
                        printf("%d\n",c-d);
                if(a == '*')
                        printf("%d\n",c*d);
                if(a == '/')
                {
                        if(c % d != 0)
                        {
                                j=(float)c/d;
                                printf("%.2f",j);
                        }
                        else
                                printf("%d",c/d);
                }


        }
        return 0;
}

独一无② 发表于 2015-11-12 14:25:31

ryxcaixia 发表于 2015-11-12 14:23
# include
int main()
{


fflush(stdin);

这个是 什么 意思的,没有学过,看不懂

ryxcaixia 发表于 2015-11-12 14:27:05

你在cmd界面输入是
2(回车)
d把2读走了, 换行字符当然还停留在缓冲区
所以a就把\n(ascii字符是10)读走了

所以在scanf输入字符的时候
适当的清理下缓冲区

ryxcaixia 发表于 2015-11-12 14:28:06

独一无② 发表于 2015-11-12 14:25
fflush(stdin);

这个是 什么 意思的,没有学过,看不懂

按照字面理解
清理标准输入的缓冲区

ryxcaixia 发表于 2015-11-12 14:29:53

把代码贴进去
看看是不是你想要的效果

独一无② 发表于 2015-11-12 14:31:21

ryxcaixia 发表于 2015-11-12 14:27
你在cmd界面输入是
2(回车)
d把2读走了, 换行字符当然还停留在缓冲区


哦哦,原来是这样 ,还有一个疑问,那时候我好像从书上看到,scanf 不能接受 换行 和 空格的吗? getchar 可以的,

独一无② 发表于 2015-11-12 14:34:06

ryxcaixia 发表于 2015-11-12 14:29
把代码贴进去
看看是不是你想要的效果

恩恩,是的,正确的

ryxcaixia 发表于 2015-11-12 14:38:54



scanf遇到换行或者空格或者回车就停止
如果想接收整行输入 可以用gets

独一无② 发表于 2015-11-12 14:41:37

ryxcaixia 发表于 2015-11-12 14:38
scanf遇到换行或者空格或者回车就停止
如果想接收整行输入 可以用gets

哦哦,懂了,谢谢了
页: [1]
查看完整版本: C语言 加减乘除 字符 问题