Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.85
yashaz
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 14
#1

работа со string - C++

18.09.2009, 19:17. Просмотров 3104. Ответов 4
Метки нет (Все метки)

Здравствуйте, такая проблема:
Создаю например такой класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
using namespace std;
 
class A
{
private:
    string str;
    long id;
public:
    void getdata()
    {
        cout <<"vvedite str: ";
        getline(cin, str);
        cout <<"vvedite id";
        cin >>id;
    }
    void showdata()const
    {
        cout<<"str= "<< str<<" id=:" << id << endl;
    }
};
затем создаю массив из элементов этого класса и ввожу в него данные
C++
1
2
3
4
5
6
7
8
9
10
const int MAX = 100;
    char ch;
    int i = 0;  
    A arr[MAX];
    do
    {
        arr [i++].getdata();
        cout << "\nProdoljit\' vvod? (y/n): ";
        cin >> ch;
    }while (ch != 'n');
и на 2 итерации при вводе строки быстро выводится на экран оставшиеся до 100 предложения ввести строку и число а потом вылетает ошибка программы "операция по адреу бла-бла обратилась к памяти ля-ля и тд"
getline для ввода строки с пробелами, проблема в нем, тк просто cin работает, но что ввмест него можно использовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2009, 19:17     работа со string
Посмотрите здесь:

работа со string C++
C++ Работа с string в С++
C++ Работа с классом string в C++
C++ Работа со string
C++ работа с классом string
C++ Работа с char и string ф-циями
Работа со string C++
C++ Работа с контейнером string
C++ <string> работа со строкой
Работа с char и string C++
Работа с Char и String C++
Работа с map<string, map<string, string>> C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
550 / 503 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
18.09.2009, 20:16     работа со string #2
а что должна получать в качестве второго параметра ф-я getline(cin, str) ? неужели &std::string ?
Somebody
2777 / 1591 / 142
Регистрация: 03.12.2007
Сообщений: 4,169
Завершенные тесты: 1
18.09.2009, 20:32     работа со string #3
После cin >> ch; и cin >> id; перевод строки остаётся непрочитанным. Попробуй после них
std::cin.ignore(std::numeric_limits <std::streamsize> ::max(), '\n');

novi4ok, нет, не &std::string, а std::string& :-)
yashaz
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 14
19.09.2009, 00:09  [ТС]     работа со string #4
Спасибо, Somebody, поставил
C++
1
cin.ignore(20,'\n');
, понятно как работает эта команда но мог бы ты объяснить, почему в данном примере он не читается, как я понял getline у меня воспрнимает '\n' как завершающий символ, а что там дальше его не трогает, а перевод строки там где вы сказали без getline получается читается?
Somebody
2777 / 1591 / 142
Регистрация: 03.12.2007
Сообщений: 4,169
Завершенные тесты: 1
19.09.2009, 17:47     работа со string #5
Такой принцип работы.
cin >> id будет читать из потока цифры, пока не попадётся что-то другое. Перевод строки останется в потоке.
getline(cin, str) будет читать до перевода строки, но, в отличие от operator>>, его также прочитает и проигнорирует.
То есть, после cin >> id перевод строки останется, а следующая getline прочитает пустую строку до него. То есть для чтения следующей строки надо проигнорировать оставшиеся символы текущей. (А обычно получается, что следующий cin >> n (где n - число) или типа того просто игнорирует все пробелы и переводы строки перед числом, и это может остаться незамеченным.)
Yandex
Объявления
19.09.2009, 17:47     работа со string
Ответ Создать тему
Опции темы

Текущее время: 19:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru