我正在为我正在制作的C ++课程设计一个程序,教授希望我们制作一个使用“*”输出菱形的程序。我坚持的是我的程序输出太多行。
而不是
*
***
*
正在输出
*
***
*****
***
*
如何修改我的代码才能使其正常工作?我整个上午一直在网上寻找答案而没有运气。
这是我的代码:
#include <iostream>
using namespace std;
int main () {
//Define Varaible
int N;
cout << "Please enter a postitive integer: ";
cin >> N;
cout << "Here is your diamond." << endl << endl;
for (int i = 0; i <= 2 * N; i++) {
for (int j = 0; j <= 2 * N; j++) {
if (i <= N) {
if (j < N - i || j > N + i) {
cout << ' ';
}
else {
cout << '*';
}
}
else {
if (j < i - N || j > 3 * N - i) {
cout << ' ';
}
else {
cout << '*';
}
}
}
cout << endl;
}
return 0;
}
答案 0 :(得分:0)
您获得的行数超出预期的原因是您实际需要2 * N + 1
时创建2 * N - 1
行数。
修复很简单:在阅读输入后将N
减1。
cin >> N;
assert(N > 0);
--N;
这样,您的其余代码就不必更改。
答案 1 :(得分:0)
你应该记住,在范围[0,5](包括两者)中有6个元素,而不是5.所以当你做循环并且你想要进行5次迭代时,你通常会这样做:
for( int i = 0; i < 5; ++i ) // do stuff
或
for( int i = 1; i <= 5; ++i ) // do stuff
当使用C或C ++进行编程时,更常使用第一版,因为它适合数组索引,程序员习惯使用该表单。 但正如我之前所说,如果你这样做:
for( int i = 0; i <= 5; ++i ) // do stuff
那将是6次迭代。