鱼C论坛

 找回密码
 立即注册
查看: 846|回复: 4

[已解决]关于if括号内语句的问题

[复制链接]
发表于 2020-7-24 05:45:08 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

int main()
{
        char ch;
        float s1, s2;
        printf("请输入:\n");
        scanf_s("%f %c %f", &s1, &ch, &s2);

        if (ch == '-')
        {
                s1 = s1 - s2;
                printf("%f\n", s1);
        }
        else if (ch == '+')
        {
                s1 = s1 + s2;
                printf("%f\n", s1);
        }
        else if (ch == '*')
        {
                s1 = s1 * s2;
                printf("%f\n", s1);
        }
        else if (ch == '/' && s2 != 0)
        {
                s1 = s1 / s2;
                printf("%f\n", s1);
        }
        else
                printf("非法输入");

        return 0;
}


这段代码能正常运行,但是运行后不是想要的结果,
VC2013下运行结果:
请输入:
1
+
2
请按任意键继续. . .

最佳答案
2020-7-24 08:38:51
我运行了你的代码,发现s2无法赋值,显示无法写入。有权限。将函数scanf_s改为scanf就正常了。无论输入1+2还是1 + 2都可以正常运行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-24 08:21:16 | 显示全部楼层
本帖最后由 livcui 于 2020-7-24 08:25 编辑

改为:
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char ch;
  5.     float s1, s2;
  6.     printf("请输入:\n");
  7.     scanf("%f%c%f", &s1, &ch, &s2);

  8.     switch (ch) {

  9.     case '-':
  10.         s1 = s1 - s2;
  11.         printf("%f\n", s1);
  12.         break;
  13.     case '+':
  14.         s1 = s1 + s2;
  15.         printf("%f\n", s1);
  16.         break;
  17.     case '*':
  18.         s1 = s1 * s2;
  19.         printf("%f\n", s1);
  20.         break;
  21.     case '/':
  22.         if (s2 != 0){

  23.                 s1 = s1 / s2;
  24.                 printf("%f\n", s1);
  25.                 break;

  26.         }
  27.     default:
  28.         printf("非法输入");

  29.     }

  30.     return 0;

  31. }
复制代码
scanf_s 的问题,改为scanf就可以了,C我不熟,scanf_s 也不知道错哪里了,
代码帮你改成switch了,不然太...

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-24 08:38:51 | 显示全部楼层    本楼为最佳答案   
我运行了你的代码,发现s2无法赋值,显示无法写入。有权限。将函数scanf_s改为scanf就正常了。无论输入1+2还是1 + 2都可以正常运行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-25 01:37:20 | 显示全部楼层
405794672 发表于 2020-7-24 08:38
我运行了你的代码,发现s2无法赋值,显示无法写入。有权限。将函数scanf_s改为scanf就正常了。无论输入1+2 ...

我用的VS2013,用scanf会报错显示如下

错误        1        error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.        f:\练习\consoleapplication34\consoleapplication34\计算器725.c        8        1        ConsoleApplication34
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-25 08:41:20 | 显示全部楼层
我变秃了。 发表于 2020-7-25 01:37
我用的VS2013,用scanf会报错显示如下

错误        1        error C4996: 'scanf': This function or variable may  ...

百度一下,查找一下该警告解决办法。C4996的。。就是把你上面写的那个_CRT_SECURE_NO_WARNINGS,它告诉你要用这个。在项目属性里面,预处理器,给定义这个。或者直接在代码里预处理。编译器就不会报错了,忽略了这个警告
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 19:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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