鱼C论坛

 找回密码
 立即注册
查看: 2173|回复: 7

[已解决]关于S1E12中计算器使用if语句遇到的问题

[复制链接]
发表于 2022-8-11 20:30:04 | 显示全部楼层 |阅读模式

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

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

x
以下为代码:

#include <stdio.h>

int main()

{
        float a, b, d;
        char c;
        printf("这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,请输入:");
        scanf_s("%f %c %f",&a,&c,&b);
        getchar();
        if (c = '+')
        {
                d = a + b;
                printf("结果:%f", d);
        }
        else if (c = '-')
        {
                d = a - b;
                printf("结果:%f",d);
        }
        else if (c = '*')
        {
                d = a * b;
                printf("结果:%f", d);
        }
        else if (c = '/')
        {
                if(b=0)
                {
                        printf("错误!");
                }
                d = a / b;
                printf("结果:%f", d);
        }
        else
        {
                printf("错误!");
        }
        return 0;
}



调试时,输入了12+8并回车后会如图报错
最佳答案
2022-8-12 00:03:44
本帖最后由 jackz007 于 2022-8-12 00:13 编辑
#include <stdio.h>

int main()

{
        float a , b , d                             ;
        int k = 0                                   ;
        char c                                      ;
        printf("这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,请输入:") ;
        if(scanf_s("%f%c%f" , & a , & c , & b) == 3) {
                k = 1                               ;
                switch(c) {
                        case '+': d = a + b ; break ;
                        case '-': d = a - b ; break ;
                        case '*': d = a * b ; break ;
                        case '/': k = 0 ; if(b != 0.0) {d = a / b ; k = 1 ;} break ;
                        defalut : k = 0             ;
                }
        }
        if(k) printf("结果:%f\n", d)               ;
        else printf("错误!\n")                     ;
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,
请输入:1.234/0
错误!

D:\[00.Exerciese.2022]\C>x
这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,
请输入:1.234/1.234
结果:1.000000

D:\[00.Exerciese.2022]\C>x
这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,
请输入:12 + 8
错误!

D:\[00.Exerciese.2022]\C>x
这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,
请输入:12+8
结果:20.000000

D:\[00.Exerciese.2022]\C>
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-11 21:48:35 From FishC Mobile | 显示全部楼层
if后面的等号换成==试一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-11 21:52:31 | 显示全部楼层
还是不行,呜呜呜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-11 21:55:30 From FishC Mobile | 显示全部楼层
lin5720qwq 发表于 2022-8-11 21:52
还是不行,呜呜呜

更改后的代码和错误信息发出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-11 22:24:08 | 显示全部楼层
复制小甲鱼的代码(因为是vs2022,所以把scanf改为scanf_s),还是一样的报错,如下
0x000007FEB5B98BAE (ucrtbased.dll)处(位于 S1E12.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-11 22:46:01 | 显示全部楼层
#include <stdio.h>

int main()

{
        float a, b, d;
        char c;
        printf("这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,请输入:");
        scanf_s("%f %c %f", &a, &c, &b);
        getchar();
        if (c == '+') {
                d = a + b;
                printf("结果:%f", d);
        } else if (c == '-') {
                d = a - b;
                printf("结果:%f", d);
        } else if (c == '*') {
                d = a * b;
                printf("结果:%f", d);
        } else if (c == '/') {
                if (b == 0) {
                        printf("错误!");
                } else {
                        d = a / b;
                        printf("结果:%f", d);
                }
        } else {
                printf("错误!");
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-12 00:03:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-8-12 00:13 编辑
#include <stdio.h>

int main()

{
        float a , b , d                             ;
        int k = 0                                   ;
        char c                                      ;
        printf("这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,请输入:") ;
        if(scanf_s("%f%c%f" , & a , & c , & b) == 3) {
                k = 1                               ;
                switch(c) {
                        case '+': d = a + b ; break ;
                        case '-': d = a - b ; break ;
                        case '*': d = a * b ; break ;
                        case '/': k = 0 ; if(b != 0.0) {d = a / b ; k = 1 ;} break ;
                        defalut : k = 0             ;
                }
        }
        if(k) printf("结果:%f\n", d)               ;
        else printf("错误!\n")                     ;
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,
请输入:1.234/0
错误!

D:\[00.Exerciese.2022]\C>x
这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,
请输入:1.234/1.234
结果:1.000000

D:\[00.Exerciese.2022]\C>x
这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,
请输入:12 + 8
错误!

D:\[00.Exerciese.2022]\C>x
这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,
请输入:12+8
结果:20.000000

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-12 00:12:08 | 显示全部楼层
我用DEV-C++的试了下,没问题阿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 10:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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