当我输出一定数量时,程序输出一定的模式。我没有包含库和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;
}
答案 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;
}