相同的代码会产生不同的输出,具体取决于是否存在花括号

时间:2018-07-30 07:53:50

标签: c++ debugging

我有此代码:

int main() {

int list[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int max = 0, min = 0, small, large;

for (int j = 0; j < 10; ++j) {

    if(list[max] < list[j]) {
        max = j;
        large = list[max];
    }

    if(list[min] > list[j]) {
        min = j;
        small = list[min];
    }

    cout << "Maximum :" << large << endl;
    cout << "Minimum :" << small << endl << endl;
}

上述代码中的small不正确。

输出:

Maximum :-1482404720
Minimum :0

Maximum :2
Minimum :0

Maximum :3
Minimum :0

Maximum :4
Minimum :0

Maximum :5
Minimum :0

Maximum :6
Minimum :0

Maximum :7
Minimum :0

Maximum :8
Minimum :0

Maximum :9
Minimum :0

Maximum :10
Minimum :0

但是,可以使用相同的代码(省略花括号),如下所示:

    if(list[max] < list[j]) 
        max = j;
        large = list[max];


    if(list[min] > list[j]) 
        min = j;
        small = list[min];

上面的代码现在可以正确显示最小值和最大值。

输出:

Maximum :1
Minimum :1

Maximum :2
Minimum :1

Maximum :3
Minimum :1

Maximum :4
Minimum :1

Maximum :5
Minimum :1

Maximum :6
Minimum :1

Maximum :7
Minimum :1

Maximum :8
Minimum :1

Maximum :9
Minimum :1

Maximum :10
Minimum :1

为什么会这样?我问过我的讲师,她也不知道,所以我决定在这里问。

3 个答案:

答案 0 :(得分:3)

声明时

int list[] = {1,2,3,4,5,6,7,8,9,10};
int max=0, min=0, small, large;

您尚未初始化smalllarge

进入循环时,min为零,因此if永远不会是您的数字:

if(list[min] > list[j]) {
    min = j;
    small = list[min];
}

因为它们恰好在增加。 这意味着您永远不会初始化small

如果有

if(list[min] > list[j]) 
    min = j;
    small = list[min];

相反,这与

相同
if(list[min] > list[j]) {
    min = j;
}
    small = list[min];

if(list[min] > list[j]) 
    min = j;
}
small = list[min];

这意味着small已初始化。

由于您的示例list不断增加,因此您很幸运,max的工作方式也是如此。 尝试各种输入。 并初始化您的变量。

答案 1 :(得分:0)

如果您错过了花括号,则循环/条件语句将仅应用于下一个语句。 因此,第二个语句后跟“ if(list [max] list [j])””不适用于“ large = list [max];”。和“ small = list [min];”分别。

希望这会有所帮助。

答案 2 :(得分:0)

这不是由于是否带有大括号。您的代码中有错误。它在没有括号的情况下只是偶然地工作。尝试下面的代码并对其进行改进-

int main() {

    int list[] = {1,2,3,4,5,6,7,8,9,10};
    int max=0, min=0, small, large;

    for (int j = 0; j < 10; ++j) {

        if(list[max] < list[j]) {
            max = j;
        }
        else if(list[min] > list[j]) {
            min = j;
        }
    }

    large = list[max];
    small = list[min];

    cout << "Maximum :" << large << endl;
    cout << "Minimum :" << small << endl;
}