(C)Scanf-输入每次变为0

时间:2019-03-03 08:49:16

标签: c input char output scanf

每次在 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);

3 个答案:

答案 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。