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

using scanf in C; are both %i and %d the same in the matter of being signed or unsigned?

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

只对 %d 使用“签名”一词,而不是 %i 我希望 %i 只接受无符号值 但 %i 对负数非常好。 那么%i为什么没人提到“签名”这个词呢?

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

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

它允许“0x123”,而 "%d" 只看到 0 并在 x 处停止。

Using the word "signed" only for %d and not for %i I expected %i to accept unsigned values only but %i works perfectly fine with negative numbers. So what is it about %i that no one mentions the word "signed" for it?

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

Matches an optionally signed decimal integer. [...] The corresponding argument shall be a pointer to signed integer.

%i:

Matches an optionally signed integer. [...] The corresponding argument shall be a pointer to signed integer.

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

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