我想知道当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/