0

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

#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
4

3 回答 3

3

你得到 10010 的原因是你按 'd' 然后按 'return'。

将您的 printf 格式更改为 "%d\n" 以更轻松地对其进行可视化。

修复可能是:

while ((x = getchar()) != '\n' )
{
}
于 2013-02-01T12:52:11.397 回答
2

这是因为您正在截断返回值。

getchar()返回int,查看任何文档

必须这样,因为EOF不允许与任何角色“碰撞”。由于int大于char,这允许EOF在可表示为的数字空间内的某个位置int,同时在的集合之外char

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

  • 100 是小写字母的 ASCII 码'd'
  • 10 是换行的 ASCII'\n'

你应该用换行符打印:printf("%d\n", x);让这些在他们自己的行上。

于 2013-02-01T12:45:47.287 回答
1

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

编辑:

getchar()要工作,您需要按 Enter 键,即\n也会被打印出来。

于 2013-02-01T12:47:40.620 回答