我想知道当stream是stdin时getw()函数是如何工作的。
==我的简历==
在windows 10(Visual Studio 2017社区)中,
虚拟机Ubuntu 16.04,
虚拟机中的docker。
glibc版本是2.23,类似于unix

#include <stdio.h>

int main()
{
    int a = getw(stdin);
    printf("%c\n", a);

    return 0;
}

当我按键盘上的“3”键,然后输入时,我希望输入的字符与我输入的相同。
但似乎a.out二进制文件需要另一个输入。
当我按“3”、[回车]、“4”时,它输出3
当我按“34”时,它需要另一个输入。
当我按下'123'时,它输出1。

最佳答案

getw并不真正适合标准交互输入。它用于从二进制数据中读取整数(并且出于兼容目的而提供,现在每个人都使用fread)。
在您的系统中int需要4个字节,这就是函数读取4个字符(包括返回aka linefeed)然后返回结果的原因。
但由于格式说明符错误(%c而不是%d),您打印的结果被截断
例如,如果我输入(返回):

aaa

我得到一个值a,它取决于机器的端部(和int的大小,但假设是4)
如果我使用%x来打印它,它会打印
0xa616161

我们将其识别为linefeed加上3个a字符(由于我的小endian机器而恢复了字节顺序)。
如果要从用户输入扫描整数,只需使用scanf("%d",&a);

关于c - 当流为stdin时,getw()函数如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57425170/

10-12 02:12