0
int i;
do
{
    i = get_int("height: ");
}
while (i < 1);

for(int n = 0; n < i; n++)
{
    printf("#");    
}
printf("\n");

此代码在终端中正确执行,但我不明白这部分如何
for(int n = 0; n < i; n++)允许用户输入正整数并打印正确的数量。

我的想法是,顶部获取用户整数并将其分配给i,直到给出正整数。
但我不明白循环是如何工作的。

为什么将 0 分配给小于n并使用 1递增会给出根据用户输入打印散列的结果?ninn++"#"

如果有人可以帮助我理解,将不胜感激,代码和 C 的新手。

4

2 回答 2

1

C中有两种形式的for循环:

for ( expr1opt ; expr2opt ; expr3opt )
  statement

for ( declaration expr2opt ; expr3opt )
  statement

首先,如果它存在,要么 要么expr1declaration评估 - 这个表达式通常初始化我们的循环计数器或设置事物expr2测试。在这种情况下,我们声明计数器n并将其初始化为 0。

接下来,如果存在,expr2则进行评估(如果不存在,则假定为非零值)。如果表达式的结果是非零值,则执行循环体。n在这种情况下,如果 的值小于,则执行循环体i

最后,expr3被评估。这个表达式通常会更新循环计数器或任何expr2测试对象。在这种情况下,它递增n1。

所以这个特定循环的工作方式是:

  1. 声明并初始化n为 0 ( declaration)
  2. 如果n小于i则转3,否则转6 ( expr2)
  3. 打印一个哈希字符 ( statement)
  4. 将 1 添加到n( expr3)
  5. 前往 2
  6. 结束循环

编辑

对于询问第二种形式中缺少的分号的人, adeclaration包括一个终止符;

declaration:
    declaration-specifiers init-declarator-listopt ;
于 2020-12-24T05:17:02.633 回答
0

啊是的CS50。所以基本上这条线=>如何for(int n = 0; n < i; n++) 检查数字是否为正,首先让0替换为n。所以基本上是 => for(int n = 0; 0< i; n++)。所以这意味着它i必须大于 0。如果不是,for 循环将不会执行。所以如果i值为 5. 0<5 为真,这意味着 for 循环将执行.. 如果i值为 -1。0<-1 为假,因此 for 循环不会执行。如果您输入 5,它将重复 5 次。(如果i值为 5),因为您从 0 开始,然后递增(n++)5 次。

于 2020-12-24T03:33:18.553 回答