.
Microsoft visual c++ 2008. Урок 5. Программа копирования символьного файла (putchar, getchar, stdio)
Автор megabax   
07.07.2010 г.
New Page 1

Microsoft visual c++ 2008. Урок 5. Программа копирования символьного файла (putchar, getchar, stdio).

Сегодня мы напишем простейшую программу копирования символьного файла. В качестве входного файла у нас будет стандартное устройство "клавиатура", а в качестве выходного стандартное устройство "дисплей".  И так, вот текст программы:

#include "stdafx.h"
#include <conio.h> //Для _getch()
#include <stdio.h> //Для getchar() и putchar(c)
#define eof -1


int _tmain(int argc, _TCHAR* argv[])
{
    int c;
    printf("Make input\n");
    c=getchar();
    while (c!=eof) {
         putchar(c);
        c=getchar();
     }
     printf("Press any key to continue");
    _getch();
     return 0;
}

Скомпилируем и запустим пример.  У вас на экране появиться подсказка "Make input" и мигающий курсор. Если вы введете строку и нажмете ENTER, то она тут же появиться на экране еще раз (дублируется):

Microsoft visual c++ 2008. Урок 5. Программа копирования символьного файла (putchar, getchar, stdio).

Прервать выполнение программы можно нажав комбинацию клавиш Ctrl+Z, код этой комбинации -1.  Возможность такого прерывания реализована путм использования цикла:

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

Он "крутиться" до тех пор, пока пользователь не ввел символ с кодом -1 (Ctrl+Z).

Функция getchar() - это ввод символов с эхо сопровождением, именно поэтому у нас в программе и происходит такое дублирование строк. тоесть, Пользователь нажал на кнопку, ее символ отобразился на экране средствами самой функции getchar(), да еще и потом вывелся функцией putchar(c).

Можно сделать эту же программу более компактной:

#include "stdafx.h"
#include <conio.h> //Для _getch()
#include <stdio.h> //Для getchar() и putchar(c)
#define eof -1


int _tmain(int argc, _TCHAR* argv[])
{
    int c;
    printf("Make input\n");
    c=getchar();
    while ((c=getchar())!=eof) putchar(c);
     printf("Press any key to continue");
    _getch();
     return 0;
}

Запустив на тестирование, мы увидим, что программа работает точно так же:

Microsoft visual c++ 2008. Урок 5. Программа копирования символьного файла (putchar, getchar, stdio).

В данном варианте у нас выражение перехода на следующую итерацию цикла помещено в тело оператора цикла, а в само тело цикла помещена лишь команда вывода символа на экран:

while ((c=getchar())!=eof) putchar(c);

Заметье, что когда в теле фикла всего лишь один оператор, то фигурные скобки не нужны.

Последнее обновление ( 16.11.2013 г. )