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

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

Войти
Регистрация
Восстановить пароль
 
t_sidalv
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 7
#1

Ошибки при работе с потоком ввода - C++

15.04.2017, 01:42. Просмотров 144. Ответов 9
Метки нет (Все метки)

Есть функция:

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
void fillarr(airport *arr, int const N)
{
 
    for (int i = 0; i < N; i++)
    {
        cout << "==============================" << endl;
        cout << " - Номер рейса: ";
        cin.get(); 
        gets_s(arr[i].numflight);
 
        cout << " - Тип самолета: ";
        cin.get();
        gets_s(arr[i].airplane);
 
        cout << " - Пункт назначения: ";
        cin.get();
        gets_s(arr[i].destination);
 
        cout << " - Время вылета: ";
        cin.get();
        gets_s(arr[i].departuretime);
        cout << "==============================" << endl << endl;
    }
}
При выводе видно, первый введенный текст остается без изменений, а с последующими - нету первой буквы.

Помогите решить проблему. Весь интернет перелазил, пробовал, все равно фигня получается. Знаю, что там может использоваться cin.ignore() Прошу как можно понятнее объяснить эту функцию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2017, 01:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибки при работе с потоком ввода (C++):

Очистка буфера ввода при работе с cin - C++
Добрый вечер! Пытаюсь научиться работать с классами, подскажите пожалуйста, что я делаю не так. В частности не работает функция enter,...

Ошибки при работе с шаблонами - C++
Не могу понять в чем дело, вылазят вот такие ошибки: Ошибка 4 error LNK2019: ссылка на неразрешенный внешний символ &quot;public: void...

Ошибки при работе с шаблонами - C++
Всем привет. Пишу упрощенный List с использованием шаблонов. Но в итоге я получаю вот такие сообщения про ошибки. &quot;class template has...

Ошибки при работе со строками - C++
Доброго времени суток! Есть такой код #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main...

Инициализировать вектор потоком ввода из консоли - C++
Как вариант: int n; cin &gt;&gt; n; std::vector&lt;int&gt; a (n); Хочу: // перегрузка оператора std::vector&lt;int&gt; a( _input_ ); //...

Ошибки линковки при работе с DirectX - C++
Создал DirectX проект, и решил разбить на файлы, создал render.cpp и main.cpp, они отвечают за разные функции, но стоит подключить к...

9
nd2
2389 / 1978 / 696
Регистрация: 29.01.2016
Сообщений: 6,435
15.04.2017, 01:57 #2
cin.get()-ы убери. Там, где (до вызова этой функции) есть ввод через cin >>, делай аналогично этому:
C++
1
(cin >> n).get();
1
t_sidalv
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 7
15.04.2017, 11:28  [ТС] #3
nd2,

C++
1
(cin >> n).get();
Мне кажется, принцип работы этой записи тот же, который и у cin. Оно будет считывать до пробела/энтера. Мне нужно, чтобы считывало строку с пробелами и все получалось без ошибок
0
nmcf
5543 / 4853 / 1647
Регистрация: 14.04.2014
Сообщений: 19,703
15.04.2017, 11:36 #4
Делай как говорят. Эта тема уже сто раз обсуждалась.
0
t_sidalv
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 7
15.04.2017, 11:47  [ТС] #5
nmcf, Я так и сделал. Считывает до пробела. Что стоит после пробела начинает записывать в последующие строки
0
nmcf
5543 / 4853 / 1647
Регистрация: 14.04.2014
Сообщений: 19,703
15.04.2017, 12:21 #6
Показывай.
0
t_sidalv
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 7
15.04.2017, 12:42  [ТС] #7
Все, я разобрался, всем спасибо. Там через cin.getline() все чудесно работает.
Но есть одна фишка. Перед входом в функцию fillarr(airportArr, N) нужно прописать cin.get(), в противном случаи, оно пропустит ввод первой строки (Номер рейса). Почему так? Или это особенности switch?

Source:

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
int num;
    do {
        cout << "Print num: " << endl;
        cout << "0: EXIT" << endl;
        cout << "1: Task №1" << endl;
        cout << "2: Task №2" << endl;
        cout << "3: Task №3" << endl;
        cout << endl;
        cin >> num;
        cout << endl;
 
        int N;
 
        switch (num)
        {
        case 0:
            cout << "Goodbye" << endl;
            break;
        case 1:
        {
            airport *airportArr = NULL;
            cout << " Введите кол-во рейсов: ";
            cin >> N;
            airportArr = new airport[N];
 
                        cin.get();
 
            fillarr(airportArr, N);
            determinationwhichairplanes(airportArr, N);
 
            cout << endl;
            break;
        }
Функция fillarr:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void fillarr(airport *arr, int const N)
{
    for (int i = 0; i < N; i++)
    {
        cout << "==============================" << endl;
        cout << " - Номер рейса: ";
        cin.getline(arr[i].numflight, 20);
 
        cout << " - Тип самолета: ";
        cin.getline(arr[i].airplane, 20);
 
        cout << " - Пункт назначения: ";
        cin.getline(arr[i].destination, 20);
 
        cout << " - Время вылета: ";
        cin.getline(arr[i].departuretime, 8);
        cout << "==============================" << endl;
    }
    cout << endl;
    
}
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
15.04.2017, 12:44 #8
Цитата Сообщение от t_sidalv Посмотреть сообщение
Почему так?
Потому что после ввода числа в потоке остается символ '\n'.
1
nmcf
5543 / 4853 / 1647
Регистрация: 14.04.2014
Сообщений: 19,703
15.04.2017, 13:11 #9
В 9-й и 23-й строках делай как писал nd2, а 26-ю убрать.
1
t_sidalv
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 7
15.04.2017, 13:22  [ТС] #10
Спасибо, все понял
0
15.04.2017, 13:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2017, 13:22
Привет! Вот еще темы с ответами:

Ошибки компиляции при работе с OpenGL - C++
Какую библиотеку нужно подключить и что нужно сделать, чтобы заработало: 1&gt;------ Построение начато: проект: 1, Конфигурация: Debug...

Ошибки при работе со строками char* - C++
Здравствуйте. Помогите пожалуйста найти ошибку, ато я что-то ослеп(( #include &lt;fstream.h&gt; #include &lt;iostream.h&gt; #include &lt;conio.h&gt;...

Ошибка при работе с потоками ввода (вывода) в файл (из файла) - C++
Изучаю перегрузку операторов ввода/вывода с файлом и без. Вылетает такая ошибка при отработанном коде: Необработанное исключение по...

Исправить ошибки при работе с функцией rand - C++
Он просто выводит максимальное число вместо того чтобы выводить рандомное или я что то не так делаю? Ознакомьтесь с правилами форума. ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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