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

Как сделать ввод строки с пробелами в динамическом массиве структур? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 54
01.11.2013, 11:26     Как сделать ввод строки с пробелами в динамическом массиве структур? #1
Всем привет! У меня не получается ввести строку с пробелами. Ввожу, например: Audi TT, TT отбрасывает. Дальше из-за этого не получается ввести год выпуска авто. Если ввожу одно слово, то работает нормально. Жду помощи, спасибо!

Сама программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <conio.h>
 
using namespace std;
 
struct Cars
{
  string name;
  int year;
};
 
int main()
{
  int numberOfCars = 0;
  cout << "How many cars are written in the directory? ";
  cin >> numberOfCars;
  
  Cars * car = new Cars[numberOfCars];
  for(int i = 0; i < numberOfCars; i++)
  {
    cout << "name: ";
    //cin >> car->name;
    getline(cin, car->name).get();
    cout << "year: ";
    cin >> car->year;
  }
  
  delete [] car;
  
  getch();
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2013, 11:26     Как сделать ввод строки с пробелами в динамическом массиве структур?
Посмотрите здесь:

C++ Как в динамическом массиве найти наибольшее значение?
Простой ввод строки с пробелами через string C++
C++ Ввод строки с пробелами произвольной длины
C++ Ввод строки с пробелами
C++ Ввод строки char с пробелами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5437 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
01.11.2013, 11:37     Как сделать ввод строки с пробелами в динамическом массиве структур? #2
Как сделать что бы пробел считался и программа не зависала?
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 54
01.11.2013, 12:09  [ТС]     Как сделать ввод строки с пробелами в динамическом массиве структур? #3
с cin.ignore() работает, но в книге, которую я читаю про это не говорилось... Возможно ли сделать это как-то по другому? Может быть я неправильно что-то написал?
olya7
476 / 293 / 91
Регистрация: 18.02.2013
Сообщений: 684
01.11.2013, 13:18     Как сделать ввод строки с пробелами в динамическом массиве структур? #4
как вариант использовать gets() из stdio.h, считывает строку до введенного Enter
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 54
01.11.2013, 13:30  [ТС]     Как сделать ввод строки с пробелами в динамическом массиве структур? #5
А как мне записать вот это
Цитата Сообщение от jekmut Посмотреть сообщение
cin >> car->name;
с использованием gets()?
olya7
476 / 293 / 91
Регистрация: 18.02.2013
Сообщений: 684
01.11.2013, 16:12     Как сделать ввод строки с пробелами в динамическом массиве структур? #6
Только без string
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <iomanip.h>
 
//using namespace std;
 
 
struct Cars
{
  char name[50];
  int year;
} *car;
 
int main()
{
  int numberOfCars,i;
  char buf[50];
 
 
  cout << "How many cars are written in the directory? ";
  cin >> numberOfCars;
  
  car = new Cars[numberOfCars];
 
  for( i=0; i < numberOfCars; i++)
  {
      buf[0]='\0';
      cin.clear();
    cout << "name: "<<endl;
    gets((car+i)->name);
 
    
    cout << "year: ";
    cin>>car[i].year;
 
  }
  for( i = 0; i < numberOfCars; i++)
  {
       cout<<car[i].name<< setw(15)<<car[i].year<<endl;
   
  }
  
  delete [] car;
 
  return 0;
}
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 54
01.11.2013, 18:13  [ТС]     Как сделать ввод строки с пробелами в динамическом массиве структур? #7
olya7, спасибо Вам за помощь, но эта реализация трудновата для моего понимания. Да и к тому же программа пропускает ввод переменной name и сразу переходит к переменной year. Вобщем, я читаю книгу С. Прата. Само задание на 256-ой странице. До этого задания еще не рассматривалось:
C++
1
2
3
4
5
6
7
#include <iomanip.h>
...
cin.clear();
...
gets((car+i)->name);
...
setw(15)
Должно быть более простое решение...
Дело в том, что когда я пишу, например, так:
C++
1
2
3
4
5
...
string s;
getline(cin, s);
cout << s;
...
то все работает, а в массиве структур - не катит...
olya7
476 / 293 / 91
Регистрация: 18.02.2013
Сообщений: 684
01.11.2013, 18:43     Как сделать ввод строки с пробелами в динамическом массиве структур? #8
ну, у меня это работает) а что конкретно непонятно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2013, 21:12     Как сделать ввод строки с пробелами в динамическом массиве структур?
Еще ссылки по теме:

Оператор getline в динамическом массиве структур C++
Как исправить ошибку в динамическом массиве? C++
C++ В двухмерном динамическом массиве упорядочить строки по возрастанию первых элементов

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

Или воспользуйтесь поиском по форуму:
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 54
01.11.2013, 21:12  [ТС]     Как сделать ввод строки с пробелами в динамическом массиве структур? #9
Хочу, чтоб в переменную name записывалась строка с пробелами, например: Chevrolet Corvette. Далее нажимаю enter и ввожу год выпуска и т.д.

В этом случае:
C++
1
2
3
string s;
getline(cin, s);
cout << s;
получается ввести строку с пробелами и вывести ее на экран.

А в этом:
C++
1
2
3
4
5
6
7
8
for(int i = 0; i < numberOfCars; i++)
  {
    cout << "name: ";
    //cin >> car->name;
    getline(cin, car->name).get(); // или cin.get();
    cout << "year: ";
    cin >> car->year;
  }
не получается.
Может быть загвоздка здесь: car->name
Yandex
Объявления
01.11.2013, 21:12     Как сделать ввод строки с пробелами в динамическом массиве структур?
Ответ Создать тему
Опции темы

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