Как найти ввод исходных данных в c
Перейти к содержимому

Как найти ввод исходных данных в c

  • автор:

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

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

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

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

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

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

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

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

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

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

После формат-строки нужно указать адрес переменной, в которую нужно сохранить данные. Чтобы указать адрес переменной достаточно перед её именем записать знак & (амперсанд), как на рисунке выше.

Напишем, наконец-таки, программу сложения двух чисел.

#include int main(void) < int a, b, res; scanf("%d", &a); // считываем целое значение в переменную a scanf("%d", &b); // считываем целое значение в переменную b res = a + b; printf("%d + %d = %d\n", 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); // считываем целое значение в переменную age printf("Vash rost?(cm)\n"); scanf("%d", &height); // считываем значение в переменную height printf("Vash ves?(kg)\n"); scanf("%d", &weight); // считываем значение в переменную 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 . Посмотрите какую ошибку выдаст компилятор.
  2. Попробуйте использовать %f для типа double , а %lf для типа float . Каковы результаты? Напишите об этом в комментариях к этому уроку. Не забудьте указать название вашей IDE или компилятора.

Дополнительные материалы

  1. пока нет

Самый крупный донат:

sdanshin@yandex.ru 5000 руб.
Аноним, Тинькофф * 3167 1000 руб.
Аноним, WebMoney $1,05

Оставить комментарий

Чтобы код красиво отображался на странице заключайте его в теги [code] здесь писать код [/code]

Комментарии

Сергей 09.12.2017 в 14:58

Здраствуйте мне нужна помощь :когда я задаю значение float он в ответе пишет так : 3.50 + 3.40 = 6.9000000
Как убрать нолики?

KaDeaT

Об этом рассказывается в уроке Форматированный вывод.

Посмотрите на листинг 8 и на результат вывода.

Дмитрий 15.12.2017 в 00:09

Нет возможности в некоторых темах сохранить урок ввиде PDF файла для изучения в offline когда летишь в самолёте! Создайте пожалуйста одну общую кнопку для сохранения уроков в режиме ,offline пожалуйста

KaDeaT

Дмитрий, добрый день. Да, знаю об этой проблеме.

К сожалению не хватает времени сделать pdf-версии для всех уроков. Но оно обязательно будет, обещаю. Не могу быть уверенным, что к концу этого года успею, но уж в январе 2018 pdf-версия будет у каждого урока.

Кирилл 03.01.2018 в 20:18

Здравствуйте, появился вопрос: почему при выводе переменных в printf мы не используем знак «&», хотя в вводе scanf он необходим?
Заранее большое спасибо

KaDeaT

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

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

DimaKotoriyRAshid 08.01.2018 в 23:32

У меня никак не получается сделать предпоследнее задание , постоянно выдает ошибку номер 2. При правильном ответе он пишет какую то откровенную дич. Уже битый час пытаюсь найти ошибку ((9(

KaDeaT
Пожалуйста, напишите в комментариях на Stepik номер своего решения. Попробую вам помочь.)
Андрей 21.03.2018 в 21:16

«но уж в январе 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», &f);
scanf(«%f», &d);
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

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

Как найти ввод исходных данных в c

По умолчанию язык C++ не содержит встроенных средств для ввода с консоли и вывода на консоль, эти средства предоставляются библиотекой iostream . В ней определены два типа: istream и ostream . istream представляет поток ввода, а ostream — поток вывода.

Вообще, сам термин «поток» в данном случае представляет последовательность символов, которая записывается на устройство ввода-вывода или считывается с него. И в данном случае под устройством ввода-вывода рассматривается консоль.

Для записи или вывода символов на консоль применяется объект cout , который представляет тип ostream. А для чтения с консоли используется объект cin

Для использования этих объектов в начало исходного файла необходимо подключить библиотеку iostream:

#include

Вывод на консоль

#include int main() < int age ; double weight ; std::cout

Консольный вывод программы:

Name: Tom Age: 33 Weight: 81.23

Строки могут содержать управляющие последовательности, которые интерпретируются определенным образом. Например, последовательность «\n» интерпретируется как перевод на новую строку. Из других управляющих последовательностей также нередко употребляется «\t», которая интерпретируется как табуляция.

Ввод с консоли

Для считывания с консоли данных применяется оператор ввода >> , который принимает два операнда. Левый операнд представляет объект типа istream (в данном случае объект cin), с которого производится считывание, а правый операнд — объект, в который считываются данные.

Например, считаем данные с консоли:

#include int main() < int age; double weight; std::cout > age; std::cout > weight; std::cout

Здесь после приглашений к вводу программа ожидает ввода значений для переменных age и weight.

Пример работы программы:

Input age: 32 Input weight: 67.45 Age: 32 Weight: 67.45

Стоит отметить, что так как оператор ввода в первом случае будет добавлять данные в целочисленную переменную age, то он ожидает ввода числа. В случае с переменной weight оператор ввода ожидает число с плавающей точкой, причем разделителем целой и дробной части должна быть точка. Поэтому мы не можем ввести любые значения, например, строки. В этом случае программа может выдать некорректный результат.

Оператор ввода >> возвращает левый операнд — объект cin, поэтому мы можем по цепочке считывать данные в различные переменные:

#include int main() < int age; double weight; std::cout > age >> weight; std::cout

Пример работы программы:

Input age and weight: 32 67.45 Age: 32 Weight: 67.45

После ввода одного из значений надо будет ввести пробел и затем вводить следующее значение.

Ввод исходных данных

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

Доделать ввод исходных данных в программу
Программа для решения нелинейных уравнений, методом дихотомии, касательных хорд, простых итераций.

Реализуйте ввод исходных данных (массива структур) из текстового файла
Реализуйте ввод исходных данных (массива структур) из текстового файла. Текстовый файл должен.

155 / 142 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
номер функции это интересно как, а так обычное задание на cin cout ну и вызов функции

1 2 3 4 5
double Х,e, y; //описание переменных cout"Х="; cin>>Х; cout"e="; cin>>e;

3802 / 2354 / 413
Регистрация: 09.09.2017
Сообщений: 10,208

ЦитатаСообщение от Игорь1986 Посмотреть сообщение

номер функции это интересно как
Например, так:

1 2 3 4 5 6 7 8 9
float func1(float x){return x+1;} float func2(flaot x){return x*2;} float func3(float x){return -x;} float (*func[3])(float) = {func1, func2, func3}; . printf("%f->%f\n", 123.0, func[0](123)); printf("%f->%f\n", 123.0, func[1](123)); printf("%f->%f\n", 123.0, func[2](123));

Регистрация: 06.01.2018
Сообщений: 77

ну пробуй что то по типу:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
int main(){ double x,e,n; cout  "Push x, e, n:"; cin >> x >> e >> n; switch(n){ case 1: cout  func1  endl; break case 2: cout  func2  endl; break; . } _getch(); return 0; }

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

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

Замена исходных данных по результатам расчетов
здраствуйте имеется програма для расчета #include<conio.h> #include<iostream> #include <cstdio>.

Как правильно заменить ввод данных простой на ввод с клавиатуры?
#include "stdafx.h" #include <cstdlib> #include <iostream> using namespace std; int.

Потоковый ввод и ввод данных. Работа с числами
Ввести с экрана два нат. числа. Найти частное первого на второе и определить, встречается ли среду.

Ввод данных и обработка исключений в С++: 4-я часть гайда по языку программирования

Разбираемся, как правильно использовать ввод данных, чтобы ничего не сломалось.

Евгений Кучерявый

Евгений Кучерявый

Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.

Это четвёртая часть из серии статей «Глубокое погружение в C++». В прошлый раз мы познакомились с ветвлением и условными конструкциями. Сейчас поговорим о том, как сделать программу более полезной за счёт ввода данных и обработки исключений.

Если программа работает с изначально заданными данными, то она полезна только один раз, потому что результат будет всегда один и тот же. Гораздо эффективнее она становится, когда можно использовать разные данные:

  • числа для вычисления;
  • команды пользователя;
  • изображения;
  • аудио и видео;
  • текст и так далее.

Как получить и обработать данные через консоль? Давайте пробовать.

Команды ввода и вывода в C++

В самом начале кода каждой программы мы подключаем библиотеку iostream Input/Output Stream (поток ввода/вывода). Именно в ней находится команда cout, что позволяет выводить данные на экран консоли. В ней же есть команда cin, которая, наоборот, запрашивает пользовательский ввод.

Давайте напишем простую программу, которая спрашивает имя пользователя.

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

Также вы можете запросить от пользователя данные других типов. Например, числовые:

Как видно на скриншоте, в первом случае всё прошло успешно, но в следующих случаях программа выдала ошибку. Давайте рассмотрим последнюю:

Разберём некоторые моменты подробнее:

  • Исключение(exception) — это что-то вроде ошибки, но не совсем. Разные части программы могут «выбрасывать» их при определённых условиях, чтобы сказать: что-то идёт не так; в данном случае — out of range (выход из диапазона). Это исключение было выброшено, потому что введённое число больше, чем может поместиться в переменную типа int.
  • Дамп памяти (memory dump) — это содержимое рабочей памяти одного процесса, ядра или всей операционной системы. Дамп можно посмотреть, чтобы понять, каким было состояние программы и почему она аварийно завершила работу.

Чтобы программа не закрывалась при выбрасывании исключений, их нужно обработать.

Обработка исключений в C++

Для этого нам пригодится конструкция try-catch.

Вот код программы, которая проверяет корректность введённых данных:

Пользовательский ввод и ветвление

С помощью пользовательского ввода можно по-настоящему раскрыть возможности условных конструкций. Например, конструкция switch позволяет создать простое консольное меню.

Конструкция if пригодится для решения квадратных уравнений:

Заключение

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

Читайте также:

  • Объектно-ориентированное программирование. Часть 1. Что такое классы и объекты
  • Как сеньор и тимлид собеседует других сеньоров
  • Как добавить в приложение поддержку нескольких языков

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *