C 无法扫描while循环中的字符

C 无法扫描while循环中的字符,c,C,我要无限扫描 这是我的代码: int main() { int i=1; char score; while(1) { printf("Please Input No %d of char",i); scanf("%C",&score); i++; } return 0; } 我的输出: Please Input No 1 of char:A Please Input No 2 of cha

我要无限扫描 这是我的代码:

int main() {
    int i=1;
    char score;
    while(1)
    {
        printf("Please Input No %d of char",i);
        scanf("%C",&score);
        i++;
    }
    return 0;
}
我的输出:

Please Input No 1 of char:A
Please Input No 2 of char:B
Please Input No 3 of char:Please Input No 4 of char:C
Please Input No 5 of char:Please Input No 6 of char:
如何在while循环normal中修复i变量。 感谢使用getchar;扫描后

请注意%C不是标准的


和scanf%c,&score;正在获取一个字符,但当我们按Enter键时,这是另一个输入。因此,我们需要getchar

最好解释一下为什么需要它,并指出从%C到%C的变化。如果输入了123个香蕉,您可能需要在循环中使用getchar。用户是乖僻的生物,只要有一点点机会,就会做任何错事。你希望他们输入一个很好的简短的“单词”,然后他们输入“supercalifragilisticexpialidocious”。您希望他们键入单个字符和换行符,并且在换行符之前键入许多字符。如果不是为了用户,编程就会容易得多。作为一种职业,它的利润也要少得多,所以你不能没有它们。但是您必须处理它们的特性和怪癖,不遵循说明或期望是您必须处理的怪癖。此外,比使用getchar更好的技术是在%c转换规范之前使用%c和空白。空白导致SCANF跳过零个或多个空白字符-尾随空白和标签,以及换行符和引导空白,只有当遇到不属于空白的东西时才会停止。这很有效;如果用户键入123和换行符,则可以看到所有三位数字。如果用户键入b、return、return、return、c,那么代码只看到b和c。不要在格式字符串中使用尾随空格;“那是一场灾难。”乔纳森,你写下了确切的答案。我所知道的,我给了答案。在输入字符时,我总是使用getchar。你可以写一个答案。这会更好,人们会得到有价值的答案。专业提示:如果你想读入一行,然后解析该行,那么就编写代码读入一行,然后解析该行。不要要求用户输入一行,然后只读取一个字符-这样做很痛苦。请注意%C是Microsoft特有的-鉴于您使用的是scanf,这意味着您要向其传递一个宽字符和“相反大小的字符”-请参阅链接。除非你没有通过一个宽字符。某些版本的Linux根本无法识别%C。在macOS上,%C与%lc相同-这意味着需要一个宽字符。
int main() {
    int i=1;
    char score;

    while(1)
    {
        printf("Please Input No %d of char\n", i);
        scanf("%c",&score);
        getchar();

        //or

        scanf(" %c", &score);
        // don't need getchar() here.
        i++;
    }
    return 0;
}