程序一次又一次地询问宽度的输入?怎么办? C语言的新功能

The program is asking again and again of input of width ?What to do ? New in C language

程序反复要求输入宽度?怎么办? C 语言中的新功能。当我输入它时不断询问 ("Enter the Width ") 它会一次又一次地询问。


代码清单


#include<cs50.h>
#include <stdio.h>
#include <stdbool.h>

int main (void)
{
    int height = 10;
    int width = 10;
    int width_Asterix = 2;

    printf("Enter the Height:");
    height = GetInt();

    for (int i = 0; i<height; i++)
    {
        printf("Enter the width: ");
        width = GetInt();

        for (int j = width ;j>0; j--)
        {
            printf(" ");
        }

        width--;
        for (int k = 0; k<width_Asterix; k++)
        {
            printf("*");
        }

        width_Asterix +=2 ;
        printf("\n");
    }
    return 0;
}

如果您没有告诉我们更多关于您的程序的信息,您似乎正在尝试打印 ASCII art pyramid (a common problem in introductory C courses)。你的 "get the width" 代码在一个循环中,所以它被执行了多次。您可能打算只询问一次值,因此您需要将该代码块移到 for 循环之外。更正后的代码包含在下面。

此外,尽可能避免使用该死的 CS50 库:它是一个创可贴,会阻止您学习 C 语言的所有复杂、美丽的荣耀。

最后,买一本关于 C 的好书。C Primer Plus by Steve Prata is the unofficial gold standard in intro texts I see mentioned on this site, and it's literally pennies to purchase a copy。在第一章中,这是练习之一。


更新代码清单


/*******************************************************************************
 * Pre-processor Directives
 ******************************************************************************/
#include <stdio.h>
#include <stdbool.h>

#define BUF_LEN (256)


/*******************************************************************************
 * Function prototypes
 ******************************************************************************/
bool getBuf(char* buf);


/*******************************************************************************
 * Function definitions
 ******************************************************************************/
/*----------------------------------------------------------------------------*/
int main (void)
{
    char buf[256] = { 0 };
    int height = 10;
    int width = 10;
    int width_Asterix = 2;
    int i, j, k;

    printf("Enter the Height:");
    if ( !getBuf(buf) ) { return -1; }
    height = atoi(buf);

    printf("Enter the width: ");
    if ( !getBuf(buf) ) { return -1; }
    width = atoi(buf);

    for ( i = 0; i < height; i++ )
    {
        for ( j = width; j > 0; j-- )
        {
            printf(" ");
        }

        width--;

        for ( k = 0; k < width_Asterix; k++ )
        {
            printf("*");
        }

        width_Asterix +=2 ;
        printf("\n");
    }
    return 0;
}

/*----------------------------------------------------------------------------*/
bool getBuf(char* buf)
{
    if (!buf)
    {
        printf("Bad input.\n");
        return false;
    }
    fgets(buf, BUF_LEN, stdin); // Get a string of data
    strtok(buf, "\n");      // Clear out trailing newline
    return true;
}

示例输出


Enter the Height:5
Enter the width: 4
    **
   ****
  ******
 ********
**********

我认为你应该这样写:

printf("Enter the width: ");
width = GetInt();

在for循环之外,在

之间
height = GetInt();

for (int i = 0; i<height; i++)

这样它只会被询问一次(在循环外)。