每次在 a 之后的 b 中设置一个值,该值都会在 a 中重置为 0 。 换句话说,随着代码的进行,无论我在 a 中输入什么,在第二个scanf函数之后它始终为 0 。
编辑:我需要使用b作为论文的char类型,以提高内存效率,因此我无法将b设置为int,但是我需要在其中输入整数。
EDIT2:我需要在b中输入一个整数,例如输入:
1
2
从那时开始,我
printf(“%d”,a);
我得到0。
unsigned short a;
char b;
scanf("%hu",&a);
scanf("%d",&b);
答案 0 :(得分:1)
%d
需要int
:
int b;
然后,您应该检查scanf()
调用的返回值。这两个电话都返回1
吗?
({scanf()
返回分配的输入项目数。由于两个呼叫都具有一个%...
,因此在两种情况下都必须返回1
。)
答案 1 :(得分:1)
您使用了错误的格式说明符
scanf("%d", &b);
应该是
scanf("%c", &b);
但是,由于前面有一个scanf
语句,因此缓冲区中仍然有换行符,可以使用它来过滤掉该行
scanf(" %c", &b);
大多数格式说明符会自动过滤掉开头的空格,但是%c
和%[]
和%n
不会。
从错误中不清楚格式说明符是错误还是变量类型。
答案 2 :(得分:0)
使用char b;
和scanf("%d",&b);
,scanf将sizeof (int)
个字节写入b。
这会破坏其他内存。
scanf("%hhd",&b);
只会将一个字节写入b。