From 5db0fd4c1b6b2fda3252f2b830e0cd48d7b24f37 Mon Sep 17 00:00:00 2001 From: DenisKolodich Date: Sun, 27 Jul 2025 19:11:36 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lang_c/3/3__vvod_dannyh_scanf/article.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lang_c/3/3__vvod_dannyh_scanf/article.md b/lang_c/3/3__vvod_dannyh_scanf/article.md index 62b2333..b5378e3 100644 --- a/lang_c/3/3__vvod_dannyh_scanf/article.md +++ b/lang_c/3/3__vvod_dannyh_scanf/article.md @@ -198,10 +198,10 @@ scanf("%f", &real_number); ``` - для ввода `3.1415\n` сохранит в переменную `real_number` значение `3.1415`; -- для ввода `-2.7182\n` сохраниет в переменную `real_number` значение `-2.7182`; -- для ввода `.001\n` сохраниет в переменную `real_number` значение `0.001`; -- для ввода `000123.456\n` сохраниет в переменную `real_number` значение `123.456`; -- для ввода `+6.4321\n` сохраниет в переменную `real_number` значение `6.4321`; +- для ввода `-2.7182\n` сохранит в переменную `real_number` значение `-2.7182`; +- для ввода `.001\n` сохранит в переменную `real_number` значение `0.001`; +- для ввода `000123.456\n` сохранит в переменную `real_number` значение `123.456`; +- для ввода `+6.4321\n` сохранит в переменную `real_number` значение `6.4321`; Отдельно остановимся на работе спецификатора `%c`. Он используется для считывания одного **любого** символа (в том числе и любого пробельного символа) из потока ввода. @@ -228,7 +228,7 @@ int main(void) Для наглядности я добавил в вывод символы `|`. Результат работы программы для всех пяти случаев представлен на следующем рисунке: -![Рис.4 Запуск программы Листинг 5 на различных входных данных](./l5.png "Рис.4 Запуск программы Листинг 3 на различных входных данных") +![Рис.4 Запуск программы Листинг 5 на различных входных данных](./l5.png "Рис.4 Запуск программы Листинг 5 на различных входных данных") % **Важно!** При считывании данных по формату `%c` пробельные символы не игнорируются. @@ -366,13 +366,13 @@ int main(void) scanf("%d %d", &a, &b, &c); // количество спецификаторов // не совпадает с количеством переменных - printf("%d\n", a + b c); + printf("%d\n", a + b + c); return 0; } ``` -Результат работа программы Листинг 8. +Результат работы программы Листинг 8. ![Рис.7 Ошибка! Несоответствие количества спецификаторов количеству переменных](./l8.png "Рис.7 Ошибка! Несоответствие количества спецификаторов количеству переменных") @@ -415,7 +415,7 @@ int main(void) ![](./l9.png) -В первом случае в переменной `value_read` будет записано значение `2`, т.к. функцию `scanf` успешно считает оба значения и запишет их в соответствующие переменные. Во втором случае в переменной `value_read` будет хранится значение `1`, т.к. из-за несоответствия входных данных формат-строке функция `scanf` не сможет прочитать второе значение и в результате своей работы присвоит значение лишь одной переменной `a`. +В первом случае в переменной `value_read` будет записано значение `2`, т.к. функция `scanf` успешно считает оба значения и запишет их в соответствующие переменные. Во втором случае в переменной `value_read` будет хранится значение `1`, т.к. из-за несоответствия входных данных формат-строке функция `scanf` не сможет прочитать второе значение и в результате своей работы присвоит значение лишь одной переменной `a`. Далее в курсе (в шестом уроке), вы изучите особые конструкции языка Си, которые позволят вам в зависимости от того, сколько данных было считано, изменять поведение программы, например, выводить ошибку, если не получилось сохраннить введённые данные. From e5d4f338ed96aa1bdf7e98878635c06245e00f42 Mon Sep 17 00:00:00 2001 From: DenisKolodich Date: Sun, 27 Jul 2025 19:14:46 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lang_c/3/3__vvod_dannyh_scanf/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang_c/3/3__vvod_dannyh_scanf/reference.md b/lang_c/3/3__vvod_dannyh_scanf/reference.md index a8a5eac..c052649 100644 --- a/lang_c/3/3__vvod_dannyh_scanf/reference.md +++ b/lang_c/3/3__vvod_dannyh_scanf/reference.md @@ -49,7 +49,7 @@ int main(void) Но функция `scanf` -- это особый случай. Эта функция должна **записать** новое значение в вашу переменную. Копия тут не прокатит -- нужен доступ к оригиналу. Поэтому мы используем `&`. В этом случае функция получает не какую-то там жалкую копию, а информацию о том, где в памяти находится наша переменная, а потому может записать в неё введенное пользователем значение. -Логика в этом примерно следующая. Мы относимся к любым функциям как к потенциально опасным объектам, которые могут повредить данные. Поэтому по умолчанию функции получают только копии данных -- это защищает от случайных изменений. А чтобы позволить функции работать с оригинальными данными, мы должно совершить сознательное действие -- передать адрес переменной. +Логика в этом примерно следующая. Мы относимся к любым функциям как к потенциально опасным объектам, которые могут повредить данные. Поэтому по умолчанию функции получают только копии данных -- это защищает от случайных изменений. А чтобы позволить функции работать с оригинальными данными, мы должны совершить сознательное действие -- передать адрес переменной. Мы ещё подробнее обсудим этот механизм, когда будем изучать, как можно создавать собственные функции.