Другие языки программирования и технологии

Язык программирования Си

Изучаю язык программирования C по книге "Язык программирования Си" (Книга, Брайан Керниган и Деннис Ритчи). Остановился на теме: 1.5.1. Копирование файлов, так вот до этой темы всё было понятно и все упражнения делал. Объясните максимально понятно программу:

#include

main ()
{
int c;

c = getchar() ;
while (c != EOF) {
putchar (c) ;
c = getchar () ;
}
}

Не понятен именно этот момент -
c = getchar() ;
while (c != EOF) {
putchar (c) ;
c = getchar () ;
Что значит функция getchar(); почему говориться что она читает один символ? как это читает? как один, если я могу ввести много символов? приведите пример какой-нибудь ?
и также с другой функцией putchar (c) ; что это вообще? и вот этот цикл (c != EOF), что EOF причем тут он? как программа работает объясните, как они взаимодействуют. Очень сильно буду благодарен кто объяснить мне данную тему)
То, что ты вводишь с клавиатуры, попадает в специальный системный буфер. И становится доступно для программы, как только ты нажмёшь Enter.

А getchar читает из этого буфера по одному символу. Если буфер пуст - ждёт, пока ты что-то введёшь и нажмёшь Enter.

getchar вводит 1 БАЙТ (код символа от 0 до 255). Но, обрати внимание, переменная c объявлена как int - и это ОБЯЗАТЕЛЬНОЕ условие.

Когда файл заканчивается (в случае консольного ввода с клавиатуры нажаты Ctrl+Z и Enter), getchar начинает возвращать не коды символов, а специальное значение, равное константе EOF, ОТЛИЧНОЕ от кода любого символа (обычно это значение -1). И это означает, что данных больше нет и не будет.

Потому когда значение c становится равным EOF, цикл заканчивается.
ЕК
Евгений Корякин
98 814
Лучший ответ
Станислав Калиберда почему нужно объявить обязательно как целочисленное? int? и что случиться когда цикл заканчивается?
Может Быть @Андрей
Подскажите пожалуйста чем отличаются версии книги Никлауса Вирта Алгоритмы и структуры данных с Обероном и Паскалем?
eof это флаг конца файла. он устанавливается когда при прочтении файла буфер потока становится равным 0.
getchar() считывает 1 символ из ВХОДЯЩЕГО потока. поток может быть еще и на ВЫХОД.
так если например вы будете вводить символы когда потребуется ввести число, чтобы входящий поток был чем то забит, а после восстановите, то сможете посимвольно прочитать то что находится в востановленном входящем потоке. отличный пример который это демострирует:
int var;
printf("var = ");
scanf("%d", &var); // Здесь вводим какое то предложение и получаем ошибочный поток..
clear(); // Снимаем флаг ошибки с потока, делаем его безошибочным..
char ch = getchar();
printf("%c", ch);
while(ch != EOF){// пока буфер входящего потока не будет равен нулю...
ch = getchar(); // по символьно считываем из потока
printf("%c", ch); // и выводим на экран...
_getch(); // Для большего понимания остановим программу. (нужно подключить conio.h)
}
мне кажется
getchar = получить букву
тоесть
с=получить букву ();
пока (с не равно ЕOF){
выдать (с);
с = получить букву ();
Станислав Калиберда так можно ведь не одну букву и число, и не только одно? и что значит (C не равно EOF)
вы почти ответили на мой вопрос
зачем тебе си, начинай с c#, он только популярнее становится + с ним ты всё что угодно с легкостью сделаешь, там все формы, кнопки, множество функций за тебя всё сделано и тебе только надо уметь применить.
Станислав Калиберда Знаешь C - знаешь как всё работает. Он напрямую работает с памятью компьютера.
Начну с C, потом C++, и С#
Станислав Калиберда Ответь если знаешь? пж
Alisher Tashmatov C# не становится популярнее. Насколько знаю, его рейтинг вообще не меняется. Но язык хороший, легкий. И пацан правильно говорит. Надо начинать с C, потом C++, потом более высокоуровневые языки
ps: простите за такое кривое использование таких терминов как Xуровневый, но я не знаю как сказать по-другому
getchar() - получает один символ
putchar() - (вроде) выводит символ

Работает все так:
Программа ждет символ и записывает в переменную "c" (пока она не получит символ, код дальше не выполняется)
Символ получен, идем дальше
Цикл, пока "c" не станет равен EOF:
Выводим "c" в консоль
Программа ждет символ и записывает в переменную "c" (пока она не получит символ, код дальше не выполняется)
Код повторяется
Станислав Калиберда Уже понимаю, но что такое EOF чему равно? EOF это что вообще значит? и почему цикл повторяется? и можно ведь вести доФИга символом, а говориться что getchar считывает один символ? чё у меня думки не догоняю?
c = getchar() ;
while (c != EOF) {
putchar (c) ;
c = getchar () ;

getchar получает один символ putchar помещает символ в поток вывода stdout и так до тех пор пока не достигнет конец файла EOF константа -1 пока веденный символ не является -1 запрашивать символ повторно в UNIX системах для указания EOF в терминале используется CTRL+D

для краткости можно написать вот так
char c;
while((c = getchar()) != EOF)
putchar(c);
**
****** ******
97

Похожие вопросы