c-scanf如何将输入(字符串)识别为整数



我想知道当转换说明符为%d时,C中的scanf如何将字符串输入识别为int。例如,

#include <stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    printf("%d n",x);
}

当我的输入是123456时,scanf如何将此字符串解释为整数?此外,当scanf中的转换说明符是%hd%d时,识别输入字符串有什么区别?

scanf()扫描格式字符串并从stdin读取字节,以尝试匹配格式字符串中指定的预期序列。%d的格式命令scanf()读取字节并根据十进制表示计算int的值。为此,它遵循以下步骤:

  • 首先读取并丢弃与isspace()匹配的任何字节:' ''t''r''n''v''f'以及可能的一些其他值
  • 然后读取一个可选符号:CCD_ 16或CCD_。将初始值设置为CCD_ 18
  • 然后重复读取与数字CCD_ 19至CCD_。计算由这些数字表示的值:对于每个数字,将迄今为止计算的值相乘,并将该数字的值c - '0'(ASCII)相加
  • 只要读取的字节不是数字,就停止,并用ungetc(c, stdin);将该字节推回stdin

如果没有看到数字,请停止扫描过程,并返回到目前为止正确存储的格式数(如果scanf格式字符串中有多个格式),如果完全不匹配,则返回EOF

如果至少看到一个数字,则对计算值应用可选的负号,并将结果存储到作为额外参数传递给scanf()的指针。如果格式为%hd,则该指针为short *,因此在存储之前,该值将转换为short

继续扫描格式字符串,直到其结束。

scanf从stdin读取数据,并根据参数格式将数据存储到附加参数所指向的位置。因此,当您为输入的fotmat写入%d时,它被解释为整数。

%d代表整数(例如,对于大多数32位系统为4字节)

%hd代表短整数(整数大小的一半)

相关内容

  • 没有找到相关文章

最新更新