2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 42
|
||||||
1 | ||||||
Создать динамическую струтуру-массив с типом string и int31.07.2014, 11:21. Показов 1898. Ответов 9
Метки нет (Все метки)
Здравствуйте. Учу C++ по книге Прата и делаю его задачи. И тут попалась вот такая задача: создать динамическую струтуру-массив с типом стринг и int. Но дело в том, что когда я с помощью getline() присваиваю значение структуре, он не даёт даже ввести строку и сразу переходит к вводу значения int. То есть вывод получается таким:
Кликните здесь для просмотра всего текста
Сколько автомобилей поместить в каталог? 2
Автомобиль #1 Введите производителя: Укажите год выпуска: 1952 Автомобиль #2 Введите производителя: Укажите год выпуска: 1951 Ваша коллекция: 1952 1951 Вот сам код:
0
|
31.07.2014, 11:21 | |
Ответы с готовыми решениями:
9
Преобразовать массив с типом char в массив с типом int Too few parameters in call to 'Lechebnica::AddNewElement(int,int,string,string,int,string) Создать класс String – строку, используя динамическую память Операция ||: нельзя применить с типом int и int |
102 / 93 / 36
Регистрация: 01.04.2013
Сообщений: 654
|
||||||
31.07.2014, 11:28 | 2 | |||||
0
|
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 42
|
|
31.07.2014, 11:36 [ТС] | 3 |
Не помогло. Не понимаю в чём причина.
Добавлено через 3 минуты Факт в том, что если просто добавить в этот цикл сосвем другую стринг переменную, которая вообще не относится к структуре, происходит тоже самое (!). Или если вынести getline(cin, cr[i].name); за пределы цикла то тоже самое.
0
|
102 / 93 / 36
Регистрация: 01.04.2013
Сообщений: 654
|
|
31.07.2014, 11:39 | 4 |
Как это не помогло? У меня всё работает как надо (компилятор MSVS 2010)
0
|
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 42
|
||||||
31.07.2014, 11:47 [ТС] | 5 | |||||
Мда, сколько чудес приносит нам C++. Просто добавил после cout << "Автомобиль #" << number - --j << endl << endl; стринг-переменную (самое главное она не относится к структуре) и getline(). После этого гетлайны, идущие после неё, стали записывать в структуру значения. Я не понимаю как это работает. Просто хотел проверить, пишет ли он вообще в другие стринг-переменные в самом цикле. Может подскажете, почему это помогло?
0
|
Модератор
13704 / 10907 / 6473
Регистрация: 18.12.2011
Сообщений: 29,117
|
||||||
31.07.2014, 11:53 | 6 | |||||
Сообщение было отмечено proninyaroslav как решение
Решение
Весь сыр-бор из-за следующего
После этого чтения указатель входного потока cin стоит на символе конца строки ('\n') Соответственно в цикле следующая операция чтения строки getline(cin, cr[i].name); воспринимает этот символ за целую (пустую) строку. Я этот нюанс решаю простым дополнительным чтением символа
1
|
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 42
|
||||||
31.07.2014, 11:57 [ТС] | 7 | |||||
Усовершенствовал код, просто добавив cin.get() вместо стринга и getline(). Получилось так:
0
|
Модератор
13704 / 10907 / 6473
Регистрация: 18.12.2011
Сообщений: 29,117
|
||||||
31.07.2014, 12:10 | 8 | |||||
Не туда вставили. Потеряете первую букву у первого производителя.
(cin >> cr[i].age).get();
0
|
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 42
|
|||||||||||
31.07.2014, 12:21 [ТС] | 9 | ||||||||||
zss, вообще то не потерял). Если внимательно посмотрите, то выше цикла у меня следующее:
0
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||||||
31.07.2014, 12:38 | 10 | |||||
Вместо cin.get() лучше тогда уж перед каждым getline делать следующее:
1
|
31.07.2014, 12:38 | |
31.07.2014, 12:38 | |
Помогаю со студенческими работами здесь
10
Тип int не совпадает с типом int list Преобразовать массив String в двумерный массив int Создать массив размера n+1, не используя динамическую память Конвертация string в массив int Не получается массив int из строки string Вывести двумерный массив с int и string Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |