scanf("%d",&i)不会读取超过10位的数字

2 c io

我试图使用%d格式修饰符读取任意大小的整数scanf().当输入整数具有10个或更少的数字时,此操作将按预期执行.但是,当我尝试输入一个11位或更多位数的数字时,scanf("%d", &number)表现得很奇怪.它似乎返回负值.例如,12345678901读取时,分配的值number也是-539222987.

有没有人知道为什么会这样?也许读取整数的大小有限制scanf("%d", &i)

谢谢!

Pho*_*reo 6

在大多数情况下C,int大致 32位,间这将仅存储号码2147483647-2147483648.超出限制范围的任何数字都不受支持.

如果你想存储更长的数字,你可以查看long long哪些通常是 64位,并可以存储9223372036854775807和之间-9223372036854775808.

您也可以创建类型,unsigned以便它不会存储负数并将所有值分配给正确的数字.

如果要对数据类型的位数进行绝对控制,可以使用<inttypes.h>.int64_t将为您提供64位的signed值,uint64_t并为您提供64位的unsigned值.

您可以查看大多数数据类型的限制 <limits.h>

  • 注意:`long`在_some_系统上是64位.32位系统和Windows系统通常有32位长,不假设`long`保证64位.如果你需要64位值,`#include <inttypes.h>`并使用`int64_t` /`uint64_t`(或`intmax_t` /`uintmax_t`)和匹配的`scanf`格式定义(`SCNd64` /`SCNu64 `/`SCNdMAX` /`SCNuMAX`). (2认同)