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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 84
#1

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

01.11.2013, 11:26. Просмотров 1580. Ответов 8
Метки нет (Все метки)

Всем привет! У меня не получается ввести строку с пробелами. Ввожу, например: 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2013, 11:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать ввод строки с пробелами в динамическом массиве структур? (C++):

Ошибка присваивания в динамическом массиве структур - C++
Доброго времени суток! Я новичок в программировании, прошу не пинать сильно :) Изучаю С++ по книге С.Прата &quot;Язык программирования С++....

Оператор getline в динамическом массиве структур - C++
Суть в том что при выполнении программы, оператор присваивает переменной значение &quot;&quot;, не требуя при этом ввода. Выглядит это так. ...

Как переставить строки в динамическом двумерном массиве? - C++
Нужно было написать программу, которая переставляет строки матрицы так, чтобы значения в столбце K шли в порядке убывания. и обязательно...

Нюансы ввода/вывода: как правильно организовать ввод строки с пробелами? - C++
Доброе время суток. Такой вопрос: у меня есть структура, содержащая ФИО, адрес, телефон, возраст. Хотелось, чтобы была возможность...

Ввод строки с пробелами - C++
Собственно вот текст, не хочет никакими функциями принимать строку stud.fio с пробелами, испробовал всё, до чего голова дошла. Нужно чтобы...

Ввод строки с пробелами - C++
нижеприведенный код получает строку до первого пробела, а нужно получать с учетом всех символов, что были введены. хелп, гайз. ...

8
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 1
01.11.2013, 11:37 #2
Как сделать что бы пробел считался и программа не зависала?
1
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 84
01.11.2013, 12:09  [ТС] #3
с cin.ignore() работает, но в книге, которую я читаю про это не говорилось... Возможно ли сделать это как-то по другому? Может быть я неправильно что-то написал?
0
olya7
477 / 294 / 91
Регистрация: 18.02.2013
Сообщений: 684
01.11.2013, 13:18 #4
как вариант использовать gets() из stdio.h, считывает строку до введенного Enter
1
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 84
01.11.2013, 13:30  [ТС] #5
А как мне записать вот это
Цитата Сообщение от jekmut Посмотреть сообщение
cin >> car->name;
с использованием gets()?
0
olya7
477 / 294 / 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;
}
0
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 84
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;
...
то все работает, а в массиве структур - не катит...
0
olya7
477 / 294 / 91
Регистрация: 18.02.2013
Сообщений: 684
01.11.2013, 18:43 #8
ну, у меня это работает) а что конкретно непонятно?
0
jekmut
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 84
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
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2013, 21:12
Привет! Вот еще темы с ответами:

Ввод строки с пробелами - C++
Знающие, помогите решить такую проблему. Надо составить маленькую программку, представление аудио-коллекции, в общем дело не сложное ,...

Ввод строки char с пробелами - C++
Всем доброго дня. Подскажите плз, У меня есть указатель char *str как ввести в него строку с пробелами которую ввел пользователь. Класс...

Ввод строки с пробелами произвольной длины - C++
Помогите, пожалуйста. Нужно ввести строку произвольной длины с пробелами и различными символами. Мой код: char *s; s=new...

Ввод строки с пробелами в поле char c++ - C++
Это часть файла header.h; В программе в поле Name нужно ввести ФИО с пробелами, но программа выдает только MMMMMMMM, если использовать...


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

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

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