在C中使用scanf;在签名或未签名的问题上,%i和%d都一样吗?

问题描述

在许多网站(例如:GeeksForGeeks: Difference between %d and %i format specifier in C languageTutorialsPoint: Difference between %d and %i format specifier in C)中,他们说: 在scanf中; %d将整数值用作带符号的十进制整数,并且 %i将整数值作为具有十进制,十六进制或八进制类型的整数值。

仅对%d而不是%i使用“签名”一词 我希望%i仅接受无符号值 但 %i可以很好地处理负数。 那么,%i没人提到“签名”一词又是什么呢?

解决方法

仅对%d而不是对%i使用“签名”一词,我希望%i 仅接受无符号值,但%i可以很好地使用负数 数字。那么%i的原因是没有人提到“签名”一词 为此吗?

我不会说“没人”。语言标准针对%d说:

匹配一个可选的带符号十进制整数。 [...]相应的参数应为指向有符号整数的指针。

%i

匹配一个可选的带符号整数。 [...]相应的参数应为指向有符号整数的指针。

输入表示形式和相应指针参数的目标符号周围的语言对于这两者是相同的。

我只能推测为什么任何网页作者以比您所希望的或标准的清晰度和准确性低的方式描述%i的含义。对于十六进制格式的%x需要一个指向无符号整数的指针这一事实可能使某些人感到困惑。也许有些草率。也许有些人懒惰地依赖其他网页的不精确语言,而不是主要来源。

,

“整数值,是带有十进制,十六进制或八进制类型的整数值。” ->不,不是 type ,而是带有十进制,八进制或十六进制的文本前缀。

"%i"的匹配类型仍然是指向int的指针。

它允许“ 0x123”,而"%d"仅看到0并停在x

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...