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

Ввод имени в программу с клавиатуры, содержащее 2 или более слова - C++

Восстановить пароль Регистрация
 
mustang96
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 16
24.05.2013, 17:59     Ввод имени в программу с клавиатуры, содержащее 2 или более слова #1
Помогите, пожалуйста, сделать возможным ввод имени, состоящего из нескольких слов. Например, пункт назначения "Москва" читается без проблема, а "Нижний Новгород" нет - второе слово "Нижний" распознаётся уже как номер рейса. Наверное, это нужно делать через getline, не могу понять как

На фотографии-изначальное задание

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
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <cctype>
#include <cstring>
#include <iomanip>
#include <fstream>
#include <Windows.h>
using namespace std;
 
int main()
{
 
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
    int i,j;
    struct AEROFLOT
    {
        char kudaletim[30];
        int nomerreisa;
        char planetype[10];
    };
    AEROFLOT Bort[7];
    for (int i=0; i <= 6; i++)
    {
        cout << "Введите пункт назначения рейса " << (i+1) << " \n";
            cin>>Bort[i].kudaletim;
        cout << "Введите номер рейса\n";
            cin>>Bort[i].nomerreisa;
        cout << "Введите тип самолёта\n";
            cin>>Bort[i].planetype;
    }
    for ( i=0; i<=5;i++)
        for ( j=i+1; j<=6;j++)
            if (Bort[i].nomerreisa>Bort[j].nomerreisa)
            {
                AEROFLOT a = Bort[i];
                Bort[i] = Bort[j];
                Bort[j] = a;
            }
 
    cout << "-Пункт назначения-    -№ рейса-   -тип самолёта-\n";
    for (int i=0; i<=6;i++)
         cout << Bort[i].kudaletim << "  " << Bort[i].nomerreisa << "  " << Bort[i].planetype << "\n";
    bool z= true;
    char punkt[30];
    cout << "Введите пункт назначения\n";
    cin >> punkt;
    for(int i=0; i<=6;i++)
        if(strcmp(Bort[i].kudaletim,punkt)==0)
        {
        cout << Bort[i].kudaletim << "  "<< Bort[i].nomerreisa << "  " << Bort[i].planetype << "\n";
        z=false;    
        }   
 
    if(z) cout<< "Рейсов по вашему запросу не найдено\n\n";
    system ("pause");
    return 0;
}
Миниатюры
Ввод имени в программу с клавиатуры, содержащее 2 или более слова  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2013, 17:59     Ввод имени в программу с клавиатуры, содержащее 2 или более слова
Посмотрите здесь:

Ввод имени файла с клавиатуры C++
Сделать программу более компактной + Ручной ввод размерности квадратной матрицы. C++
C++ Ввод имени входного/выходного файла с клавиатуры (fstream)
C++ Написать программу, которая вводит с клавиатуры строку не более 100 символов, еще одну строку не более 50 символов и выводит на экран позиции вхождени
C++ Реализовать ввод с клавиатуры в программу
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
24.05.2013, 18:15     Ввод имени в программу с клавиатуры, содержащее 2 или более слова #2
C++
1
cin.getline(Bort[i].kudaletim,30);
mustang96
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 16
24.05.2013, 18:23  [ТС]     Ввод имени в программу с клавиатуры, содержащее 2 или более слова #3
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
cin.getline(Bort[i].kudaletim,30)
Всё равно не распознаёт
dalay_lama
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 437
24.05.2013, 18:25     Ввод имени в программу с клавиатуры, содержащее 2 или более слова #4
чтобы взять строку полностью вместе с пробелами можно использовать getline или get. Синтаксис такой:
C++
1
2
char name[20];
cin.getline(name,20);//первый аргумент имя переменной, второй размер массива переменной
Пример get
C++
1
2
cin.get(name,20);//теже аргументы
cin.get();//считываем знак каретки
Отличия между ними в том, что getline считывает всю строку вместе с кареткой(enter), а get, считывает всю строку до знака каретки, т.е. после того как считали строку в переменную, на входе остаётся просто ввод и если ты потом попытаешься ввести ещё одну переменную, то в неё просто попадёт ввод, программа тебе даже не даст возможности ничего ввести, для этого и используем cin.get(), можно это ещё записать так:
C++
1
cin.get(name,20).get();//тоже самое что и код выше
Ну и ещё один нюанс, если перед вводом строки, ты считал переменную числового вида, т.е. cin >>number, тогда будет так же проблема что и с cin.get() и сделать нужно будет тоже самое, что и с cin.get()
Вот как будет выглядеть код для твоего случая:
C++
1
2
3
4
5
6
7
        cout << "Введите пункт назначения рейса " << (i+1) << " \n";
            cin.getline(Bort[i].kudaletim,30);
        cout << "Введите номер рейса\n";
            cin>>Bort[i].nomerreisa;
            cin.get();//то, о чём я говорил после ввода числового значения
        cout << "Введите тип самолёта\n";
            cin.getline(Bort[i].planetype,20);
А вообще, судя по твоему вопросу, лучше тебе какую-нибудь книженцию почитать для новичков, на форуме вывесили хороший список литературы, лично я читаю Прата С. c++ лекции и упражения, не знаю пока как в других, ну там очень хорошо описывается то что ты как раз спросил.
mustang96
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 16
24.05.2013, 18:33  [ТС]     Ввод имени в программу с клавиатуры, содержащее 2 или более слова #5
skorik-1992, спасибо большое)
да, стоит почитать
Yandex
Объявления
24.05.2013, 18:33     Ввод имени в программу с клавиатуры, содержащее 2 или более слова
Ответ Создать тему
Опции темы

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