我想知道当转换说明符是%d
时,C中的scanf如何识别输入,这是一个字符串,例如,
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
printf("%d \n",x);
}
当我的输入是123456时,scanf如何将此字符串解释为整数?
另外,当scanf中的转换说明符为%hd
和%d
时,识别输入字符串之间的区别是什么?
答案 0 :(得分:2)
scanf
从stdin读取数据,并根据参数格式将它们存储到附加参数指向的位置。因此,当您为fotmat写入%d时,输入会将其解释为整数。
%d
代表整数(例如,大多数32位系统为4个字节)
%hd
代表短整数(整数大小的一半)
答案 1 :(得分:2)
scanf()
扫描格式字符串并从stdin
读取字节以尝试匹配格式字符串中指定的预期序列。格式%d
命令scanf()
,用于读取字节并从十进制表示中计算int
的值。为此,它遵循以下步骤:
isspace()
匹配的所有字节:' '
,'\t'
,'\r'
,'\n'
,'\v'
,{{1可能还有一些其他值。'\f'
或-
。将初始值设置为+
。0
到0
。计算这些数字所代表的值:对于每个数字,多计算到目前为止计算的值,并为ASCII添加数字9
的值。c - '0'
stdin
如果没有看到数字,请停止扫描过程并返回到目前为止正确存储的格式数(如果ungetc(c, stdin);
格式字符串中有多种格式)或scanf
完全不匹配。
如果看到至少一个数字,则将可选的负号应用于计算值,并将结果存储到作为EOF
的额外参数传递的指针。如果格式为scanf()
,则此指针为%hd
,因此在存储之前,该值将转换为short *
。
继续扫描格式字符串直到结束。