程序一次又一次地要求输入宽度?怎么办? C语言新手。当我进入它时不断询问("输入宽度")它一次又一次地问。
代码清单
#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;
}
答案 0 :(得分:1)
如果没有您告诉我们有关您的计划的更多信息,您似乎正在尝试打印ASCII art金字塔(a common problem in introductory C
courses)。你有&#34;得到宽度&#34;循环中的代码,因此它被执行多次。您可能只想要一次请求值,因此您需要将该代码块移到for
循环之外。更正后的代码包含在下面。
另外,如果可能的话,尽量避免使用那个已知的CS50
库:它是一个创可贴,可以阻止你学习C语言的所有复杂,美丽的荣耀。
最后,请写一本关于C的好书。C Primer Plus by Steve Prata是我在本网站上提到的介绍文本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
**
****
******
********
**********
答案 1 :(得分:0)
我认为你应该把这个:
printf("Enter the width: ");
width = GetInt();
在for循环之外,在
之间height = GetInt();
和
for (int i = 0; i<height; i++)
这样只需要一次(在循环之外)。