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

问题描述 投票:1回答:3

每次我在a之后设置b中的值,该值在a中重置为0。换句话说,随着代码的进行,无论我输入什么,它都将在第二个scanf函数之后始终为0。

编辑:我需要使用b作为文章的char类型,为了内存效率,所以我不能将b设置为int,但我需要在那里输入整数。

EDIT2:我需要在b中输入一个整数,例如输入:

1

2

从那时起,如果我

的printf( “%d”,一);

我得到0。

unsigned short a;
char b;
scanf("%hu",&a);
scanf("%d",&b);
c input char output scanf
3个回答
0
投票

使用char b;scanf("%d",&b);,scanf会将sizeof (int)字节写入b。 这会破坏其他记忆。 scanf("%hhd",&b);只会向b写一个字节。


1
投票

您正在使用错误的格式说明符

scanf("%d", &b);

它应该是

scanf("%c", &b);

但是,由于之前有一个scanf语句,缓冲区中仍然有换行符,要过滤掉它,你可以使用

scanf(" %c", &b);

大多数格式说明符会自动过滤掉前导空格,但%c%[]以及%n都没有。

从错误中不清楚格式说明符是错误还是变量类型。


1
投票

%d需要int

int b;

然后,您应该检查scanf()调用的返回值。这两个电话都返回1吗?

scanf()返回分配的输入项目数。由于您的两个调用都有一个%...,因此在两种情况下都必须返回1。)

© www.soinside.com 2019 - 2024. All rights reserved.