如何解决在C中使用scanf;在签名或未签名的问题上,%i和%d都一样吗?
在许多网站(例如:GeeksForGeeks: Difference between %d and %i format specifier in C language或TutorialsPoint: 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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。