codeblocks输出结果不正确

时间:2017-07-11 09:57:27

标签: c

我的代码:

#include <stdio.h>
int main(){
    int a = 5;
    int b,c;
    if (a==4){
        b = 6;
        c = 7;
    }
    printf("%d %d\n",b,c);
}

我知道结果应该是0 0,但代码块给出答案50 8.我尝试了在线编译器,我得到了答案0 0.那么codeblocks有什么问题?我正在使用最新版本的codeblocks和gcc c编译器。我将来如何避免这类问题?

4 个答案:

答案 0 :(得分:1)

  

我知道结果应该是0 0

你的猜测错了

变量b,c自动(存储说明符),未初始化变量 - &gt;不确定的价值 - &gt;不保证他们的价值观 - &gt;的 UB

在你的情况下,你得到50,8你可能会得到其他值/打印垃圾/崩溃......

答案 1 :(得分:1)

bc变量的值是垃圾,因为if()条件变为false。这意味着,它是未定义的行为。

C11部分6.7.9初始化:

第10段:

  

如果未初始化具有自动存储持续时间的对象   显然,它的价值是不确定的。

答案 2 :(得分:0)

b和c的值在此程序中未定义,因为它们在打印之前未初始化

答案 3 :(得分:0)

好的查看代码并逐步分析,

    #include <stdio.h>
    int main(){
        int a = 5;//You've assigned the value of 5 to integer a.
        int b,c;//You've declared two integer variables "b" and "c".
        if (a==4)/*Compiler checks whether the if condition is true,which in your  case is not*/
        {
            b = 6;/*Assigning value 6 to the b variable but no effect as the if condition of your's is not satisfied*/

            c = 7;/*The same above condition applies here.*/
        }
        printf("%d %d\n",b,c);/*Here your trying to print the values of b and c, 

But remember you have not given them any value. So the compiler automatically prints the garbage value(random value). It need not be 0 all the time.*/  

return 0;//You forgot this step btw:)
    }