水煮凉凉 发表于 2018-8-5 17:47:40

请大家帮帮忙,这个为什么错了呀

#include <stdio.h>
int main()
{
        int a,b;
        float result;
        char i;
        printf("请输入式子:");
        scanf("%a %c %b",&a,&i,&b) ;
        switch(i)
        {
                case '-': b=-b;
                case '+': result=a+b;break;
                case '*': result=a*b;break;
                case '/':
                        if(b==0)
                        {
                             printf("很遗憾,除数不能为零!\n");break;
                        }
                        else
                        {
                             result=(float)a/b;break;
                        }
        }
        printf("结果是%.2f\n",result) ;
        return 0;
}

无符号整形 发表于 2018-8-5 17:54:19

#include <stdio.h>
int main()
{
      int a,b;
      float result;
      char i;
      printf("请输入式子:");
      scanf("%a %c %b",&a,&i,&b) ;
      switch(i)
      {
                case '-': b=-b;break;
                case '+': result=a+b;break;
                case '*': result=a*b;break;
                case '/':
                        if(b==0)
                        {
                               printf("很遗憾,除数不能为零!\n");break;
                        }
                        else
                        {
                               result=(float)a/b;break;
                        }
      }
      printf("结果是%.2f\n",result) ;
      return 0;
}
另外你这个逻辑有问题啊……a-b输出的是不确定的啊。(没有设置result)

claws0n 发表于 2018-8-5 17:57:33

本帖最后由 claws0n 于 2018-8-5 17:59 编辑

scanf("%d %c %d",&a,&i,&b) ;这个才是关键,使得代码错误。后面的逻辑确实有问题~

claws0n 发表于 2018-8-5 18:08:20

无符号整形 发表于 2018-8-5 17:54
另外你这个逻辑有问题啊……a-b输出的是不确定的啊。(没有设置result)

那里不可以放 break
他是让 b 为负,再接 result = a + b; break;

水煮凉凉:
一般上避免这样的语句~

不再想起y 发表于 2018-8-5 18:19:06

#include <stdio.h>
int main()
{
      int a,b;
      float result;
      char i;
      printf("请输入式子:");
      scanf("%d%c%d",&a,&i,&b);//%d表示整形空格去掉好看点
      switch(i)
      {
                case '-': result=a-b;break;
                case '+': result=a+b;break;
                case '*': result=a*b;break;
                case '/':
                        if(b==0)
                        {
                               printf("很遗憾,除数不能为零!\n");break;
                        }
                        else
                        {
                               result=(float)a/b;break;
                        }
      }
      printf("结果是%.2f\n",result) ;
      return 0;
}

claws0n 发表于 2018-8-5 18:23:52

不再想起y 发表于 2018-8-5 18:19
#include
int main()
{


放空格不是为了好看不好看,而是吸收空白~
如果没有空格,而用户输入的是有空格的话,5 + 6 这样的输入是无效的

不再想起y 发表于 2018-8-5 19:28:12

本帖最后由 不再想起y 于 2018-8-5 19:40 编辑

claws0n 发表于 2018-8-5 18:23
放空格不是为了好看不好看,而是吸收空白~
如果没有空格,而用户输入的是有空格的话,5 + 6 这样的输入 ...

你可以自己试试,直接输入23+22就可以了,中间不需要敲空格,两个都可以没什么问题,个人习惯直接敲进去,不用空格,如果是(“%d%d%d”)那肯定不行要用(“%d %d %d”)。

claws0n 发表于 2018-8-5 19:33:39

不再想起y 发表于 2018-8-5 19:28
你可以自己试试,直接输入23+22就可以了,中间不需要敲空格

我知道,那你怎样确定说用户不会空格呢?
你现在输入的是1+2,那你输入1 + 2看看

不再想起y 发表于 2018-8-5 19:41:41

claws0n 发表于 2018-8-5 19:33
我知道,那你怎样确定说用户不会空格呢?
你现在输入的是1+2,那你输入1 + 2看看

那客户输入1       +      2怎么办呢,

claws0n 发表于 2018-8-5 19:45:23

不再想起y 发表于 2018-8-5 19:41
那客户输入1       +      2怎么办呢,

可以……会吸收无限个空格~

不再想起y 发表于 2018-8-5 19:53:40

吸收无限空格版

#include<stdio.h>
int main()
{
    int a,b;
    float result;
    char ch,n;
    printf("请输入式子:");
    while(scanf("%d",&a))
    {
      while(( ch=getchar())==' ');
      ungetc(ch,stdin);
      break;
    }
    while(scanf("%c",&n))
    {
      while(( ch=getchar())==' ');
      ungetc(ch,stdin);
      break;
    }
    scanf("%d",&b);
    switch(n)
    {
      case '-': result=a-b;break;
      case '+': result=a+b;break;
      case '*': result=a*b;break;
      case '/':
            if(b==0)
            {
                printf("很遗憾,除数不能为零!\n");break;
            }
            else
            {
                result=(float)a/b;break;
            }
    }
    printf("结果是%.2f\n",result) ;
    return 0;
}

不再想起y 发表于 2018-8-5 20:00:00

不好意思,刚去试了加一个空格确实可以吸收无限空格,???不懂了
页: [1]
查看完整版本: 请大家帮帮忙,这个为什么错了呀