在 C 中使用 scanf;%i 和 %d 在签名或未签名方面是否相同?

AKL*_*LMI 1 c unsigned signed scanf

在许多网站(如:GeeksForGeeks:在C语言%d和%I格式说明之间的区别TutorialsPoint:%d和%的C I格式说明之间的差异),他们说:在scanf; %d取整数值作为有符号十进制整数, %i取整数值作为十进制、十六进制或八进制类型的整数值。

使用“signed”这个词只为%d而不是为%i 我希望%i只接受无符号值,但 %i对负数工作得很好。那么%i没有人提到它的“签名”一词是怎么回事?

Joh*_*ger 6

仅对 %d 而不是 %i 使用“signed”一词我希望 %i 只接受无符号值,但 %i 对负数工作得很好。那么 %i 没有人提到“签名”这个词是怎么回事?

我不会说“没有人”。语言标准说%d

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

并为 %i

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

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

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