上面的程序哪里有错,为什么一直输出\n
时间: 2024-02-12 11:04:52 浏览: 86
面试中经常出现的程序输出问题
在程序中,第一个循环的循环条件是 `i<=(n/2+1)`,这个条件确保了上半部分的三角形行数不会超过 `(n/2+1)` 行。但是在下半部分的循环中,循环条件是 `i<=(n/2+2)`,这个条件确保了下半部分的三角形行数也不会超过 `(n/2+1)` 行。
这就导致了一个问题:当输入偶数个字符时,下半部分的循环没有机会执行,因此变量 i 的值仍然是 `(n/2+2)`,而不是 n+1,导致程序输出的是一个换行符。这个问题可以通过修改下半部分循环的循环条件,使得下半部分的三角形行数能够达到 n-(n/2+1)+1 行,即 `i<=(n/2+1)*2`。修改后的程序如下:
```c
#include <stdio.h>
int main(void) {
int i, j, n;
scanf("%d", &n);
for (i = 1; i <= (n / 2 + 1); i++) {
for (j = 1; j <= n; j++) {
while (j >= (n / 2 - i + 2) && j <= (n / 2 + i)) {
printf("*");
j++;
}
printf(" ");
}
printf("\n");
}
for (i = (n / 2 + 2); i <= (n / 2 + 1) * 2; i++) {
for (j = 1; j <= n; j++) {
while (j <= i - (n / 2 + 1) || j >= n - (i - (n / 2 + 1)) + 1) {
printf(" ");
j++;
}
printf("*");
}
printf("\n");
}
return 0;
}
```
这个程序会正确地输出一个菱形,无论输入的是奇数还是偶数个字符。
阅读全文