C If 语句不起作用

标签 c if-statement conditional

<分区>

菜鸟在这里尝试运行一些基本代码。当我尝试将它们一起运行时,我有一些 if 语句无法运行,但是当我通过注释掉其他 if 语句来隔离最后一个 if 语句时,它起作用了(注释在那里供您查看我是如何做到的)。谁能解释为什么 if 语句不能一起工作(我已经尝试过 else if 但它仍然不起作用)? 此处必须分别为 x、y 和 z 选择数字 1、2 和 3,输出应随机将 aaa、bbb 或 ccc 分配给 1。如果代码难看,我深表歉意。谢谢!

    int x, y, z, a, b, c, d, e, aaa, bbb, ccc, r;

    a = 0;
    b = 0;
    c = 0;
    aaa = 0;
    bbb = 0;
    ccc = 0;

    printf("Pick x:\n");
    scanf("%d",&x);

    printf("Pick y:\n");
    scanf("%d",&y);

    printf("Pick z:\n");
    scanf("%d",&z); 

    printf("You chose %d, %d, %d.\n",x,y,z);

if (x == 1 || y == 1 || z == 1) {a = (1);}

    printf("a = %d\n", a);

if (x == 2 || y == 2 || z == 2) {b = (1);}

    printf("b = %d\n", b);

if (x == 3 || y == 3 || z == 3) {c = (1);}

    printf("c = %d\n", c);

    if (a == 1 && b == 1 && c == 1 && d != 1 && e != 1) {
        /*if (aaa < bbb && aaa < ccc) {aaa = (aaa + 1);}
        if (bbb < aaa && bbb < ccc) {bbb = (bbb + 1);}
        if (ccc < bbb && ccc < aaa) {ccc = (ccc + 1);}
        if (aaa == bbb && aaa != ccc){int r = rand() % 2 + 1;
            printf("aRANDOM2 = %d\n",r);
            if (r == 1) {aaa = (aaa + 1);}
            if (r == 2) {bbb = (bbb + 1);}
        if (aaa == ccc && aaa != bbb){int r = rand() % 2 + 1;
            printf("bRANDOM2 = %d\n",r);
            if (r == 1) {aaa = (aaa + 1);}
            if (r == 2) {ccc = (ccc + 1);}
        if (ccc == bbb && aaa != ccc){int r = rand() % 2 + 1;
            printf("cRANDOM2 = %d\n",r);
            if (r == 1) {ccc = (ccc + 1);}
            if (r == 2) {bbb = (bbb + 1);}*/
        if (aaa == bbb && bbb == ccc){int r = rand() % 3 + 1;
            printf("RANDOM3 = %d\n",r);
            if (r == 1) {aaa = (aaa + 1);}
            if (r == 2) {bbb = (bbb + 1);}
            if (r == 3) {ccc = (ccc + 1);}
}}/*}}}*/


    printf("aaa = %d\n", aaa);
    printf("bbb = %d\n", bbb);
    printf("ccc = %d\n", ccc);

return 0;

最佳答案

在注释之前,最后三个 aaa/bbb/ccc if 语句中的每一个都嵌套在前一个 such if 语句中。因此,当 if (aaa == bbb && aaa != ccc) 测试为 false 时,将跳过直到右大括号行的所有其余代码。

换句话说,它真正做的是:

    if (aaa == bbb && aaa != ccc) {
        int r = rand() % 2 + 1;
        printf("aRANDOM2 = %d\n",r);
        if (r == 1) {aaa = (aaa + 1);}
        if (r == 2) {bbb = (bbb + 1);}
            if (aaa == ccc && aaa != bbb) {
            int r = rand() % 2 + 1;
            printf("bRANDOM2 = %d\n",r);
            if (r == 1) {aaa = (aaa + 1);}
            if (r == 2) {ccc = (ccc + 1);}
            if (ccc == bbb && aaa != ccc) {
                int r = rand() % 2 + 1;
                printf("cRANDOM2 = %d\n",r);
                if (r == 1) {ccc = (ccc + 1);}
                if (r == 2) {bbb = (bbb + 1);}
                if (aaa == bbb && bbb == ccc) {
                    int r = rand() % 3 + 1;
                    printf("RANDOM3 = %d\n",r);
                    if (r == 1) {aaa = (aaa + 1);}
                    if (r == 2) {bbb = (bbb + 1);}
                    if (r == 3) {ccc = (ccc + 1);}
                }
            }
        }
    }
}

您可能想要做的是将三个右大括号移动到各自 block 的末尾,如下所示:

    if (aaa == bbb && aaa != ccc) {
        int r = rand() % 2 + 1;
        printf("aRANDOM2 = %d\n",r);
        if (r == 1) {aaa = (aaa + 1);}
        if (r == 2) {bbb = (bbb + 1);}
    }
    if (aaa == ccc && aaa != bbb) {
        int r = rand() % 2 + 1;
        printf("bRANDOM2 = %d\n",r);
        if (r == 1) {aaa = (aaa + 1);}
        if (r == 2) {ccc = (ccc + 1);}
    }
    if (ccc == bbb && aaa != ccc) {
        int r = rand() % 2 + 1;
        printf("cRANDOM2 = %d\n",r);
        if (r == 1) {ccc = (ccc + 1);}
        if (r == 2) {bbb = (bbb + 1);}
    }
    if (aaa == bbb && bbb == ccc) {
        int r = rand() % 3 + 1;
        printf("RANDOM3 = %d\n",r);
        if (r == 1) {aaa = (aaa + 1);}
        if (r == 2) {bbb = (bbb + 1);}
        if (r == 3) {ccc = (ccc + 1);}
    }
}

关于C If 语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22286688/

相关文章:

c - 分配期间从数组位置获取错误的数据值

c - 对数组指针排序后释放内存时出错

if-statement - Xquery:相同的测试无论是在 switch/case 还是在 if/then/else 中都有不同的结果

c - 在 C 中,什么时候支持条件 "test ? : alt"形式(空的 true 大小写)?

iphone - 如何在不复制 Xcode 4 项目的情况下从付费版本构建免费版本?

c - 使用两个堆栈在 C 中按升序对堆栈进行排序

c - 用 C 重建从 HTTP 代理服务器到远程服务器的请求 header

javascript - 它还执行我的 else 语句

c++ - C++ 中货币之间转换的程序出现问题

c# - XAML 条件编译