Visual Studio跳过if语句?

时间:2015-11-17 00:43:08

标签: c++

当我输出一定数量时,程序输出一定的模式。我没有包含库和int main或提示符,但这是我遇到问题的代码的一部分。

例如,当我输入5时,我应该得到:

111111111
122222221
123333321
123444321
123454321

我得到的是:

111111111
2222222
33333
444
5

我写了第一个if语句

if (lb2 < lb1){}

在它之前插入1和2,但似乎它被跳过了。谁能告诉我为什么?

int lb1, lb2, lb3; 
cout << endl << "LETTER BOX:" << endl;
for (lb1 = 1; lb1 <= number; lb1++) {

    cout << "   ";

    for (lb2 = 1; lb2 = (2*number)-1 ; lb2++){
        lb3 = 1;

        if (lb2 < lb1){
            do {
                cout << lb2;
                lb3++;
            } while (lb3 < lb1);
            break;
        }
        else if (lb2 = lb1){                
            do {
                cout << lb2;
                lb3++;
            } while (lb3 <= ((2*number)-1)-(2*(lb2-1)));
            break;
        } 
        else if (lb2 > lb1){                
            do {
                cout << lb2;
                lb3++;
            } while (lb3 <= ((2*number)-1)-(2*(lb2-1)));
            break;
        } 
    }  

    cout << endl;
}

2 个答案:

答案 0 :(得分:0)

for (lb2 = 1; lb2 = (2*number)-1 ; lb2++){

条件语句使用=而不是&lt; =这会弄乱lb2中的值

else if (lb2 = lb1){

再次使用=而不是==更改lb2中的值而不是仅仅检查它。

另外,正如我从你的代码中理解的那样,lb1循环控制行,而lb2循环控制一行中的数字。但是,每个条件结束时的三个break语句会阻止lb2循环迭代(2 * number)-1次。

另一件事是,三个do-while循环不会增加lb2,这会导致行具有多于(2 * number)-1个数字。

答案 1 :(得分:0)

你的do {} while()控制一切,使for(lb2)循环和大多数if-else案例无用,这就是为什么它会在while循环中断之前打印相同的东西。

如果你知道你想要退出,那么断言也会突破循环,所以不要使用break。 最后,在从=更改为==之后,您不会打印任何内容,因为lb2从1开始,所以1 == 9总是失败。将其更改为&lt; = 2 * number-1就像第一个循环一样。

踩过去: 对于第一行,lb1 = 1,lb2 = 1:if(lb2 == lb1)case运行。 if case的while循环说:

do { cout << lb2; lb3++; } while (lb3 < 9); //lb2 is always 1
// break out of lb2 loop, now lb1 = 2

代表第2至第5行:lb1 = 2(3,4,5 ......),lb2 = 1:如果(lb2> lb1)总是选择案例:

do { cout << lb2; lb3++ } while (lb3 < (9 - 2)); //lb2 is always 2

你应该先学习循环。 http://www.codecademy.com是一个很好的起点,但我不认为他们有c ++。但是,其他语言也是一样的(Ruby,Java,Javascript)。这是一个例子,尝试遵循它。

 // loop 1: for row from 1 to 5
 for (lb1 = 1; lb1 <= number; lb1++) {

    cout << "   ";
    lb3 = 1;

    // loop 2: for column from 1 to 9
    for (lb2 = 1; lb2 <= (2*number)-1 ; lb2++){

        if (lb2 < lb1){
            cout << lb3++;
        }
        else if (lb2 >= lb1 && lb2 <= 2*number - lb1){                
            cout << lb3;
        } 
        else if (lb2 > number){ 
            if (lb3 > 1) { lb3--; }               
            cout << lb3;
        } 
    }  

    cout << endl;
}