Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ Программирование и основы алгоритмизации...doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Специальные функции ввода-вывода строк

#include <stdio.h>

char str1[]=”Введите фамилию:”;

void main()

{char name[80];

puts(str1);

gets(name);

}

В последний элемент массива str1 нуль-символ’\0’ будет записан автоматически во время компиляции при инициализации массива. Для функции puts() наличие ’\0’ является обязательным. Функция gets() начинает работу только после нажатия <Enter> и завершает свою работу при вводе ‘\n’, который автоматически передается от клавиатуры при нажатии <Enter>. При этом сам символ ‘\n’ во вводимую строку не записывается. Вместо него помещается ’\0’.

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

char* gets(char* s);

int puts(char* s);

Параметр функций одинаков – указатель на символ. Если строка прочитана удачно, gets() возвращает адрес массива s, в который производился ввод строки. В случае ошибки функция возвращает NULL. Функция puts() в случае успеха возвращает последний выведенный символ (‘\n’), - вместо ’\0’ добавляет ‘\n’. При ошибке – возвращает значение константы EOF (end of file). Константа EOF определена в stdio.h и имеет значение 0 или 1 (в зависимости от операционной системы).

Ввод-вывод символов в языке C++

1.С помощью операций ввода-вывода:

#include <iostream.h>

void main()

{char z;

cout<<”Напишите предложение с точкой в конце:”<<endl;

cin.unsetf(ios::skipws); //для ввода пробелов

for(z=’ ‘; z!=’.’;)

{cin>>z; //ввод символа с клавиатуры

cout>>z; //вывод символа на экран

}

}

По умолчанию операция >> пропускает символы-разделители. Чтобы изменить это, сбрасывают флаг skipws.

2.С помощью функций-элементов eof(), get(), put() класса потоков ввода-вывода:

#include <iostream.h>

void main()

{ int c;

cout<<”До ввода cin.eof() равно:”<<cin.eof()<<endl

<<”Введите предложение, завершающееся признаком конца файла:”

<<endl;

while((c=cin.get())!=EOF) cout.put(c);

cout<<endl<<”EOF равно:”<<c<<endl;

cout<<”После ввода cin.eof() равно:”<<cin.eof()<<endl;

}

Результат:

До ввода cin.eof() равно:0

Введите предложение, завершающееся признаком конца файла:

Проверка функций-элементов get и put ^Z

Проверка функций-элементов get и put

EOF равно:-1

После ввода cin.eof() равно:1

Примечание. Функции-элементы eof(), get(), put() используются с объектами cin и cout класса iostream потоков ввода-вывода.

Ввод-вывод строк в языке C++

1.С помощью операций ввода-вывода:

#include <iostream.h>

…………………

char word[20];

……………….

cin>>word;

…………….

cout<<word;

Оператор ввода считывает символы до тех пор, пока не встретится символ-разделитель: пробел, символ табуляции, символ новой строки или символ конца файла. Вводимая строка должна быть не длиннее 19 символов, чтобы оставить место для завершающего ’\0’. Для гарантии добавляют:

#include <iomanip.h>

………………..

cin>>setw(19)>>word;

Этот оператор указывает, что cin может считать не более 19 символов в массив word и оставить 20-й символ в массиве для ’\0’.

2.С помощью функции-элемента getline() класса потоков ввода-вывода:

char s[80];

………….

cin.getline(s, 80, ‘\n’);

Функция считывает строку текста с клавиатуры в массив s. Прекращает считывание символов, если встретится ‘\n’, или символ конца файла, или количество считанных символов окажется 79 (последний символ резервируется для ’\0’). Если встретится символ-ограничитель (‘\n’, конец файла), он считывается и отбрасывается, вместо него - ’\0’. Третий аргумент (‘\n’) можно опустить, так как функция getline имеет его по умолчанию: cin.getline(s, 80);

Примечание. В среде Builder используются строки типа AnsiString.

char* str1=”привет!”;

AnsiString str2=”привет!”;

Общее свойство строк типа char* и типа AnsiString – завершаются символом’\0’. Отличие: первый символ ‘п’ находится в str1[0] и в str2[1].

Преобразование строки типа char* в строку типа AnsiString:

(AnsiString)(строка типа char*);(вторые скобки необязательны).

Преобразование строки типа AnsiString в строку типа char*:

(строка типа AnsiString).c_str(); (скобки необязательны).