Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга C++.doc
Скачиваний:
24
Добавлен:
10.11.2019
Размер:
2.48 Mб
Скачать

Ввод/вывод в с.

Иногда в программе сочетают код на С++ и С. Ввод данных с клавиатуры и вывод на экран дисплея в языке С осуществляют стандартные функции. Наиболее универсальными являются printf и scanf. Они позволяют вводить данные любых типов. Для того, чтобы функция могла правильно обработать вводимые данные, используются форматы. Формат содержится в строчной константе и всегда начинается с символа '%'. Каждой вводимой и выводимой переменной в строчной константе должен соответствовать формат. Часто используются следующие форматы:

%d

- для ввода и вывода чисел типа int;

%f

- для ввода и вывода чисел типа float без показателя степени (с фиксированной точкой);

%e

- для ввода и вывода чисел типа float с показателем степени;

%c

- для ввода и вывода символов;

%s

- для ввода и вывода строк.

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

При вводе чисел с клавиатуры по формату e или f при необходимости можно опускать показатель степени и десятичную точку. Числа друг от друга отделяются пробелами или переводом строки.

Итак, для форматированного вывода в С используется функция printf, которая имеет формат:

printf(строчная константа, список),

где строчная константа содержит форматы и сообщения выводимые на экран; список - список переменных (выражений), выводимых на экран. Если выводится только сообщение - список переменных может отсутствовать. Переменные в списке разделяются запятыми. Первой переменной списка должен соответствовать первый формат, второй переменной - второй и т.д. Количество переменных должно соответствовать числу форматов. Несоответствие приводит к непредсказуемым ошибкам.

Например,

printf ("%d + %d = %d", 2, 2, 4); /* На экране

появится: 2 + 2 = 4 */

Для форматированного ввода в С используется функция scanf, которая имеет формат:

scanf(строчная константа, список),

где строчная константа содержит форматы, список - список имен вводимых переменных. Перед каждым именем ставится символ '&' (исключение составляют строковые переменные). Отсутствие & перед именем приводит к непредсказуемым последствиям!

Например,

scanf("%d &d", &x, &y); /* Значение целых

переменных x и y будет введено с клавиатуры. */

Функция scanf останавливает выполнение программы до тех пор, пока не будут введены все данные, предписанные форматами.

 

Библиотека ввода-вывода языка С также содержит средства для работы с файлами.

Для открытия файла используется функция fopen, имеющая следующий формат:

поток = fopen(имя файла, тип и способ);

Для работы с конкретным файлом в операторах ввода-вывода используется специальная переменная - указатель типа FILE, называемая потоком (еще дискриптором, указателем на файл или протсо файлом). Итак,поток - имя переменной, которая объявлена как FILE *поток; имя файла - текстовая переменная или константа. Если поток имеет значение NULL, то при открытии файла произошла ошибка. Тип и способ - текстовая перемнная или константа, состоящая из нескольких символов. Один символ - тип файла; для текстовых файлов - t, для бинарных - b. Другие - способ доступа: r - только по чтению, w - только для записи, rw - чтение и запись, a - добавление.

Например,

FILE *in; /* объявление потока */

...

in = fopen("temp.tmp", rb); /* открыть файл для чтения как бинарный*/

if (in == NULL)

printf ("Ошибка открытия файла!");

...

Для чтения из файла используется функция fscanf, использующая следующий формат:

fscanf(поток, формат, список переменных);

Для записи в файл используется функция fprintf, имеющая следующий формат:

fprintf(поток, формат, список переменных);

где поток - переменная, описанная выше, формат и список переменных используются так же, как в функциях scanf и printf.

Например,

fscanf(in, "%d, %f", &a, &b[i]); /* чтение из файла

целой переменной и элемента вещественного массива */

fprintf(out, "My name is %s", name); /* Вывод в файл

строковой переменной*/

Закрытие файла производится функцией fclose (поток);. Например,

fclose(in);

После закрытия поток можно повторно открыть на другой (или тот же) файл, с другими (или теми же) параметрами.

Перед использованием рассмотренных в данном разделе функций в программу необходимо включить файл stdio.h