Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用getchar()获取正确的ASCII值_C - Fatal编程技术网

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

无法使用getchar()获取正确的ASCII值,c,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); } retur

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

#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
#包括
内部主(空)
{
字符x;
printf(“请输入一个单词,并按住ctrl+d键以查看重新结果\n”);
而((x=getchar())!=EOF)
{
printf(“%d”,x);
}
返回0;
}
输入:“d”
产出:10010

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

getchar()
返回
int
,查看

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

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

  • 100是小写字母
    'd'
  • 10是换行符
    '\n'

您应该使用换行符打印:
printf(“%d\n”,x),以使它们在自己的行上。

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

getchar()
返回
int
,查看

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

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

  • 100是小写字母
    'd'
  • 10是换行符
    '\n'

您应该使用换行符打印:
printf(“%d\n”,x)char x
更改为
int x
,因为
getchar()
返回
int
,这就是您要打印的内容

编辑:


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

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

编辑:


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

您得到10010的原因是您正在按“d”键,然后按“return”

将printf格式更改为“%d\n”,以便更轻松地将其可视化

解决方案可以是:

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

您获得10010的原因是,您正在按“d”,然后按“return”

将printf格式更改为“%d\n”,以便更轻松地将其可视化

解决方案可以是:

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

是EOF的问题吗?是EOF的问题吗?是的,它解决了问题。现在我只需要添加换行符的规格,因为它的打印10也低于字符的值。谢谢@用户876651对,它解决了问题。现在我只需要添加换行符的规格,因为它的打印10也低于字符的值。谢谢@user876651如果您尝试运行代码,您将看到这不是用户遇到的问题。输出为10010,因为他们将返回键(ascii 10)捕获为输入。如果您尝试运行代码,您将看到这不是用户遇到的问题。当他们捕获返回键(ascii 10)作为输入时,输出为10010