在 C 中执行 While 循环 (CS50)

Do While Loop in C (CS50)

我目前正在尝试学习 CS50 课程。我正在尝试为第一个问题集创建一个 do-while 循环,但我返回了一个错误。帮助将是巨大的,谢谢!

#include <cs50.h>
#include <stdio.h>

int main(void)
{

    do
    {
        printf("Enter a positive integer no greater than 23: \n");
        int n = get_int();
    }
    while ( int n < 0 || int n > 23);

}

$clang mario.c

mario.c:12:13: error: expected expression
    while ( int n < 0 || int n > 23);
            ^
mario.c:12:13: error: expected ')'
mario.c:12:11: note: to match this '('
    while ( int n < 0 || int n > 23);
          ^
2 errors generated.

只在 do-while 循环外声明 n 一次:

int n = -1;
do
{
    printf("Enter a positive integer no greater than 23: \n");
    n = get_int();
}
while (n < 0 || n > 23);

我们从不在里面定义变量 像 if 或 while 和 For 循环这样的表达式 这只有在 C++ 等其他语言中才有可能 |;

你的问题在于你有:

  • 在你的 while 循环中声明 n(这在 C89 中是不允许的,但在以后的版本中勉强允许)

  • 在 while 部分声明了 n 两次。

声明的目的是向编译器表明,存在的变量名不是垃圾,而是一个变量。编译器通常遵循固定规则,不会在 while/for 循环中查找变量名(这是为了优化目的)。同样,您第二次声明 n 时,编译器现在感到困惑,因为您声明了一个名为 n 的变量已经存在。

PS:我相信你想说 n lies within the bounds of 1 and 22 如果你想这样说,正确的表达方式应该是 AND (&&) 而不是 OR (||) 即 while ( int n < 0 && int n > 23).