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;
当输入为负整数时,程序会询问您是否要重置。
当我用一个负整数测试它时,它工作正常。但是当我尝试一个正整数时,它不起作用(我必须输入两次东西)。
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;