C 我的计数器3如何正确递增循环?

C 我的计数器3如何正确递增循环?,c,C,所以我不确定计数器3 while循环是如何结束的。我试图将它增加+1,但这会打印太多的*行。随机添加counter3=counter3+input,正确结束循环。这是怎么可能的,因为这样一来,循环似乎会在第一次之后结束。一个任务是获取用户输入的整数,并使用while循环生成一个*大小的空框。因此,如果用户输入5,则框应为7x7。我用()表示有问题的部分。代码如下: //Homework 3 - Question 8 //main.c #include <stdio.h> int

所以我不确定计数器3 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; 

}
//作业3-问题8
//main.c
#包括
内部主(空){
int输入,input1,计数器=0,计数器2=0,计数器3=0,计数器4=0,计数器5=0;
printf(“输入一个介于1和20之间的整数:”);
scanf(“%d”,输入(&I));
同时(计数器<(输入+2)){
printf(“*”);
计数器+=1;
}
**而(计数器3<输入)**{
计数器2=0;
而(计数器2<输入){
printf(“\n*”);
计数器4=0;
而(计数器4<输入){
printf(“”);
计数器4+=1;
}
printf(“*”);
计数器2+=1;
}
**计数器3=计数器3+输入;**
}
printf(“\n”);
同时(计数器5<(输入+2)){
printf(“*”);
计数器5+=1;
}
printf(“\n”);
返回0;
}

因为不需要带计数器3的循环。您可以删除有问题的行(带有while的封闭
}
,程序将保持不变。
while(counter3
只运行一次,它不会循环,可以删除

#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; 

}
#包括
内部主(空){
int输入,input1,计数器=0,计数器2=0,计数器3=0,计数器4=0,计数器5=0;
printf(“输入一个介于1和20之间的整数:”);
scanf(“%d”,输入(&I));
同时(计数器<(输入+2)){
printf(“*”);
计数器+=1;
}
计数器2=0;
而(计数器2<输入){
printf(“\n*”);
计数器4=0;
而(计数器4<输入){
printf(“”);
计数器4+=1;
}
printf(“*”);
计数器2+=1;
}
printf(“\n”);
同时(计数器5<(输入+2)){
printf(“*”);
计数器5+=1;
}
printf(“\n”);
返回0;
}
我试图将它增加+1,但这会打印太多的*行

这怎么可能,因为它看起来像一个循环 将在第一次之后结束


这根本不是真的。
counter3
被初始化为0,您将其值增加1。假设
input>0
,那么
counter3
将保持为真,直到
counter3==input
循环将终止。它与您添加的代码一起工作的原因是现在您正在增加
counter3
的值,使其在第一次迭代时大于
input
的值,因此
counter3
语句现在为
false
,循环终止。

在编程中需要学习的第一个规则是

您正在尝试读取一个数字,然后通过
n+2
平方的
*
s打印一个
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++;
}

将计数器变量的初始化和增量放在同一行上执行完全相同的操作。

为什么不为(int counter=0;counter?为了代码的可读性,这些都是循环的美。@KamilCuk任务是使用
,而
循环显示很多次你都在期待
*。
?“太多”有点含糊不清。明白了。谢谢!
for (counter = 0; counter < input; counter++)
{
    for (counter1 = 0; counter1 < input; counter1++)
    {