使用getchar()无法获得正确的ASCII值

时间:2013-02-01 12:44:16

标签: c

这可能是一个简单的修正,因为该程序超短但请帮助我理解为什么我会得到奇怪的输出:

#include <stdio.h>

int main(void)

{
    char x;
    printf("please enter a word, and ctrl + d to see the resault\n");

    while ((x = getchar()) != EOF)
    {
        printf("%d", x);
    }


    return 0;
}

intput: 'd'
output: 10010

3 个答案:

答案 0 :(得分:3)

你获得10010的原因是因为你按'd'后跟'return'。

将您的printf格式更改为“%d \ n”,以便更容易地将其显示。

修复可能是:

while ((x = getchar()) != '\n' )
{
}

答案 1 :(得分:2)

这是因为你要截断返回值。

getchar()返回int,请查看any documentation

必须这样,因为EOF不能与任何角色“碰撞”。由于int大于char,因此EOF允许int位于可表示为char的数字空间内,而该集合'd'

正如user876651所解释的那样,输出“10010”实际上是两个十进制整数,彼此相邻:

  • 100是小写字母'\n'
  • 的ASCII代码
  • 10是换行符printf("%d\n", x);
  • 的ASCII

您应该使用换行符{{1}}进行打印,以便在自己的行上进行打印。

答案 2 :(得分:1)

char x更改为int x,因为getchar()返回int,这就是您要打印的内容。

编辑:

getchar()工作,您需要按Enter键\n,这也将被打印。