我的counter3如何正确增加循环?

时间:2018-09-07 17:58:42

标签: c

所以不确定我的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; 

}

3 个答案:

答案 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++)
    {

做完全相同的事情,将初始化变量和计数器变量的增量全部放在同一行。