鱼C论坛

 找回密码
 立即注册
查看: 2587|回复: 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 编辑
  1. #include <stdio.h>

  2. int main()

  3. {
  4.         float a , b , d                             ;
  5.         int k = 0                                   ;
  6.         char c                                      ;
  7.         printf("这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,请输入:") ;
  8.         if(scanf_s("%f%c%f" , & a , & c , & b) == 3) {
  9.                 k = 1                               ;
  10.                 switch(c) {
  11.                         case '+': d = a + b ; break ;
  12.                         case '-': d = a - b ; break ;
  13.                         case '*': d = a * b ; break ;
  14.                         case '/': k = 0 ; if(b != 0.0) {d = a / b ; k = 1 ;} break ;
  15.                         defalut : k = 0             ;
  16.                 }
  17.         }
  18.         if(k) printf("结果:%f\n", d)               ;
  19.         else printf("错误!\n")                     ;
  20. }
复制代码

        编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

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

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

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

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

  18. D:\[00.Exerciese.2022]\C>
复制代码
1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-11 21:48:35 From FishC Mobile | 显示全部楼层
if后面的等号换成==试一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-11 21:52:31 | 显示全部楼层
还是不行,呜呜呜
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

更改后的代码和错误信息发出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

  2. int main()

  3. {
  4.         float a, b, d;
  5.         char c;
  6.         printf("这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,请输入:");
  7.         scanf_s("%f %c %f", &a, &c, &b);
  8.         getchar();
  9.         if (c == '+') {
  10.                 d = a + b;
  11.                 printf("结果:%f", d);
  12.         } else if (c == '-') {
  13.                 d = a - b;
  14.                 printf("结果:%f", d);
  15.         } else if (c == '*') {
  16.                 d = a * b;
  17.                 printf("结果:%f", d);
  18.         } else if (c == '/') {
  19.                 if (b == 0) {
  20.                         printf("错误!");
  21.                 } else {
  22.                         d = a / b;
  23.                         printf("结果:%f", d);
  24.                 }
  25.         } else {
  26.                 printf("错误!");
  27.         }
  28.         return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. int main()

  3. {
  4.         float a , b , d                             ;
  5.         int k = 0                                   ;
  6.         char c                                      ;
  7.         printf("这是一个极其简单的计算器,只能进行四则远算且只具备a+b的形式,别忘了用空格隔开,请输入:") ;
  8.         if(scanf_s("%f%c%f" , & a , & c , & b) == 3) {
  9.                 k = 1                               ;
  10.                 switch(c) {
  11.                         case '+': d = a + b ; break ;
  12.                         case '-': d = a - b ; break ;
  13.                         case '*': d = a * b ; break ;
  14.                         case '/': k = 0 ; if(b != 0.0) {d = a / b ; k = 1 ;} break ;
  15.                         defalut : k = 0             ;
  16.                 }
  17.         }
  18.         if(k) printf("结果:%f\n", d)               ;
  19.         else printf("错误!\n")                     ;
  20. }
复制代码

        编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

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

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

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

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

  18. D:\[00.Exerciese.2022]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-12 00:12:08 | 显示全部楼层
我用DEV-C++的试了下,没问题阿
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 12:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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