如果C中scanf的输入与格式字符串不同怎么办?

电脑杂谈  发布时间:2020-06-16 13:27:51  来源:网络整理

scanf函数格式_scanf输出格式_printf格式输出12个0

我的代码如下:

scanf输出格式_scanf函数格式_printf格式输出12个0

#include <stdio.h>
int main(int argc, char **argv) {
    int i;
    scanf("%d", &i);
    printf("%d", i);
    return 0;
}

scanf输出格式_scanf函数格式_printf格式输出12个0

当我输入字符a时,输出似乎是一个随机数,经过多次执行后结果是不同的.

scanf输出格式_printf格式输出12个0_scanf函数格式

我阅读了“ C标准库”中scanf函数的实现,发现已考虑所有字母. 处理%d格式时scanf输出格式,将调用strtol函数进行转换scanf输出格式,而strtol实际上会调用_Stoul函数. 此函数首先处理加号和减号以及多余的空格,然后判断它是十六进制还是八进制. 最终的核心转换代码如下:

scanf函数格式_printf格式输出12个0_scanf输出格式

x = 0;
for (s2 = sc, (sd = memchr(digits, 
    tolower(*sc), base)) != NULL; ++sc) 
    {
    y = x;
    x = x*base + (sd - digits);
    }

digits数组的定义如下:

static const char digits[] = {                /* valid digits */
    "0123456789abcdefghijklmnopqrstuvwxyz"};

您可以看到此功能考虑了字母到数字的转换. 那么为什么在输入字符a之后为什么输出随机数呢?


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-247386-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...