C 为什么下面的代码一直在打印值10?

C 为什么下面的代码一直在打印值10?,c,loops,C,Loops,我要做一个循环,如果我输入字母表,那么ascii值就会出来。除非我键入“0” 但结果如下。结果下面是我编写的代码。值10从何而来 按任意字母 A. 65 按任意字母 10 按任意字母 char aski; while(1) { printf("Press any Alphabet\n"); scanf("%c", &aski); if (aski == '0') break; else

我要做一个循环,如果我输入字母表,那么ascii值就会出来。除非我键入“0”

但结果如下。结果下面是我编写的代码。值10从何而来

按任意字母 A. 65 按任意字母 10 按任意字母

char aski;
while(1) 
{
    printf("Press any Alphabet\n");
    scanf("%c", &aski);
    if (aski == '0') 
        break;
    else
        printf("%d\n", aski);
}

按enter键时,实际上是在创建一个\n(新行),该字符的值为10,这就是正在打印的内容

char c = '\n';
printf("%d",c);
结果会给你10分

试试这个

char aski;
scanf("%c ", &aski);

请注意%c后面的空格,这确保读取所有输入的空白。

scanf
读取额外的
\n
\n
的ASCII值为10。这就是你得到10分的原因。我建议您使用
getchar()
阅读额外的
\n

#include <stdio.h>
int main()
{
    char aski;
    while (1)
    {
        printf("Press any Alphabet\n");
        scanf("%c", &aski);
        getchar();
        if (aski == '0')
            break;
        else
            printf("%d\n", aski);
    }

    return 0;
}

PS:我在输入b之后停止了执行。

10
恰好是换行符
'\n'
的ASCII编码。现在想一想为什么您可能会将换行作为输入…请参见此。
scanf(“%c”&aski)这不是好的做法。请参阅上面的链接。空格应该放在
%c
之前,而不是之后,否则它将等待额外的输入。你们说得对,我这端的大脑会快速放屁:)
Press any Alphabet
a
97
Press any Alphabet
b
98