所以不确定我的counter3 while循环如何结束。我试图将其增加+1
,但那却打印了太多的*。随机添加counter3 = counter3 + input
,它可以正确结束循环。这怎么可能,因为这样循环似乎在第一次之后就结束了。一种分配是接受用户输入的整数,并使用while循环制作一个*大小的空框。因此,如果用户输入5,则该框应为7x7。我将()放入有问题的部分。下面的代码:
//Homework 3 - Question 8
//main.c
#include <stdio.h>
int main(void) {
int input, input1, counter = 0, counter2 = 0, counter3 = 0, counter4 = 0, counter5 = 0;
printf("Enter an integer between 1 and 20: ");
scanf("%d", &input);
while (counter < (input + 2) ){
printf("* ");
counter += 1;
}
**while (counter3 < input)** {
counter2 = 0;
while (counter2 < input ){
printf("\n* ");
counter4 = 0;
while (counter4 < input){
printf(" ");
counter4 +=1;
}
printf("*");
counter2 +=1;
}
**counter3 = counter3 + input;**
}
printf("\n");
while (counter5 < (input + 2) ){
printf("* ");
counter5 += 1;
}
printf("\n");
return 0;
}
答案 0 :(得分:0)
因为不需要带有counter3的循环。您可以删除有问题的行(用}
括起来,程序将保持不变。while (counter3 < input)
仅运行一次,它不会循环,可以删除。>
#include <stdio.h>
int main(void) {
int input, input1, counter = 0, counter2 = 0, counter3 = 0, counter4 = 0, counter5 = 0;
printf("Enter an integer between 1 and 20: ");
scanf("%d", &input);
while (counter < (input + 2) ){
printf("* ");
counter += 1;
}
counter2 = 0;
while (counter2 < input ){
printf("\n* ");
counter4 = 0;
while (counter4 < input){
printf(" ");
counter4 +=1;
}
printf("*");
counter2 +=1;
}
printf("\n");
while (counter5 < (input + 2) ){
printf("* ");
counter5 += 1;
}
printf("\n");
return 0;
}
答案 1 :(得分:0)
我试图将其增加+1,但是那却打印了太多的*。
这怎么可能,因为这样看起来像循环 会在第一次之后结束。
那根本不是真的。 counter3
初始化为0,并且您将其值增加了1。假设input > 0
,则counter3 < input
将保持为真,直到counter3 == input
,然后循环将终止。它以您想要的方式与添加的代码一起工作的原因是,因为现在您要递增counter3
的值,以使其在第一次迭代时变得大于input
的值,因此该语句counter3 < input
现在为false
,循环终止。
答案 2 :(得分:0)
KISS principle是编程中需要学习的第一条规则。
您正在尝试读取一个数字,然后以n + 2
平方n + 2
的方格打印*
。
因此,您只需要两个循环,一个外部循环为每个迭代打印一行,一个内部循环为每个迭代打印*
。
int input = 0, counter = 0, counter1 = 0;
scanf("%d", &input);
// Increase input by 2 to get the true size of the square
input += 2;
// outer loop to print rows
while (counter < input)
{
// inner loop to print '*'s
counter1 = 0;
while (counter1 < input)
{
// print your '*' here, with any needed spaces
counter1++;
}
// end of row, print your newline character here
counter++;
}
这是通过while
循环来完成的,这可能是教师明确要求的。但是,由于这是C语言中的常见模式,因此for
循环使您可以使用更紧凑的表达式:
for (counter = 0; counter < input; counter++)
{
for (counter1 = 0; counter1 < input; counter1++)
{
做完全相同的事情,将初始化变量和计数器变量的增量全部放在同一行。