cin.get(CStyleStr, 9); // прекращение вставки на 9-ом символе
Этот более безопасный способ вставки текста в буфер стиля С приведен в листинге 27.5.
ЛИСТИНГ 27.5. Вставка в буфер стиля С без выхода за его границы__________________________
#include
#include
using namespace std;
int main()
{
cout « "Enter a line: " « endl;
char CStyleStr[10] = {0};
cin.get(CStyleStr, 9);
cout « "CStyleStr: " « CStyleStr « endl;
return 0;
}
Результат
Enter a line:
Testing if I can cross the bounds of the buffer
CStyleStr: Testing i
Анализ
Как демонстрирует вывод, благодаря использованию в строке 8 метода c i n : : g e t (),
буфер стиля С были записаны только первые девять символов. Это самый безопасный способ работы со строками стиля С.
СОВЕТ По возможности не используйте строки стиля С и массивы типа char. Исполь зуйте вместо них тип std::string.
Использование объекта std :: cin для ввода
в переменную типа std :: string
Объект c in — весьма универсальный инструмент, позволяющий поместить введенную пользователем строку непосредственно в переменную типа s t d : : s t r i n g :
596 ЗАНЯТИЕ 27. Применение потоков для ввода и вывода
std::string Input;
cin » Input; // прекращение вставки при первом пробеле
В листинге 27.6 приведен ввод с использованием объекта c i n в переменную типа s t d : : s t r i n g .
И С Т И Н Г 27 .6 . Вставка текста в строку std::string с использованием объекта cin_______
#include
#include
using namespace std;
3:
int main ()
{
cout « "Enter your name: ";
string Name;
cin » Name;
cout « "Hi " « Name « endl;
return 0;
}
Результат
Enter your name: Siddhartha Rao
Hi Siddhartha
Анализ
Вывод отобразил мое имя не полностью, поскольку так была реализована программа.
ожидал, что переменная Name, заполняемая объектом c i n в строке 8, будет содержать введенное мной имя и фамилию, а не только имя. Что же произошло? Объект c i n остано вил вставку, когда встретился с первым пробелом.
Чтобы позволить пользователю ввести строку полностью, включая пробелы, необходи мо использовать функцию g e t l i n e ():
string Name;
getline(cin, Name);
Применение функции g e t l i n e () с объектом c i n показано в листинге 27.7.
Л И СТИ Н Г 2 7 .7 . Чтение введенной пользователем строки полностью
использованием функции getline () и объекта cin__________________________________
#include
#include
using namespace std;
3:
int main()
{
cout « "Enter yourname:" ;
string Name;
getline(cin, Name);
cout « "Hi " « Name <
Использование объекта std::fstream для работы с файлом
|
597
|
10:
return 0;
12: }
Результат
Enter your name: Siddhartha Rao
Hi Siddhartha Rao
Анализ
Функция g e t l i n e (), как показано в строке 8, реш ила проблему ввода символа про бела. Теперь вывод содержит введенную пользователем строку полностью.
Использование объекта std :: f stream для работы с файлом
Класс s t d : : f s tr e a m языка C++ обеспечивает (относительно) независимый от плат
формы доступ к файлу. Класс s t d : : f s tre a m наследует класс s t d : : o f s tr e a m для записи
в файл и класс s t d : : o f s tr e a m для чтения из него.
Другими словами, класс s t d : : f s tr e a m обеспечивает возможность как чтения, так и
записи.
СОВЕТ
Чтобы использовать класс
std::fstream,
включите его заголовок:
#include
Открытие и закрытие файла с использованием методов open () и close ()
Прежде чем использовать объект класса f s tre a m , o f s tr e a m или i f stre a m , необходи мо открыть файл с помощью метода open ():
Do'stlaringiz bilan baham: |