Ввод и вывод в языке С++

Автор работы: Пользователь скрыл имя, 18 Декабря 2011 в 11:05, реферат

Описание

В языке С имеется весьма развитая библиотека функций ввода-вывода. Однако в самом языке отсутствуют какие-либо предопределенные файловые структуры. Все данные обрабатываются как последовательность байт.

Работа состоит из  1 файл

Ввод и вывод в языке С.docx

— 20.42 Кб (Скачать документ)

    Ввод и вывод в языке С++.

    В языке С имеется весьма развитая библиотека функций ввода-вывода. Однако в самом языке отсутствуют какие-либо предопределенные файловые структуры. Все данные обрабатываются как последовательность байт.

    Имеется три основных типа функций:

  • потоковые,
  • работающие с консолью и портами ввода-вывода
  • и низкоуровневые.

    1) Потоковые функции.

    В потоковых функциях файлы данных рассматриваются как поток отдельных символов.

     Когда программа открывает файл для ввода вывода при помощи потоковых функций, то открытый файл связывается с некоторой переменной типа FILE (определенной в stdio.h), содержащей базовую информацию об этом файле. После открытия потока с помощью функции fopen возвращается указатель на эту переменную. Этот указатель используется для ссылки к файлу при всех последующих операциях ввода-вывода и называется указателем потока.

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

    2) Аналогичным образом выглядят функции, работающие с консолью и портами. Они позволяют читать и писать на терминал или в порт ввода/вывода (например в порт принтера). Функции портов ввода/вывода выполняют простое побайтное считывание или запись. Функции ввода/вывода на консоль обеспечивают несколько дополнительных возможностей, например можно определить момент, когда будет введен символ с консоли и т.п.

     Для  использования потоковых функций в программу должен быть включен заголовочный файл stdio.h. В нем содержатся описания прототипов функций ввода/вывода, а также - описания ряда констант. Константа EOF определяется как значение, возвращаемое при обнаружении конца файла, BUFSIZE - размер буферов потока, тип FILE определяет структуру, используемую для получения информации о потоке.

     Поток открывается с помощью функций fopen(), fdopen() или freopen(). В момент открытия задаются режим файла и способ доступа. Эти функции возвращают указатель на переменную типа FILE, например

    FILE *file1;

     file1=fopen(“input.dat”,”r”);

    открывает файл input.dat для чтения. Переменная file1 получает указатель на поток.

     Возможные типы доступа:

     “a”  – запись в режиме добавления в конец файла,

    ”a+”  –тоже, что и “a”, но возможно и чтение,

     ”r”  – только для чтения,

     ”r+”  – для чтения и записи,

     ”w”  – открывается пустой файл для записи,

     ”w+”  – открывается пустой файл для записи и чтения.

     Когда начинается выполнение приложения автоматически открывается следующие потоки: стандартное устройство ввода stdin, стандартное устройство вывода stdout, устройство сообщений об ошибках stderr, устройство печати stdprn и стандартное дополнительное устройство stdaux. Эти файловые указатели можно использовать во всех функциях ввода/вывода в качестве указателя на поток. Некоторые функции автоматически используют указатели на поток, например getchar() и putchar() используют stdin и stdout соответственно.

     Для  закрытия потоков используются функции fclose() и fcloseall(). Если программа не закрывает поток явно, то он закрывается автоматически по ее завершению.

     Для  перемещения по файлу можно использовать функции fseek(), ftell() и rewind().

    3) Низкоуровневый ввод и вывод.

    Функции низкоуровневого ввода-вывода не выполняют никакой буферизации и форматирования. Они непосредственно обращаются к средствам ввода/вывода операционной системы.

     При  открытии файла на этом уровне возвращается описатель файла (file handle), представляющий собой целое число, используемое затем для обращения к этому файлу при дальнейших операциях. Для открытия используется функция open(), для закрытия – функция close().

     Функция read() читает данные в указанный массив, а write() – выводит данные из массива в файл, lseek() – используется для перемещения по файлу.

     Низкоуровневые функции не требуют включения заголовочного файла stdio.h, вместо него используется файл io.h.

    Однако!------------------------------

     Низкоуровневая система ввода-вывода не вошла в стандарт ANSI C, поэтому ее не рекомендуют для дальнейшего использования.

    ------------------------------------------

    Ввод и вывод символов, строк, слов.

    Наиболее общими функциями являются те, которые работают с отдельными символами. Функция getc() вводит один символ из указанного файлового потока в переменную типа int:

          int ic;

           ic=getc(stdin);

    Вводится один символ из потока stdin.

     Функция putc()  передает один символ в указанный файловый поток:

            putc(ic,stdout);

    Для стандартных потоков stdin и stdout можно использовать функции getchar() и putchar() соответственно:

          int ic;

           ic=getchar();

           putchar(ic);

    Функции getch() и putch() являются низкоуровневыми функциями. Обычно функция getch() используется для перехвата символа, введенного с клавиатуры сразу после его нажатия. Нажатия клавиши “Enter” не требуется.

     Для  ввода/вывода текстовых строк можно использовать функции gets(), fgets(), puts(), fputs(). Функция fgets() имеет вид:

            fgets(имя_массива, размер_массива, указатель_на_поток);

     Она считывает символы в указанный массив и добавляет в конце null-символ. Считывание производится до заполнения массива, или до достижения конца файла. Символ перевода строки переписывается в массив.

     Для  ввода и вывода целых чисел можно использовать функции getw() и putw(). Они работают с двоичными файлами.

    Форматированный ввод и вывод.

    Богатый ассортимент средств управления форматом позволяет легко создавать таблицы, графики или отчеты. Функциями, выполняющими этот вывод являются printf() - для стандартного потока вывода stdout, и fprintf() – для любого потока. Функция fprintf() имеет вид:

           fprintf(поток_вывода, “формат”, перем_1, перем_2,…);

     Работает она аналогично printf() и выводит данные в указанный поток вывода.

     Для  форматированного ввода используются функции scanf() и fscanf().

     Для  преобразования текстовой строки можно использовать sscanf(). Она работает аналогично fscanf(), но данные берет из сроки, а не из файла.

    Потоки  cin, cout, cerr.

    В языке С++ имеется другая библиотека ввода/вывода, определяемая заголовочным файлом iostream.h. Ввод/вывод в ней определяется набором специальных классов. Аналогами потоков stdin, stdout и stderr являются cin, cout и cerr. Они открываются автоматически при запуске программы.

    Операции выделения >> и вставки <<.

    Для ввода/вывода с помощью указанных потоков используются специальным образом определенные операции “занести в поток” и “получить из потока”, << и <<. Операция >> выделяет данные из входного потока и помещает в указанные переменные, а операция << помещает значения указанных переменных в поток.

     Приведем пример использования потока stdin и потока cin:

          scanf(“%d%lf%c”,&ivalue,&dvalue,&cvalue);

           cin>>ivalue>>dvalue>>cvalue;

    Аналогично для вывода:

          printf(“Integer:%d double: %lf”,ivalue,dvalue);

            cout<<”Integer:”<<ivalue<<” double:”<<dvalue;

Информация о работе Ввод и вывод в языке С++