You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: lang_c/3/3__vvod_dannyh_scanf/article.md
+8-8Lines changed: 8 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -198,10 +198,10 @@ scanf("%f", &real_number);
198
198
```
199
199
200
200
- для ввода `3.1415\n` сохранит в переменную `real_number` значение `3.1415`;
201
-
- для ввода `-2.7182\n` сохраниет в переменную `real_number` значение `-2.7182`;
202
-
- для ввода `.001\n` сохраниет в переменную `real_number` значение `0.001`;
203
-
- для ввода `000123.456\n` сохраниет в переменную `real_number` значение `123.456`;
204
-
- для ввода `+6.4321\n` сохраниет в переменную `real_number` значение `6.4321`;
201
+
- для ввода `-2.7182\n` сохранит в переменную `real_number` значение `-2.7182`;
202
+
- для ввода `.001\n` сохранит в переменную `real_number` значение `0.001`;
203
+
- для ввода `000123.456\n` сохранит в переменную `real_number` значение `123.456`;
204
+
- для ввода `+6.4321\n` сохранит в переменную `real_number` значение `6.4321`;
205
205
206
206
207
207
Отдельно остановимся на работе спецификатора `%c`. Он используется для считывания одного **любого** символа (в том числе и любого пробельного символа) из потока ввода.
@@ -228,7 +228,7 @@ int main(void)
228
228
229
229
Для наглядности я добавил в вывод символы `|`. Результат работы программы для всех пяти случаев представлен на следующем рисунке:
230
230
231
-

231
+

232
232
233
233
% **Важно!**
234
234
При считывании данных по формату `%c` пробельные символы не игнорируются.
@@ -366,13 +366,13 @@ int main(void)
366
366
scanf("%d %d", &a, &b, &c); // количество спецификаторов
367
367
// не совпадает с количеством переменных
368
368
369
-
printf("%d\n", a + b c);
369
+
printf("%d\n", a + b + c);
370
370
371
371
return 0;
372
372
}
373
373
```
374
374
375
-
Результат работа программы Листинг 8.
375
+
Результат работы программы Листинг 8.
376
376

377
377
378
378
@@ -415,7 +415,7 @@ int main(void)
415
415
416
416

417
417
418
-
В первом случае в переменной `value_read` будет записано значение `2`, т.к. функцию`scanf` успешно считает оба значения и запишет их в соответствующие переменные. Во втором случае в переменной `value_read` будет хранится значение `1`, т.к. из-за несоответствия входных данных формат-строке функция `scanf` не сможет прочитать второе значение и в результате своей работы присвоит значение лишь одной переменной `a`.
418
+
В первом случае в переменной `value_read` будет записано значение `2`, т.к. функция`scanf` успешно считает оба значения и запишет их в соответствующие переменные. Во втором случае в переменной `value_read` будет хранится значение `1`, т.к. из-за несоответствия входных данных формат-строке функция `scanf` не сможет прочитать второе значение и в результате своей работы присвоит значение лишь одной переменной `a`.
419
419
420
420
Далее в курсе (в шестом уроке), вы изучите особые конструкции языка Си, которые позволят вам в зависимости от того, сколько данных было считано, изменять поведение программы, например, выводить ошибку, если не получилось сохраннить введённые данные.
Copy file name to clipboardExpand all lines: lang_c/3/3__vvod_dannyh_scanf/reference.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -49,7 +49,7 @@ int main(void)
49
49
50
50
Но функция `scanf` -- это особый случай. Эта функция должна **записать** новое значение в вашу переменную. Копия тут не прокатит -- нужен доступ к оригиналу. Поэтому мы используем `&`. В этом случае функция получает не какую-то там жалкую копию, а информацию о том, где в памяти находится наша переменная, а потому может записать в неё введенное пользователем значение.
51
51
52
-
Логика в этом примерно следующая. Мы относимся к любым функциям как к потенциально опасным объектам, которые могут повредить данные. Поэтому по умолчанию функции получают только копии данных -- это защищает от случайных изменений. А чтобы позволить функции работать с оригинальными данными, мы должно совершить сознательное действие -- передать адрес переменной.
52
+
Логика в этом примерно следующая. Мы относимся к любым функциям как к потенциально опасным объектам, которые могут повредить данные. Поэтому по умолчанию функции получают только копии данных -- это защищает от случайных изменений. А чтобы позволить функции работать с оригинальными данными, мы должны совершить сознательное действие -- передать адрес переменной.
53
53
54
54
Мы ещё подробнее обсудим этот механизм, когда будем изучать, как можно создавать собственные функции.
0 commit comments