鱼C论坛

 找回密码
 立即注册
查看: 1683|回复: 11

[已解决]请大家帮帮忙,这个为什么错了呀

[复制链接]
发表于 2018-8-5 17:47:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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:57:33
本帖最后由 claws0n 于 2018-8-5 17:59 编辑

scanf("%d %c %d",&a,&i,&b) ;这个才是关键,使得代码错误。后面的逻辑确实有问题~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-5 17:57:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 claws0n 于 2018-8-5 17:59 编辑

scanf("%d %c %d",&a,&i,&b) ;这个才是关键,使得代码错误。后面的逻辑确实有问题~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

水煮凉凉:
一般上避免这样的语句~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-5 18:23:52 | 显示全部楼层

放空格不是为了好看不好看,而是吸收空白~
如果没有空格,而用户输入的是有空格的话,5 + 6 这样的输入是无效的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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”)。
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我知道,那你怎样确定说用户不会空格呢?
你现在输入的是1+2,那你输入1 + 2看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那客户输入1       +      2怎么办呢,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-5 19:45:23 | 显示全部楼层
不再想起y 发表于 2018-8-5 19:41
那客户输入1       +      2怎么办呢,

可以……会吸收无限个空格~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-5 20:00:00 | 显示全部楼层
不好意思,刚去试了加一个空格确实可以吸收无限空格,???不懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-2 08:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表