AKL*_*LMI 1 c unsigned signed scanf
在许多网站(如:GeeksForGeeks:在C语言%d和%I格式说明之间的区别或TutorialsPoint:%d和%的C I格式说明之间的差异),他们说:在scanf;
%d取整数值作为有符号十进制整数,
%i取整数值作为十进制、十六进制或八进制类型的整数值。
使用“signed”这个词只为%d而不是为%i
我希望%i只接受无符号值,但
%i对负数工作得很好。那么%i没有人提到它的“签名”一词是怎么回事?
仅对 %d 而不是 %i 使用“signed”一词我希望 %i 只接受无符号值,但 %i 对负数工作得很好。那么 %i 没有人提到“签名”这个词是怎么回事?
我不会说“没有人”。语言标准说%d:
匹配一个可选的有符号十进制整数。[...] 相应的参数应该是一个指向有符号整数的指针。
并为 %i:
匹配一个可选的有符号整数。[...] 相应的参数应该是一个指向有符号整数的指针。
输入表示和相应指针参数的目标的符号性的语言对于两者是相同的。
我只能推测为什么任何网页作者描述的含义%i都比您希望的或标准的清晰度和精确度低。也许有些人%x对十六进制格式需要指向无符号整数的指针这一事实感到困惑。也许有些人是马虎的。也许有些人懒惰地依赖其他网页的不精确语言而不是主要来源。