我正在为考试而学习,教授要求提供一种可以显示以下模式的程序:picture of the expected output
N=2 N=3 N=4 N=5
** *** **** *****
** *** **** *****
*** **** *****
**** *****
*****
(除非图像错过了N=5
的第五行。)
我的程序可以获得类似的输出,除了它使每个预期输出的行数加倍(即,当N = 3时有6行,IE当N = 4时有8行)。不知道在行数达到N后如何停止运行。这是我的以下代码:
#include <stdio.h>
int main() {
int N, rows1, width1, rows2, width2;
printf("Please enter a number between 2 and 5 (including 2 and 5).\n");
scanf("%d", &N);
if (N<2 || N>5)
{
printf ("The number you entered is either less than 2 or greater than 5."
" Please try again.\n");
return 0;
}
for (rows1=1; rows1<=N; rows1++)
{
for(width1=1; width1<=N; width1++)
printf ("*");
printf ("\n");
for(rows2=1; rows2<=1; rows2++)
printf (" ");
for(width2=1; width2<=N; width2++)
printf ("*");
printf ("\n");
}
return 0;
}
答案 0 :(得分:0)
1)在第一个条件中,您返回0表示成功。在条件获取用户输入的过程中,我将使用宏EXIT_FAILURE(甚至最好使用while循环,直到您从用户获得有效输入为止)。
2)我将对此进行跟踪,并逐步了解您希望在程序的每个步骤中获得什么。考虑一下您是否可以消除某些for循环,那么对于您的程序运行,真正需要多少循环呢?
*************只有当您尝试自己修复时,才请看****************
int main() {
int N;
printf("Please enter a number between 2 and 5 (including 2 and 5). \n");
scanf("%d", &N);
if (N<2 || N>5)
{
printf ("The number you entered is either less than 2 or greater than 5. \
Please try again.");
return EXIT_FAILURE;
}
for (int length= 0; length < N; length++) {
if(length %2 == 1){
printf(" ");
}
for(int width = 0; width < N; width++) {
printf("*");
}
printf("\n");
}
return EXIT_SUCCESS;
}
答案 1 :(得分:0)
在外循环中打印两次。即你有
for 1 to N, stepping by 1
print line
print leading space
print line
因此,当您要精确打印N
行时,您将打印两次N
行。
增加增量(将rows++
替换为rows += 2
,这将导致您仅打印偶数行,因此必须将其修复为奇数N
)或更改为每次迭代仅打印一行(您必须固定交替的前导空格)。 The @malanb5 answer编码了后一种解决方案的示例。