程序一次又一次地询问宽度的输入?怎么办? 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++)
这样它只会被询问一次(在循环外)。
程序反复要求输入宽度?怎么办? 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++)
这样它只会被询问一次(在循环外)。