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

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

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

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

18.09.2009, 19:17. Просмотров 3116. Ответов 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 работает, но что ввмест него можно использовать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2009, 19:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос работа со string (C++):

Работа с map<string, map<string, string>> - C++
Всем привет! Что-то запарился в неожиданном месте... Есть тип данных, который выглядит так: map&lt;string, map&lt;string,string&gt;&gt; Мне...

Доступ к паре в map<string, vector<pair<string, string>>>Temp - C++
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string, string&gt;&gt;&gt;Temp) { ...

Работа со string - C++
Посоветуйте как сделать? Есть переменная типа string .Ей присваивается значение дробного числа , например 17.5 . Нужно написать 2 функции...

работа со string - C++
Определить, имеется ли в заданной строке подстрока, содержащая заданное число повторяющихся заданных символов. (нужно штобы в задании...

Работа с string в С++ - C++
Переменная string str = &quot;123456&quot;. Необходимо второй элемент переменной str (str) преобразовать в число и передать в переменную int i. Как...

Работа со string - C++
Есть строка string. Нужно разбить ее на несколько слов используя определенный символ. Никак не могу понять как. Помогите)

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

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

Работа с классом string в C++ - C++
Как прочитать данные из файлы в строковую переменную string?

<string> работа со строкой - C++
Добрый день, уважаемы формучане. Не очень силен в работе со строками. Надеюсь на Вашу помощь. Допустим у меня есть некая строка: string...

работа с классом string - C++
у меня есть переменная типа string key(из 16 символов),мне нужно получить из нее 8 отдельных переменных (k) каждый по 2 байта,как это...

Работа с char и string - C++
Привет. Продолжаю изучать C++. Можете посоветовать хорошую книгу или что-нибудь вроде книги(может статью), про работу с типами char и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.09.2009, 17:47
Ответ Создать тему
Опции темы

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