char again;
do {
counter = 0;
while (counter < 3) {
printf("Please enter a number: ");
scanf("%d", &num);
counter++;
sum += num;
}
if (counter == 3) {
printf("Would you like to continue? [Y]Yes [N]No:");
scanf("%c", &again);
}
}while (again == 'Y');
Run Code Online (Sandbox Code Playgroud)
我似乎无法弄清楚为什么这不起作用.如果我输入Y则会中断,如果我输入N则会中断.我需要循环,直到用户输入"N"退出程序而没有其他字母.
将scanf通话更改为:
scanf(" %c", &again);
Run Code Online (Sandbox Code Playgroud)
诀窍在于之前的空间%c:它指示scanf函数在返回N或Y之前忽略任何空格字符.否则,您将从之前的scanf调用中读取返回的车厢.
从man 3p scanf(POSIX一个):
由一个或多个空格字符组成的指令应通过读取输入执行,直到不再能够读取有效输入,或者直到第一个不是空白字符的字节为止,该字节仍未读取.
这是一个复杂的功能.我建议小心阅读手册页:它可以比大多数人想象的要多得多.