Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. CleanString - очистка строк
  2. Аргументы командной строки редактора.
  3. Витрати виробництва у короткостроковому періоді, їх динаміка та закон спадної віддачі
  4. Внимательно прочтите следующие строки
  5. ВОСЕМЬ СТРОК
  6. Выберите строку с двойными согласными в словах

Для ввода/вывода строк и символов используются либо функции, унаследованные из языка С, либо потоки С++.

Пример: ввод/вывод строк с помощью функций языка С.

#include <sdtio.h>

int main () {

const int n = 20;

char s[n];

printf (“Введите строку\n”);

scanf (“%s”, s);

printf (“\nВы ввели строку\n”)

printf (“%s”, s);

return 0;

}

Здесь используются функции scanf и printf со спецификацией %s (строка). Ввод при этом будет выполняться до первого пробельного символа. Для ввода строк из нескольких слов, используется спецификация %с (символы) с указанием максималного количества вводимых символов, например:

scanf (“%50c”, s);

Количество символов может быть только целой константой.

При выводе можно задать перед спецификацей %s количество позиций, отводимых под строку:

printf (“%50s”, s);

Строка при этом выравнивается по правому краю отведенного поля. Если заданное количество позиций недостаточно для размещения строки, оно игнорируется, и строка выводится целиком.

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

Чтение символа из стандартного потока ввода

int getchar(void);

Возвращает очередной символ в форме int из стандартного потока ввода. Если символ не может быть прочитан, то возвращается значение EOF.

EOF – константа, сообщающая об окончании файла, представляет собой отрицательное целое число (заголовочный файл stdio.h).

Чтение символа с клавиатуры до появления символа новой строки.

char *gets(char *s);

Функция читает символы с клавиатуры до появления символа новой строки и помещает их в строку s (сам символ новой строки в строку не включается). Возвращает указатель на s.

Вывод символа на стандартное устройство вывода

int putchar (int ch);

Выводит символ ch на стандартное устройство вывода. Если вывод успешен, возвращается значение ch, иначе возвращается значение EOF.

Вывод строки на стандартное устройство вывода

int puts(char *s);

Выводит строку S на стандартное устройство вывода, добавляя в конце символ новой строки. Возвращает неотрицательное значение при успехе или EOF — при ошибке.

Функции для работы с многобайтовыми символами

Для работы с многобайтовыми символами предназначены функции getwchar и putwcchar.

Данные функции аналогичны функциям для работы с однобайтовыми символами, но вместо типа int используется тип wint_t. Этот тип является целочисленным типом для хранения символов расширенного набора (заголовочный файл wctype.h).

Например, функция getwchar имеет формат, аналогичный формату функции getchar, и отличается только типом возвращаемого значения:

wint_t getwchar(void);

Пример: ввод/вывод строк с использованием специалных функций стандартной библиотеки.

#include <sdtio.h>

int main () {

const int n = 50;

char s[n];

printf (“Введите строку\n”);

gets (s);

printf (“\nВы ввели строку\n”)

puts (s);

return 0;

}

Функциями scanf и printf удобнее пользоваться, когда в одном операторе требуется ввести или вывести данные различных типов. Если выполняется работа только со строками, проще применять функции puts и gets.

Пример: ввод/вывод строк с помощью потоков С++.

#include <iostream.h>

int main () {

const int n = 20;

char s[n];

cout << “Введите строку: ”;

cin >> s;

cout << endl << “Вы ввели строку: ” << s;

return 0;

}

Ввод в данном случае также будет выполняться до первого пробельного символа. Если необходимо ввести строку из нескольких слов, можно использовать для каждого слова отдельные строковые переменные:

#include <iostream.h>

int main () {

const int n = 20;

char s[n], t[n], r[n];

cout << “Введите строку: ”;

cin >> s >> t >> r;

cout << endl << “Вы ввели строку: ” << s << “ ”<< t << “ ” << r;

return 0;

}

Чтобы ввести строку из нескольких слов в одну строковую переменную, используются методы getline или get класса istream, объектом которого является поток cin (классы и потоковые классы будут изучены позже):

#include <iostream.h>

int main () {

const int n = 50;

char s[n];

cout << “Введите строку: ”;

cin.getline(s,n);

cout << endl << “Вы ввели строку: ” << s << endl;

cout << “Введите вторую строку: ”;

cin.get(s,n);

cout << endl << “Вы ввели строку: ” << s;

return 0;

}

Метод getline считывает из входного потока n – 1 символов или менее (если символ перевода строки \n встретится раньше) и записывает их в строковую переменную s. Символ перевода строки не записывается в строковую переменную, вместо него размещается нуль-символ. Если символов в строке более n – 1, слудующий ввод будет выполняться из этой же строки, начиная с первого несчитанного символа.

Метод get работает аналогично, но оставляет в потоке символ перевода строки и только после этого добавляет нуль-символ.

Нельзя повторно обращаться к методу get с двумя аргументами не удалив символ \n из входного потока:

сin.get(s,n); // 1 – считывание 1-ой строки

cout << s << endl; // 2 – вывод 1-ой строки

сin.get(s,n); // 3 – считывание 2-ой строки

cout << s << endl; // 4 – вывод 2-ой строки

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

Решить эту проблему можно, удалив символ \n их входного потока, вызвав метод get без параметров:

сin.get(s,n); // 1 – считывание 1-ой строки

cin.get(); // 2 – удаление символа новой строки

cout << s << endl; // 3 – вывод 1-ой строки

сin.get(s,n); // 4 – считывание 2-ой строки

cout << s << endl; // 5 – вывод 2-ой строки

Хотя лучше использовать в таких случаях метод getline, удаляющий символ \n из входного потока.

Если требуется ввести несколько строк, метод getline удобно использовать в заголовке цикла:

#include <iostream.h>

int main () {

const int n = 50;

char s[n];

while (cin.getline(s,n)) { /* обработка строки*/}

return 0;

}

Пример: ввод/вывод символов с помощью потоков С++

#include <iostream.h>

int main (){

char с,d;

cout << “Введите два символа: ”

cin >> с >> d;

cout << endl << “Вы ввели: ”с << “ ” << d;

return 0;

}

Вводимые символы должны разделяться пробелmysvb символами, поэтому таким способом ввести такие символы нельзя. Для ввода любого символа можно пользоваться методами get() или get(c):

#include <iostream.h>

int main (){

char с,d;

cout << “Введите два символа: ”

с = cin.get(); cin.get(d);

cout << endl << “Вы ввели: ”с << “ ” << d;

return 0;

}

Метод get() возвращает код извлеченного из потока символа или EOF, а метод getc() записывает извлеченный символ в переменную, переданную ему в качестве аргумента, а возвращает ссылку на поток.

Пример: ввод/вывод символов (включая пробельные) с использованием функций языка С

#include <stdio.h>

int main (){

char с;

printf(“Введите символ: ”);

с = getchar();

printf(“\nВы ввели: “);

putchar ();

return 0;

}


Дата добавления: 2015-07-21; просмотров: 75 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
ячейки из пространственных георешеток.| Функции стандартной библиотеки для работы со строками в стиле С (заголовочный файл string.h).

mybiblioteka.su - 2015-2024 год. (0.022 сек.)