在正确地“链接”了我所有的头文件之后,我终于可以正确地编译我的代码了。当我执行mariov1.c(代码如下所示)时,我使用了20个测试输入,结果是打印出3个井号,然后像这样显示我的cmd行###[xvp@localhost ~]$
现在应该有一个21个空格和2个哈希标记的输出,每个哈希标记添加一个哈希标记,并在每行中减去一个空格,直到哈希标记的数量= 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;
//}
}
最佳答案
首先要注意的是,循环中使用的usrHeight
始终为0
,因为在段中
do
{
printf("How high?\n");
int usrHeight = GetInt();
}
while ( usrHeight > 23 || usrHeight < 0);
usrHeight
对于while范围是局部的。一旦控件超出此范围并且您使用usrHeight
,它实际上就是您在main函数范围内定义的变量。从int
删除int usrHeight = GetInt();
同样,在实际使用
paddIt
对其进行初始化之前,已经计算了GetInt ()
变量。关于c - 以特定方式打印特定变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21619219/