Почему функция scanf() считывает несколько целых чисел только с int? - C (СИ)
Формулировка задачи:
Привет всем, я абсолютный новичок в программировании и мне не понятно, почему функция scanf() при вводе двух целых чисел, не считывает либо первое, либо второе число, когда я объявляю тип данных в переменных не int. Например, когда я пишу char b, x; , то при вводе, допустим 1 2, printf выводит либо 0 2, либо 1 0. В тоже время, если я поменяю спецификатор на %c при char, то уже символы 1 2 выводятся спокойно. Я знаю, что char, как правило, используется для символов, так как диапазон его значений совпадает с АСКИ, но тем не менее для чисел его тоже можно использовать. Та же ситуация и с short.
#include <stdio.h> void main (void) { int b, x; printf("Enter the number:"); scanf("%d %d", &b, &x); printf("%d %d", b, x); return; }
Решение задачи: «Почему функция scanf() считывает несколько целых чисел только с int?»
textual
Листинг программы
//char* b = "А пофигу scanf все равно int скопирует, потому что %d"; //char b; //double b; int b; printf("Enter the number:"); scanf("%d", &b);//здесь вы считываете их адреса в памяти как int printf("%d", b);
Объяснение кода листинга программы
- Объявлены три переменные:
- b типа char* (строка символов)
- b типа double (число с плавающей точкой)
- b типа int (целое число)
- Выводится сообщение
Enter the number:
и происходит чтение ввода пользователя с помощью функции scanf(). - Форматный спецификатор
%d
указывает функции scanf() считывать целочисленное значение и сохранять его в переменную b типа int. - Значение, считанное функцией scanf(), затем выводится на экран с помощью функции printf().
- Значение, считанное функцией scanf(), не преобразуется в тип double или char*, поскольку в форматном спецификаторе указан тип int.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д