Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


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




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

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

#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;

}

Вводимые символы должны разделяться пробельными символами, поэтому таким способом ввести такие символы нельзя. Для ввода любого символа можно пользоваться методами 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;

}





Поделиться с друзьями:


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 777 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Логика может привести Вас от пункта А к пункту Б, а воображение — куда угодно © Альберт Эйнштейн
==> читать все изречения...

2303 - | 2226 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.