(C) Scanf - ввод получает 0 каждый раз - PullRequest
0 голосов
/ 03 марта 2019

Каждый раз, когда я устанавливаю значение в b после a , значение сбрасывается на 0 в a .Другими словами, поскольку код идет, независимо от того, что я ввожу в a , он всегда будет 0 после второй функции scanf.

РЕДАКТИРОВАТЬ: мне нужноиспользуйте b в качестве типа символа для эссе, для эффективности памяти, поэтому я не могу установить b в int, но мне нужно ввести туда целое число.

EDIT2: мне нужно ввести целое число в b, примердля ввода:

1

2

с этой точки, если i

printf ("% d", a);

я получаю 0.

unsigned short a;
char b;
scanf("%hu",&a);
scanf("%d",&b);

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Вы используете неправильный спецификатор формата с

scanf("%d", &b);

Это должно быть

scanf("%c", &b);

Однако, поскольку есть предыдущий оператор scanf, в буфере все еще есть новая строкаи чтобы отфильтровать это, вы можете использовать

scanf(" %c", &b);

Большинство спецификаторов формата автоматически отфильтровывают начальные пробелы, но %c и %[] и %n не делают.

Неясноиз-за ошибки, ошибочен ли спецификатор формата или тип переменной.

0 голосов
/ 03 марта 2019

с char b; и scanf("%d",&b);, scanf записывает sizeof (int) байтов в b.
Это повредит другую память.
scanf("%hhd",&b); будет записывать только один байт в b.

0 голосов
/ 03 марта 2019

%d требует int:

int b;

Затем вы должны проверить значение возврата ваших scanf() вызовов.Оба вызова возвращают 1?

(scanf() возвращает количество назначенных элементов ввода. Поскольку оба ваших вызова имеют один %..., вы должны вернуть 1 в обоих случаях.)

...