do while 循环中 If 语句中的 scanf 弄乱了输入

scanf inside an If statement on a do while loop messes up the inputs

当输入为负整数时,程序会询问您是否要重置。

当我用一个负整数测试它时,它工作正常。但是当我尝试一个正整数时,它不起作用(我必须输入两次东西)。

int main(void) {
    int user_input;
    char check;

    do
    {
        printf("Enter a positive integer: ");
        scanf("%d", &user_input);

        if (user_input < 0)
            printf("Error. Do you want to continue using the program? y/n: ");
            scanf(" %c", &check);

    } while (check == 'y');

  return 0;
} 

你对 scanf 的第二次调用应该在括号内,否则它不是 if 语句的一部分。与 Python 等语言不同,缩进无关紧要。

无论用户输入如何,您的代码 总是 执行 scanf(" %c", &check)

int main(void) {
    int user_input;
    char check;

    do
    {
        printf("Enter a positive integer: ");
        scanf("%d", &user_input);

        if (user_input < 0) {
            printf("Error. Do you want to continue using the program? y/n: ");
            scanf(" %c", &check);
        }

    } while (check == 'y');

  return 0;
} 

以下块是相同的:

if (something)
    statementA;
    statementB;
if (something)
    statementA;
statementB;