刚学习C语言,用switch来完成代码,

问题遇到的现象和发生背景

刚学习到这里。
需要输出的是:当x<0时,输出f(x)=-1.以此类推

img

问题相关代码,请勿粘贴截图
#include <stdio.h>
int main()
{
    int x=0;
    scanf("%d",&x);
    switch(x<0)
    {
        case 1:
        printf("f=%d\n",-1);
        break;
        case 0:
            switch(x==0){
            case 1:
            printf("f=%d\n",0);
            break;
            case 0:
                printf("f=%d\n",2*x);
                break;
        }
        default:
            printf("请重新输入");
            break;
    }
    getchar();
    return 0;
}

运行结果及报错内容

img


而且输出的界面在我输入完X之后,直接结束。没有看到输出结果

switch并不适用这样的分支判断
switch只适用变量等于某一值的判断,不适用大于或小于的判断,
这种判断应该用 if .... else if .... else ....
一定要用switch可以这样

#include <stdio.h>
int main()
{
    int x=0;
    scanf("%d",&x);
    switch(x<0?-1:x>0?1:0)
    {
        case -1:
            printf("f=%d\n",-1);
            break;
        case 0:
            printf("f=%d\n",0);
            break;
        case 1:
            printf("f=%d\n",2*x);
            break;
    }
    getchar();
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

修改如下,供参考:

#include <stdio.h>
int main()
{
    int x=0;
    scanf("%d",&x);
    switch(1*(x < 0) + 2* (x == 0) + 3*(x > 0))
    {
        case 1:
              printf("f=%d\n",-1);
              break;
        case 2:
              printf("f=%d\n",0);
              break;
        case 3:
              printf("f=%d\n",2*x);
              break;
        default:
              break;
    }
    return 0;
}

为什么我跑了一下没什么问题

switch函数里面不能放入表达式,你需要先用另外一个参数来接受这个表达式的结果

  • 看注释,你还少写了一个break
//NO.8
#include <stdio.h>
int main()
{
    int x = 0;
    scanf("%d", &x);
    int a = (x < 0);
    //printf("%d\n", a);
    switch (a)
    {
    case 1:
        printf("f=%d\n", -1);
        break;
    case 0:
        int c = (x == 0);
        switch (c)
        {
        case 1:
            printf("f=%d\n", 0);
            break;
        case 0:
            printf("f=%d\n", 2 * x);
            break;
        }
        break;//这里少了一个break
    default:
        printf("请重新输入");
        break;
    }
    getchar();
    return 0;
}

这样就能正常判断了!

VS编译器会报警告,但是程序是能跑的。主要问题还是少那个break

switch后面加入的是数据,case才是条件。你这个用一个switch就行。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632