Как в си ввести число с клавиатуры в программу

Теги: Форматированный ввод, форматированный вывод, printf, scanf, fgets, getch, строка формата, спецификатор формата, флаги, управляющие символы.

Форматированный вывод

Сегодня мы рассмотрим две важные функции форматированного ввода и вывода. Устройство и работу этих функций полностью можно понять только после изучения работы с указателями и функций с переменным числом параметров. Но пользоваться этими функциями необходимо уже сейчас, так что некоторые моменты придётся пропустить.

Функция форматированного вывода printf получает в качестве аргументов строку формат и аргументы, которые необходимо вывести в соответствии с форматом, и возвращает число выведенных символов. В случае ошибки возвращает отрицательное значение и устанавливает значение ferror. Если произошло несколько ошибок, errno равно EILSEQ.
int printf (const char * format, . );

#include #include void main() < //функция не получает никаких аргументов, кроме строки printf(«Hello world»); getch(); >

Функция проходит по строке и заменяет первое вхождение % на первый аргумент, второе вхождение % на второй аргумент и т.д. Далее мы будем просто рассматривать список флагов и примеры использования.

Программирование на Си — Урок 5 — ввод с клавиатуры scanf, пишем калькулятор

Общий синтаксис спецификатора формата
%[флаги][ширина][.точность][длина]спецификатор
Спецификатор – это самый важный компонент. Он определяет тип переменной и способ её вывода.

Таб. 1 Спецификатор типа.

Спецификатор Что хотим вывести Пример
d или i Целое со знаком в в десятичном виде 392
u Целое без знака в десятичном виде 7235
o Беззнаковое в восьмеричном виде 657
x Беззнаковое целое в шестнадцатеричном виде 7fa
X Беззнаковое целое в шестнадцатеричном виде, верхний регистр 7FA
f или F Число с плавающей точкой 3.4563745
e Экспоненциальная форма для числа с плавающей точкой 3.1234e+3
E Экспоненциальная форма для числа с плавающей точкой, верхний регистр 3.1234E+3
g Кратчайшее из представлений форматов f и e 3.12
G Кратчайшее из представлений форматов F и E 3.12
a Шестнадцатеричное представление числа с плавающей точкой -0xc.90fep-2
A Шестнадцатеричное представление числа с плавающей точкой, верхний регистр -0xc.90FEP-2
c Буква a
s Строка (нуль-терминированный массив букв) Hello World
p Адрес указателя b8000000
n Ничего не печатает. Аргументом должен быть указатель на signed int. По этому адресу будет сохранено количество букв, которое было выведено до встречи %n
% Два идущих друг за другом процента выводят знак процента %

Ввод данных. Cin. Пример. Синтаксис. C++ для начинающих. Урок #7.

#include #include void main()

Строка формата также может включать в себя следующие необязательные суб-спецификаторы: флаг, ширина, .точность и модификатор (именно в таком порядке).

Таб. 2 Флаги.

Флаг Описание
Выключка влево на заданное шириной значение
+ Явно указывать знак у числа, даже для положительных чисел
(пробел) Если знак не будет выведен, то вставляет пробел перед выводимым числом
# Когда используется вместе с o, x или X, вставляет перед числом 0, 0x или 0X
Когда используется со спецификаторами a, A, e, E, f, F, g или G, вставляет десятичную точку, даже если после неё нет десятичных знаков.
Вставляет нули, когда объявлен спецификатор ширины
Таб. 3 Ширина. Ширина Описание
(число) Минимальное количество знаков, которое необходимо вывести. Если в числе меньше знаков, то вставляет пробелы (или нули)
* Ширина не указана в строке формата, она передаётся отдельно в виде аргумента, который должен предшествовать выводимому числу
Таб. 4 Точность. .Точность Описание
.число Для спецификаторов целых (d, i, o, u, x, X) точность определяет минимальное количество знаков, которое необходимо вывести. Если значение короче, то выводятся нули перед числом. Значение не обрезается, даже если оно длиннее. Точночть 0 означает, что для значения 0 ничего не выводится.
Для спецификаторов чисел с плавающей точкой (a, A, e, E, f, F) это число знаков, которые необходимо вывести после десятичной точки (по умолчанию 6).
Для g и G — это число значащих разрядов, которые необходимо вывести.
Для s — выводится указанное число символов. По умолчанию выводятся все символы до первого нулевого.
Если число не стоит, то по умолчанию точность равна 0
.* Точность не указана в строке формата, она передаётся отдельно в виде аргумента, который должен предшествовать выводимому числу

#include #include void main()

Суб-спецификатор длины изменяет длину типа. В случае, если длина не совпадает с типом, по возможности происходит преобразование до нужного типа.

Таб. 5 Длина.

спецификаторы Длина d, i u o x X f F e E g G a A c s p n
(none) int unsigned int double int char* void* int*
hh signed char unsigned char signed char*
h short int unsigned short int short int*
l long int unsigned long int wint_t wchar_t* long int*
ll long long int unsigned long long int long long int*
j intmax_t uintmax_t intmax_t*
z size_t size_t size_t*
t ptrdiff_t ptrdiff_t ptrdiff_t*
L long double
Читайте также:
Как работать в программе photoshop cs5

#include #include void main()

Форматированный ввод

Рассмотрим форматированный ввод функцией scanf.
int scanf(const char*, . )
Функция принимает строку формата ввода (она похожа на строку формата printf) и адреса, по которым необходимо записать считанные данные. Возвращает количество успешно проинициализированных аргументов.
Формат спецификатора ввода
%[*][ширина][длинна]спецификатор

Таб. 6 Спецификатор типа.

Спецификатор Описание Выбранные символы
i, u Целые Произвольное число цифр (0-9), возможно, начинающихся с + или -. Если число начинается с 0, то считывается в восьмеричном формате, если с 0x, то в шестнадцатеричном.
d Десятичное целое Произвольное число цифр (0-9), возможно, начинающихся с + или -.
o восьмеричное целое Произвольное число цифр (0-7), возможно, начинающихся с + или -.
x Шестнадцатеричное целое Произвольное число цифр (0-F), возможно, начинающихся с + или — и префикса 0x или 0X.
f, e, g Число с плавающей точкой Число, состоящее из набора цифр 0-9, возможно с десятичным разделителем (точкой). Возможно также представление в экспоненциальной форме. C99 позволяет также вводить число в шестнадцатеричном формате.
a
c Символ Если ширина не передана, то считывает один символ. Если ширина передана, то считывает нужное количество символов и размещает их в массиве БЕЗ терминального символа на конце.
s Строка Считывает все не пробельные символы. Если указана ширина, то не более n символов. Ставит на место n+1 символа терминальный.
p Адрес указателя Последовательность символов, трактуемая как адрес указателя. Формат зависит от реализации, но совпадает с тем, как выводит printf с ключом p
[символы] Множество символов Считывает только те символы, которые записаны в квадратных скобках, С99
[^символы] Множество символов Считывает только те символы, которые не указаны в квадратных скобках, С99
n Ничего не считывает Сохраняет число уже считанных символов по указанному адресу

Как и в printf, ширина, заданная символом * ожидает аргумента, который будт задавать ширину. Флаг длина совпадает с таким флагом функции printf.

#include #include void main() < int year, month, day; char buffer[128]; int count; //Требует форматированного ввода, например 2013:12:12 printf(«Enter data like x:x:x = «); scanf(«%d:%d:%d», month, printf(«year = %dnmonth = %d, day = %dn», year, month, day); //Считываем строку, не более 127 символов. При считывании в массив писать Enter string = «); scanf(«%127s», buffer); printf(«%s», buffer); getch(); >

Кроме функций scanf и printf есть ещё ряд функций, которые позволяют получать вводимые данные

int getch() [aka _getch(), getchar()] — возвращает введённый символ, при этом не выводит его на консоль.

#include #include void main() < char c = 0; do < c = getch(); printf(«%c», c); >while (c != ‘q’); >

char * fgets ( char * str, int num, FILE * stream ) — функция позволяет считывать строку с пробельными символами. Несмотря на то, что она работает с файлом, можно с её помощью считывать и из стандартного потока ввода. Её преимущество относительно gets в том, что она позволяет указать максимальный размер считываемой строки и заканчивает строку терминальным символом.

#include #include #include void main() < char buffer[128]; //Считываем из стандартного потока ввода fgets(buffer, 127, stdin); printf(«%s», buffer); //Этим можно заменить ожидание ввода символа scanf(«1»); >

Это не полный набор различных функций символьного ввода и вывода. Таких функций море, но очень многие из них небезопасны, поэтому перед использованием внимательно читайте документацию.

Непечатные символы

В си определён ряд символов, которые не выводятся на печать, но позволяют производить форматирование вывода. Эти символы можно задавать в виде численных значений, либо в виде эскейп-последовательностей: символа, экранированного обратным слешем.

Таб. 7 Управляющие последовательности.

Последовательность Числовое значение Результат
a 0x07 Звуковой сигнал
b 0x08 Перевод каретки на одно значение назад
f 0x0c Новая страница
n 0x0a Перевод строки, новая строка
r 0x0d Возврат каретки
t 0x09 Табуляция
v 0x0b Вертикальная табуляция
« 0x22 Двойная кавычка
\ 0x5с Обратный слеш

#include #include void main() < char backspace = 0x08; //Выводим с использованием символа переноса строки printf(«HellonWorldn»); //Выводим символ переноса строки через его значение printf(«Hello%cWorldn», 0x0a); //»Выводим» сигнал printf(«a»); //Выводим сигнал, как символ printf(«%c», ‘a’); //Выводим сигнал через шестнадцатеричное значение printf(«%c», 0x07); printf(«This is sparta. bb%c», backspace); printf(» «); getch(); >

email

Всё ещё не понятно? – пиши вопросы на ящик

Источник: learnc.info

Как ввести переменную в c с клавиатуры

Ввод данных с клавиатуры осуществляется с помощью функции input(). После выполнения данной функции программа ожидает ввода данных и после нажатия «Enter» записывает их в переменную или возвращает результат на экран.

Существуют 4 вида ввода:

Это означает, что в переменную a будет записано целое число (int — integer).

Чтобы программа начала работать, можно нажать F5 или Run Module (после этого Python предложит ее сохранить, так как он не может работать с несохраненными программами):

После этого появится примерно такое окно (окна могут различаться в зависимости от процессора, операционной системы и версии Python):

Читайте также:
Программа безопасности игры устарела игра будет закрыта через 10 сек

На строке, идущей после двух наборов стрелочек (в данном случае на шестой) будет мигающий курсор. Вам надо будет ввести любое целое число и нажать «Enter». После этого программа начнет работать и выведет введенное число.

«float» означает ввод действительного числа. При вводе нецелого числа Вы должны разделить целую и дробную часть точкой. Например, «34.75»

«str» означает ввод строки. Например, «qwerty» или «Hello, Python!» (str — string).

Это означает ввод любых двух и более элементов. Скобки после «split» используются для того, чтобы задать, чем будут разделяться переменные (по умолчанию пробел). Например:

С помощью этих функций можно преобразовать действительное число в дробное (при этом чсло округляется в меньшую сторону), число в строку и так далее:

Ввод данных с клавиатуры в Си

Для форматированного ввода данных в Си используется оператор scanf

Чтобы ввести записать информацию в переменную с клавиатуры в си с помощью оператора scanf необходимо указать сообщение и переменную, в которую будет записываться с клавиатуры з начение

scanf (“формат ввода”,a); // ввод с клавиатуры значения для целочисленной переменной a
Пример программы 3. Программа в си запрашивает ввод с клавиатуры двух целых чисел, выводит их сумму на экран
#include
#include
main()
int a,b,c;
printf(«Введите первое целое числоn»);
scanf(«%d», // ввод переменной a с клавиатуры
printf(«Введите второе целое числоn»);
scanf(«%d», // ввод переменной b с клавиатуры
c=a+b; // присваиваем переменной с значение a+b
printf(«%d+%d= %dn», a,b,c); // форматированный вывод выражения a+b =c
getch(); // ждем нажатия кнопки
>
Для ввода строки в си с помощью оператора scanf необходимо объявить строку и считать ее с помощью scanf()
char имя строки[ длина строки];
scanf(“%s”, имя строки);
Пример программы 4. Программа запрашивает ввод имени и отчества с клавиатуры и выводит на экран приветствие с обращением по имени и отчеству
#include
#include
main()
char n[50];// объявляем строковую переменную n для имени
char sn[50];// объявляем строковую переменную sn для отчества
printf(«Как Ваше имя ?n»);
scanf(«%s», n); // ввод строки n имени
printf(«Как Ваше отчество ?n»);
scanf(«%s», sn);// ввод строки sn отчества
printf(«Здравствуйте, %s %s!n», n, sn); // форматированный вывод Здравствуйте, n sn!
getch();
>

Вернуться к содержанию Перейти к следующему уроку Условия в Си.

Как ввести переменную с клавиатуры?

Ребята, как ввести кол-во эллементов одномерного массива с клавиатуры?
Private Sub Command1_Click() Randomize n = Val(InputBox(«введите кол-во эллементов»)) a(i) =.

Ввести год с клавиатуры И вывести является ли он высокосным
Помогите, пожалуйста!Нужно ввести год с клавиатуры. И вывести является ли он высокосным (год.

Как ввести числовую переменную с клавиатуры?
Как ввести числовую переменную в SFML с клавиатуры в работающей проге ? Добавлено через 15.

Как ввести текстовую переменную в С++ с клавиатуры
Я ввожу так char *str1 = «la»; Все отлично вводиться ! Но мне нужно ввести с клавиатуры, помогите.

  1. Как поставить кавычки лапки на клавиатуре
  2. Как поставить палочку на клавиатуре
  3. Как поставить точку на клавиатуре компьютера при английской раскладке
  4. Как почистить клавиатуру на ноутбуке

Источник: www.kak-zarabotat-v-internete.ru

Ввод данных в языке Си. Функция scanf

Основная задача этого шага научиться получить данные от пользователя.

Для этого можно использовать функцию scanf . Она, так же как и функция printf , описана в заголовочном файле stdio.h . Т.к. он у нас уже подключен в первой строке, то мы можем свободно использовать функцию scanf в своей программе.

Чтобы считать данные, которые ввёл пользователь, и сохранить их в переменную, нужно вызвать функцию scanf со следующими параметрами:

Общий синтаксис функции scanf

Рис.1. Общий синтаксис функции scanf.

В двойных кавычках указывается спецификатор формата. В зависимости от того в какую переменную мы собираемся сохранять введенное значение, необходимо использовать соответствующий спецификатор формата.

Основные спецификаторы формата:

%d — целые числа
%f — вещественное число типа float
%lf — вещественное число типа double (обозначение lf от long float)
%c — символ

Обратите внимание, что в функции scanf для типов float и double используются различные спецификаторы формата.

После формат-строки нужно указать адрес переменной, в которую нужно сохранить данные. Чтобы указать адрес переменной достаточно перед её именем записать знак int a, b, res; scanf(«%d», // считываем целое значение в переменную a scanf(«%d», // считываем целое значение в переменную b res = a + b; printf(«%d + %d = %dn», a, b, res); return 0; >

Скомпилируйте и запустите эту программу. После того, как программа запущена она будет ждать пока вы введёте данные. Мы с вами знаем какие данные нужно вводить, т.к. мы писали эту программу.

Для других пользователей, которые код программы не увидят, хорошо бы вывести на экран подсказку, какие данные нужно ввести. Посмотрите как это реализовано в следующем примере.

Читайте также:
Программа действий определяющая развитие фирмы и соответствующее ему управление это

Эта программа будет полезна тем, кто следит за своим здоровьем. Данная программа подсчитывает уроверь базового обмена веществ по формуле Миффлина-Сан Жеора исходя из данных, которые вы введёте (возраст, рост и вес).

#include int main(void) < int age, height, weight; double bov_m, bov_f; printf(«Vash vozrast?(god)n»); scanf(«%d», // считываем целое значение в переменную age printf(«Vash rost?(cm)n»); scanf(«%d», // считываем значение в переменную height printf(«Vash ves?(kg)n»); scanf(«%d», // считываем значение в переменную weight bov_m = 10*weight + 6.25*height — 5*age + 5; bov_f = 10*weight + 6.25*height — 5*age — 161; printf(«| BMR |n»); printf(«| male | female |n»); printf(«|%8.2f|%8.2f|n»,bov_m, bov_f); return 0; >

На самом деле, функция scanf – функция форматного ввода. Она устроена чуть ли не сложнее, чем printf . Но рассказывать новичку об особенностях её работы значит понапрасну грузить его лишней информацией. На данном этапе вам будет достаточно и этих знаний, а когда появится необходимость использовать что-то большее, вы с этим сможете сами разобраться. А может и я в каком-нибудь уроке расскажу.

Сохрани в закладки или поддержи проект.

Практика

Решите предложенные задачи. Для удобства работы сразу переходите в полноэкранный режим

Исследовательские задачи для хакеров:

  1. Попробуйте удалить в программе Листинг 2 символ , хотя в вводе scanf он необходим?
    Заранее большое спасибо

    KaDeaT

    Добрый день.
    Это одна из особенностей того, как устроены функции в языке Си.

    Функции не могут изменять те переменные, которые им передаются. Чтобы они могли изменять эти переменные, надо им передавать не переменную, а адрес в памяти где хранится переменная. Поэтому для printf, которая просто выводит переменную на экран не изменяя её, нужно передавать только имя переменной, а для scanf, которая записывает в переменную данные, тем самым изменяя её, нужно передавать адрес в памяти.
    Чтобы получить адрес переменной, нужно использовать операцию но уж в январе 2018 pdf-версия будет у каждого урока» это цитата из комментария))
    Я не могу найти эту кнопку.

    KaDeaT

    Дела и заботы, к сожалению, помешали сбыться этому плану. Никак не могу взяться за эту работу. Но возьмусь летом, а может даже раньше.

    Farid 28.06.2018 в 17:09
    ya reshil vse zadaci,pishu kuski sekretnogo klyuca,no mne pishut neverniy klyuc.mojete proveryat?
    KaDeaT
    Проверил, всё работает правильно. Может быть вы не удалили пробелы? Пробелов быть не должно.

    Виталий 07.08.2018 в 04:48

    * а когда появится необходимость использовать что-то большее, вы с этими сможете сами разобраться — очепятка ~вы с ЭТИМ сможете~

    KaDeaT
    Спасибо. Поправил!
    Samvel 26.08.2018 в 07:40
    1 + -365906032 = 803628530
    Eclipse
    KaDeaT
    Николай Евсюков 27.08.2018 в 18:26

    1. CRT: unhandled exception (main) — terminating
    *** Process returned 255 ***

    2. float f;
    double d;
    scanf(«%lf»,
    scanf(«%f»,
    printf(«%f %f», f, d);

    Ввод:
    1.1
    2.2
    Вывод:
    -0.000000 0.000000

    P.S. IDE Pelles C.

    KaDeaT
    Krowka_v_Kartowke 05.11.2018 в 23:59

    Здравствуйте, нашел опечатку. «Скомпилируйте и запустить(*те) эту программу.». Урок отличный, спасибо Вам.

    KaDeaT
    Спасибо за внимательность! Поправил.
    не_робот_я 17.02.2019 в 11:27

    хакерские задачи:
    1. сегфолт (ошибка сегментации)
    2. Xcode ругается так «Format specifies type ‘float *’ but the argument has type ‘double *'», а онлайн компилятор onlinegdb.com не ругается, но результат выдаёт нулевой.

    KaDeaT
    Estel 05.03.2019 в 15:16

    Отличные уроки, большое спасибо!

    по заданию 1:
    Variable ‘dollars’ is uninitialized when used here
    Initialize the variable ‘dollars’ to silence this warning
    по заданию 2:
    Format specifies type ‘float *’ but the argument has type ‘double *’
    Format specifies type ‘double *’ but the argument has type ‘float *’
    (Xcode)

    KaDeaT
    Максим 14.04.2019 в 15:38

    Использую Dev C++.
    1. Если удалить адрес из какой-либо переменной, она на выводится на экран, при нажатии на клавишу.
    2. Если использовать спецификатор %f для типа double, выводимый результат будет 0.00000+0.00000=0.00000.
    3. Если использовать спецификатор %lf для типа floai, второе слагаемое будет всегда 0.00000, а первое будет выдавать неверно введенные данные.

    pchristi 02.07.2019 в 08:35

    Поэкспериментировал со второй хакерской задачкой. Вводил число 3.14 потом 1.12;
    В первом случае при %f и double в printf был такой результат:
    1) 512181179925964090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000.000000
    2) 512181179185108140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000.000000
    Во втором случае, при %lf и типе float вышло так:
    1) 126443839488.000000
    2) 0.000000

    Александр 30.09.2019 в 12:27

    Не одобряю примеры на данной странице, так как в них начальные значения переменным не задаются. Это очень плохой стиль программирования: если в реальной жизни забудешь дальше выполнить присваивание значения, новичок может долго отлаживаться, чтобы понять, в чём проблема.

    Источник: youngcoder.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru