我对cs50 pset 1(马里奥不太舒服)的解决方案没有打印出金字塔。相反,它只打印出一个。我已经尝试过多次了,但是当我试图编译时,我得到的只是错误,说它没有标识int I,或者分号应该移到一个新行。一旦我改成这段代码,错误终于停止了,它正确地接受了输入,但它没有打印金字塔。
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int height;
int spaces;
int hashes;
int row;
do
{
printf("Height: ");
height = get_int();
}
while (height < 0 || height > 23);
for (row = 1; row <= height; row++)
;
{
for (spaces = (height - 1) - row; spaces >= 0; spaces--)
;
{
printf(" ");
}
for (hashes = 2; row < hashes; hashes++)
;
{
printf("#");
}
printf("\n");
}
}
这是终端的输出
$使马里奥
clang-fsanitize=有符号整数溢出-fsanitize=未定义-ggdb3-O0-std=c11-Wall-Werror-Wextra-Wno sign compare-Wno unused参数-Wno unused变量-Wshadow mario.c-lcrypt-lcs50-lm-o mario
美元/马里奥
身高:15
γ
最佳答案
用户Blaze alerady对发生的事情给出了完美的解释。为了清楚起见,我想补充如下:
for语句的语法大致如下:
for ( ... ) <statement>
其中
<statement>
可以是任何语句,包括空语句。分号是语句结束符。它表示语句的结尾。如果只写一个分号,它会终止一个空语句。因此,循环体由空语句组成。
(分号作为语句结束符的另一个例子:
2+2;
将表达式转换为语句。)