断开的Do/While循环

Luc*_*uta 0 c

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"退出程序而没有其他字母.

rod*_*igo 8

scanf通话更改为:

scanf(" %c", &again);
Run Code Online (Sandbox Code Playgroud)

诀窍在于之前的空间%c:它指示scanf函数在返回N或Y之前忽略任何空格字符.否则,您将从之前的scanf调用中读取返回的车厢.

man 3p scanf(POSIX一个):

由一个或多个空格字符组成的指令应通过读取输入执行,直到不再能够读取有效输入,或者直到第一个不是空白字符的字节为止,该字节仍未读取.

这是一个复杂的功能.我建议小心阅读手册页:它可以比大多数人想象的要多得多.