在正确地“链接”我的所有头文件后,我终于达到了能够正确编译我的代码的程度。当我做了mariov1.c(代码如下所示)时,我使用了20的测试输入,结果是打印出3个哈希标记然后显示我的cmd行像这样
###[xvp@localhost ~]$
现在它应该有21个空格和2个哈希标记的输出添加一个哈希标记并且每行减去一个空格,直到hashmarks的数量= usrHeight(实际上它实际上并不是由哈希数决定的,而是它仍然是这样的。)应该看起来像这样。
How High?
10
constructing...
##
###
####
#####
######
#######
########
#########
##########
###########
这会使它保持正确对齐。
mariov1.c来源
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int usrHeight = 0;
int levelCounter = 0;
int paddIt = usrHeight - 1;
int hashCounter = 2;
do
{
printf("How high?\n");
int usrHeight = GetInt();
}
while ( usrHeight > 23 || usrHeight < 0);
if ( usrHeight >= 0 && usrHeight <= 23);
{
printf("constructing...\n");
}
for (levelCounter = 0; levelCounter <= usrHeight; levelCounter++)
{
printf("%.*s\n", paddIt, "");
for (int i = 0; i <= hashCounter; i++)
putchar('#');
paddIt = paddIt - 1;
hashCounter = hashCounter + 1;
}
}
我犯了这个错误之后第二次尝试使用另一个do while循环,在它的中间有一个for循环(很确定我做错了)但是它只是连续填充了终端所以我不确定在哪里走到这一步。
这是mariov2.c来源
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int usrHeight = 0;
int levelCounter = 0;
int paddIt = usrHeight - 1;
int hashCounter = 2;
do
{
printf("How high?\n");
int usrHeight = GetInt();
}
while ( usrHeight > 23 || usrHeight < 0);
if ( usrHeight >= 0 && usrHeight <= 23);
{
printf("constructing...\n");
}
//doing a test to see if this do while loop will handle this appropriatelly
do
{
printf("%.*s\n", paddIt, "");
for (int i = 0; i <= hashCounter; i++)
{
putchar('#');
paddIt = paddIt - 1;
hashCounter = hashCounter + 1;
levelCounter = levelCounter + 1;
}
}
while ( levelCounter <= usrHeight );
//commented area part of original code
//for (levelCounter = 0; levelCounter <= usrHeight; levelCounter++)
//{
// printf("%.*s", paddIt, "");
// for (int i = 0; i <= hashCounter; i++)
// putchar('#');
// paddIt = paddIt - 1;
// hashCounter = hashCounter + 1;
//}
}
答案 0 :(得分:2)
首先要注意的是,您在循环中使用的usrHeight
始终为0
,因为在细分中
do
{
printf("How high?\n");
int usrHeight = GetInt();
}
while ( usrHeight > 23 || usrHeight < 0);
usrHeight
是范围内的本地。一旦控件超出此范围并使用usrHeight
,它实际上是您在函数main范围内定义的变量。从int
int usrHeight = GetInt();
此外,在使用paddIt
使用值初始化GetInt ()
之前,您已经计算了{{1}}变量。