【发布时间】:2013-08-21 18:57:07
【问题描述】:
您好,我现在正在学习 C 语言,但在练习我阅读的书时遇到了一点问题。我的代码是这样的:
#include<stdio.h>
int main()
{
unsigned char one=0;
unsigned char two=0;
printf("Quantity 1 = ");
scanf("%d",&one);
printf("Quantity 2 = ");
scanf("%d",&two);
printf("The value is %d",one);
return 0;
}
为什么当我试图查看one 的值时,会出现初始值而不是scanf 之后的值?
【问题讨论】:
-
欢迎来到 SO。很好的例子展示了你的问题。
-
正如下面@Shade 给出的链接,如果你想使用
unsigned char作为变量类型,你可以使用%c或%hhu格式说明符 -
这里的根本原因与When using and int to read character, why is the value 4096 + ascii 中解决的问题相同。
scanf可以存储值,但由于unsigned char与int的大小不同(%d所期望的),scanf接收的值存储在printf所期望的位置。另见scanf and keeping char as an integer。 -
@nishant
fscanf()长度修饰符:C11 7.21.6.2 11 "hh 指定后面的 d、i、o、u、x、X 或 n 转换说明符适用于类型为指针的参数为有符号字符或无符号字符。”fprintf()类似。我希望可以减少疑虑。 -
@nishant:对于
unsigned char,如果您将unsigned char视为一个小整数,请使用%hhu,因此"42"为您提供(unsigned char(42)。 (仅供参考,在大多数英语世界中,“怀疑”不是“问题”的同义词;“怀疑”这个词意味着不相信。)