buzzkill #1

Merged
ivan-igorevich merged 2 commits from lornaria/basic-c:buzzkill into master 2022-11-02 10:28:14 +03:00
1 changed files with 6 additions and 6 deletions
Showing only changes of commit 5e85e3ab4b - Show all commits

View File

@ -1,7 +1,7 @@
\section{Базовый ввод-вывод} \section{Базовый ввод-вывод}
\subsection{Форматированный вывод} \subsection{Форматированный вывод}
Общение с пользователем на чистом С происходит через консоль. Для того, чтобы выводить какую-либо информацию для чтения пользователем - используется функция \code{printf();} предназначенная для форматированного вывода некоторого текста в консоль. Функция описана в заголовке \code{stdio.h}, поэтому мы и включили данный заголовок в нашу программу. Какого рода форматирование применяется при выводе строк в консоль? Существуют два основных инструмента придания выводу необходимого вида: экранированные последовательности (escape sequences) и заполнители (placeholders). Общение с пользователем на чистом С происходит через консоль. Для того, чтобы выводить какую-либо информацию для чтения пользователем - используется функция \code{printf();} предназначенная для форматированного вывода некоторого текста в консоль. Функция описана в заголовке \code{stdio.h}, поэтому мы и включили данный заголовок в нашу программу. Какого рода форматирование применяется при выводе строк в консоль? Существуют два основных инструмента придания выводу необходимого вида: экранированные последовательности (escape sequences) и заполнители (placeholders).
\paragraph{Экранированная последовательность} это буква или символ, написанные после знака обратного слэша (\code{\char`\\}), которые при выполнении программы будут на что-то заменены. Самые часто используемые это: \paragraph{Экранированная последовательность} - это буква или символ, написанные после знака обратного слэша (\code{\char`\\}), которые при выполнении программы будут на что-то заменены. Самые часто используемые это:
Review

В целом по документу выделение paragraph{} выглядит не очень. Где это не часть предложения, хочется переноса на другую строку, а где начало предложения, то зачастую не хватает тире. По-хорошему, надо бы везде, где тире, ставить символ длинного тире "—". Не знаю, почему я короткий влепила.

В целом по документу выделение paragraph{} выглядит не очень. Где это не часть предложения, хочется переноса на другую строку, а где начало предложения, то зачастую не хватает тире. По-хорошему, надо бы везде, где тире, ставить символ длинного тире "—". Не знаю, почему я короткий влепила.
Review

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

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

значит нужно ставить --

значит нужно ставить --
\begin{itemize} \begin{itemize}
\item \code{\char`\\'} - одинарная кавычка; \item \code{\char`\\'} - одинарная кавычка;
\item \code{\char`\\"} - двойная кавычка; \item \code{\char`\\"} - двойная кавычка;
@ -18,7 +18,7 @@
\item \code{\char`\\xnn} - произвольное шестнадцатеричное значение; \item \code{\char`\\xnn} - произвольное шестнадцатеричное значение;
\item \code{\char`\\unnnn} - произвольное Юникод-значение. \item \code{\char`\\unnnn} - произвольное Юникод-значение.
\end{itemize} \end{itemize}
Чтобы убедится что это правильно работает выведем еще одну строку (в дополнение к коду со страницы \hyperref[code:firstprogram]{\pageref{code:firstprogram}}) с надписью <<Это новая строка>> на следующую строку нашей консоли. Также добавим к ещё одной строке символ табуляции чтобы увидеть как он работает. И сразу рассмотрим экранированную последовательность \code{\char`\\\char`\\} она делает ни что иное как добавляет символ обратного слэша в наш текст. Аналогичным образом работают и другие символьные экранирования. Это нужно, чтобы компилятор мог отличить, например, символ двойных кавычек в строке, написанной программистом, от символа двойных кавычек, завершающего строку в коде программы. Обратите внимание что не поставив в конец строки последовательность \code{\char`\\n} мы заставим компилятор постоянно писать текст на одной строке, не переходя на новую. И наконец \code{\char`\\0} сообщает компилятору что строка закончилась. Даже если у нас есть еще какие-то символы до закрывающих кавычек компилятор их просто проигнорирует. Добавим в код программы ещё пару строк, таким образом тело функции \code{main} должно принять следующий вид: Чтобы убедиться, что это правильно работает, выведем еще одну строку (в дополнение к коду со страницы \hyperref[code:firstprogram]{\pageref{code:firstprogram}}) с надписью <<Это новая строка>> на следующую строку нашей консоли. Также добавим к ещё одной строке символ табуляции чтобы увидеть как он работает. И сразу рассмотрим экранированную последовательность \code{\char`\\\char`\\} она делает не что иное, как добавляет символ обратного слэша в наш текст. Аналогичным образом работают и другие символьные экранирования. Это нужно, чтобы компилятор мог отличить, например, символ двойных кавычек в строке, написанной программистом, от символа двойных кавычек, завершающего строку в коде программы. Обратите внимание, что, не поставив в конец строки последовательность \code{\char`\\n}, мы заставим компилятор постоянно писать текст на одной строке, не переходя на новую. И наконец, \code{\char`\\0} сообщает компилятору, что строка закончилась. Даже если у нас есть еще какие-то символы до закрывающих кавычек, компилятор их просто проигнорирует. Добавим в код программы ещё пару строк, таким образом тело функции \code{main} должно принять следующий вид:
\begin{figure}[h!] \begin{figure}[h!]
\begin{lstlisting}[language=C,style=CCodeStyle] \begin{lstlisting}[language=C,style=CCodeStyle]
@ -29,7 +29,7 @@
printf("This is a terminant \0 it ends a string"); printf("This is a terminant \0 it ends a string");
\end{lstlisting} \end{lstlisting}
\end{figure} \end{figure}
Запустив программу мы можем убедиться, что всё работает так, как мы описали в тексте: сначала идёт приветствие миру, на новой строке сообщение о том, что это новая строка, далее на той же строке (ведь мы не переходили на новую) демонстрация пробела и символа табуляции. На последних двух строках происходит демонстрация обратного слэша и терминанта, видно, что остаток строки не был выведен на экран. Запустив программу, мы можем убедиться, что всё работает так, как мы описали в тексте: сначала идёт приветствие миру, на новой строке сообщение о том, что это новая строка, далее на той же строке (ведь мы не переходили на новую) демонстрация пробела и символа табуляции. На последних двух строках происходит демонстрация обратного слэша и терминанта, видно, что остаток строки не был выведен на экран.
\begin{figure}[h!] \begin{figure}[h!]
\begin{verbatim} \begin{verbatim}
@ -41,7 +41,7 @@ This is terminant
$ $
\end{verbatim} \end{verbatim}
\end{figure} \end{figure}
\paragraph{Заполнитель} это также специальная последовательность, но она говорит компилятору, что на место этой последовательности необходимо вставить некий аргумент, который будет передан после строки, через запятую, при вызове данной функции \code{printf();}. Заполнитель начинается со знака процента и обозначает тип вставляемой переменной. \paragraph{Заполнитель} - это также специальная последовательность, но она говорит компилятору, что на место этой последовательности необходимо вставить некий аргумент, который будет передан после строки, через запятую, при вызове данной функции \code{printf();}. Заполнитель начинается со знака процента и обозначает тип вставляемой переменной.
Review

соответственно предыдущему... но тоже принимается)

соответственно предыдущему... но тоже принимается)
\begin{itemize} \begin{itemize}
\item \code{\%\%} - символ процента; \item \code{\%\%} - символ процента;
\item \code{\%i (\%d)} - целые числа (integer, decimal); \item \code{\%i (\%d)} - целые числа (integer, decimal);
@ -65,7 +65,7 @@ $
printf("Placeholders are \"%5d%%\" of formatting\n", a); printf("Placeholders are \"%5d%%\" of formatting\n", a);
\end{lstlisting} \end{lstlisting}
\end{figure} \end{figure}
Так первый оператор выведет просто число. Второй это же число, но оставив для его отображения пять пробельных символов (два окажутся заняты разрядами числа 50, и ещё три останутся свободными, слева от числа). Третий оператор форматированного вывода впишет число в пять отображаемых символов, но заполнит пустоту нулями (запись с лидирующими нулями, leading zeroes). Четвёртый осуществит вывод числа с плавающей точкой, ограничив дробную часть двумя отображаемыми символами, при этом важно, что не произойдёт математического округления, символы просто не отобразятся, такое отображение часто используется для демонстрации денежных значений в долларах и центах, рублях и копейках, и пр. Последний же оператор выведет на экран надпись, информирующую о том, что заполнители - это 50\% форматирования: Так первый оператор выведет просто число. Второй это же число, но оставив для его отображения пять пробельных символов (два окажутся заняты разрядами числа 50, и ещё три останутся свободными слева от числа). Третий оператор форматированного вывода впишет число в пять отображаемых символов, но заполнит пустоту нулями (запись с лидирующими нулями, leading zeroes). Четвёртый осуществит вывод числа с плавающей точкой, ограничив дробную часть двумя отображаемыми символами, при этом важно, что не произойдёт математического округления, символы просто не отобразятся, такое отображение часто используется для демонстрации денежных значений в долларах и центах, рублях и копейках, и пр. Последний же оператор выведет на экран надпись, информирующую о том, что заполнители - это 50\% форматирования:
\begin{figure}[h!] \begin{figure}[h!]
\begin{verbatim} \begin{verbatim}
@ -80,7 +80,7 @@ $
\end{figure} \end{figure}
Для заполнителей \code{\%d}, \code{\%i}, \code{\%f} часто используются дополнительные параметры, такие как количество знаков после запятой, например, \code{\%.2f} или минимальное количество знаков для отображения целого числа \code{\%5d}. Также в пользу оператора форматированного вывода говорит тот факт, что, например, в С++ стандартный вывод в консоль осуществляется с помощью команды \code{std::cout}, которая не поддерживала форматирование строк вплоть до принятия стандарта С++20. Для заполнителей \code{\%d}, \code{\%i}, \code{\%f} часто используются дополнительные параметры, такие как количество знаков после запятой, например, \code{\%.2f} или минимальное количество знаков для отображения целого числа \code{\%5d}. Также в пользу оператора форматированного вывода говорит тот факт, что, например, в С++ стандартный вывод в консоль осуществляется с помощью команды \code{std::cout}, которая не поддерживала форматирование строк вплоть до принятия стандарта С++20.
\subsection{Форматированный ввод} \subsection{Форматированный ввод}
Поговорив о выводе в консоль нельзя не сказать о пользовательском вводе данных. Один из способов пользовательского ввода данных в программу - это использование функции \code{scanf();}. Предложим пользователю ввести некоторое число: Поговорив о выводе в консоль, нельзя не сказать о пользовательском вводе данных. Один из способов пользовательского ввода данных в программу - это использование функции \code{scanf();}. Предложим пользователю ввести некоторое число:
\begin{figure}[h!] \begin{figure}[h!]
\begin{lstlisting}[language=C,style=CCodeStyle] \begin{lstlisting}[language=C,style=CCodeStyle]