Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Си_3.doc
Скачиваний:
3
Добавлен:
25.08.2019
Размер:
192 Кб
Скачать

Построчный вывод данных

Построчный вывод данных осуществляют функции puts, fputs.

Прототип функции puts:

int puts (char * string);

Функция puts выводит (копирует) строку, адрес которой определяется параметром string, в стандартный выходной поток stdout, добавляя в завершении строки ‘\n’ –символ перехода на следующую строку, то есть после вывода на экран курсор переходит в начало следующей строки. Символы выводятся до тех пор, пока не встретится завершающий строку символ ‘\0’.

Прототип функции fputs:

int fputs (char * string, FILE *stream);

Функция fputs выводит (копирует) строку, адрес которой определяется параметром string, в поток stream с текущей позиции; строки выводятся до символа ‘\0’ в строке string.

Возвращаемые значения puts и fputs:

  • код последнего выведенного символа, если вывод успешен;

  • значение EOF, если вывод неуспешен.

На экран строка выводится только после вывода \n.

Пример Построчный ввод данных с помощью функции fgets и вывод данных с помощью функции puts

#include <stdio.h>

FILE *fid;

int main(void)

{int i; char d [3][17];

printf("\n");

fid=fopen("vvv.dat", "r");

for (i=0;i<3;i++)

{fgets(d[i],17,fid); //Ввод очередной строки

d[i][15]=0; //Обнуление '\n'

printf("%s", d[i]);

puts(d[i]); //Вывод очередной строки

// и переход на следующую строку

}

fclose(fid);

return 0;

}

В файле fid расположены 3 строки по 15 символов в каждой. В каждую d[i] – вводятся символы из каждой строки файла fid:

  1. в d[i, 0]- d[i, 14] вводятся символы из каждой строки файла fid;

  2. в d[i, 15] вводится признак \n из файла fid;

  3. d[i, 16] дополняется символом конца строки \0.

Каждое выполнение оператора puts выведет значение очередной строки массива d и по его d[i, 15] =\n осуществит переход на следующую строку. Затем в соответствии с правилами выполнения puts снова произойдёт переход на следующую строку. Значения выводимых строк будут выведены не в каждой строке экрана, а через строку. Чтобы устранить такой переход, можно обнулить значение d[i, 15], то есть установить в d[i, 15] признак конца строки.

Пример Построчный ввод данных с помощью функции fgets и вывод данных с помощью функции fputs

#include <stdio.h>

FILE *fid,*fr;

int main(void)

{int i;

char d [3][17];

printf("\n");

fr=fopen("vvv.res", "w");

fid=fopen("vvv.dat", "r");

for (i=0;i<3;i++)

{fgets(d[i],17,fid);//Ввод очередной строки

printf("%s", d[i]);

fputs(d[i], fr); //Вывод очередной строки

}

fclose(fid);

fclose(fr);

return 0;

}

Так как функция fputs выводит данные в очередную позицию файла, то для построчного вывода введённых строк не требуется обнуления d[i,15] – символа перехода на следующую строку.

Форматный ввод-вывод данных текстовых файлов Форматный ввод данных

Функции для форматного ввода данных : scanf, fscanf, sscanf и cscanf. Все названные функции вводят значения, интерпретируют их в соответствии типом форматов, преобразуют их в соответствии типом аргументов и присваивают введённые значения переменным.

Прототип функции scanf:

int scanf (char *format [, arg…]);

С помощью функции scanf осуществляется ввод данных из стандартного входного потока stdin (с клавиатуры) в переменные, адреса которых задаются аргументами (arg). Функция имеет переменное количество параметров. Значение первого параметра format определяет адрес строки, которая управляет интерпретацией элементов ввода. Последующие аргументы представляют собой список адресов переменных, значения которых должны быть введены в соответствии форматами параметра format. Каждый последующий аргумент должен быть указателем на переменную типа, совместимого с типом, определённым очередным форматом в параметре format. Строка format обрабатывается слева направо: первому формату соответствует первый аргумент, второму – второй и так далее.

Прототип функции fscanf:

int fscanf (FILE * stream, char *format [, arg…]);

где * stream – указатель для файла, из которого производится ввод.

Функция fscanf читает данные из файла, связанного с указателем stream.

Прототип функции sscanf :

int sscanf (char * string, char *format [, arg…]);

где * string – указатель на строку, из которой производится ввод.

Функция sscanf читает данные из строки string.

Прототип функции cscanf:

int cscanf (char *format [, arg…]);

Функция cscanf читает данные, введённые с консоли (клавиатуры).

Возвращаемое значение функцией типа scanf:

  • количество успешно введённых и присвоенных значений;

  • значение 0, если ввод неудачен, нет значений, которые введены и присвоены переменным;

  • значение EOF, если чтение производится по концу файла.

Все функции типа scanf вводят последовательно значения из полей входного потока, интерпретируя их в соответствии с их форматом. Первое введённое значение интерпретируется в соответствии с первым форматом строки format, преобразуется в форму хранения переменной аргумента и заносится по адресу первого аргумента и так далее до конца строки format.

Если количество форматов в строке format больше, чем аргументов-указателей вводимых значений, то:

  • при вводе данных с клавиатуры система останавливается и ожидает ввода данных для лишних форматов;

  • при вводе данных из файла результат неопределён.

Если аргументов в списке больше, чем форматов в строке format, то лишние аргументы игнорируются, не получают новых значений.

Соответствие типов форматов типам переменных аргументов не контролируется компилятором. Несоответствие при выполнении программы приведёт завершению программы.

Если при вводе очередных значений из входного файла встретится ‘\n’, а форматы и элементы списка аргументов не исчерпаны, то происходит автоматический переход на следующую строку входного потока и ввод продолжается со следующей строки.