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

Вопрос про cin.getline() - C++

Восстановить пароль Регистрация
 
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
11.08.2011, 00:12     Вопрос про cin.getline() #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
        char mas[20];
        cout<<"Add Age  ";
        cin>>Age;
 
        cout<<"Add Name  ";
        cin.getline(mas,20);
        Name = new char[strlen(mas)+1];
        strcpy(Name, mas);
 
        cout<<"Add University  ";
        cin.getline(mas,20);
        University = new char[strlen(mas)+1];
        strcpy(University, mas2);
Почему проскакивает ввод имени и сразу вводится University?

 Комментарий модератора 
Сообщения не выделяем, кому надо - тот и так прочитает, кому не надо - и так не станет читать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2011, 00:12     Вопрос про cin.getline()
Посмотрите здесь:

C++ два вопроса по С++,вопрос про заг.файла и поток cin
cin И getline C++
cin.getline() C++
C++ cin.getline
C++ cin.getline
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
11.08.2011, 00:20     Вопрос про cin.getline() #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        int Age;
    char mas[20];
    cout<<"Add Age  ";
    cin>>Age;
    cin.ignore();//должно помочь
    
        cout<<"Add Name  ";
    cin.getline(mas,20);
    char* Name = new char[strlen(mas)+1];
    strcpy(Name, mas);
    
    cout<<"Add University  ";
    cin.getline(mas,20);
    char *University = new char[strlen(mas)+1];
    strcpy(University, mas2);
C++
1
strcpy(University, mas2);
кстати почему здесь mas2? по идеи должно быть просто mas.
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
11.08.2011, 00:29  [ТС]     Вопрос про cin.getline() #3
Цитата Сообщение от silentnuke Посмотреть сообщение

кстати почему здесь mas2? по идеи должно быть просто mas.
Да это там я одну вещь удалял, тут забыл убрат 2 щас уберу, ну проблема не в этом.

Добавлено через 2 минуты
Цитата Сообщение от silentnuke Посмотреть сообщение
cin.ignore();//должно помочь
Не помогло.
Сыроежка
Заблокирован
11.08.2011, 00:34     Вопрос про cin.getline() #4
Цитата Сообщение от silentnuke Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        int Age;
    char mas[20];
    cout<<"Add Age  ";
    cin>>Age;
    cin.ignore();//должно помочь
    
        cout<<"Add Name  ";
    cin.getline(mas,20);
    char* Name = new char[strlen(mas)+1];
    strcpy(Name, mas);
    
    cout<<"Add University  ";
    cin.getline(mas,20);
    char *University = new char[strlen(mas)+1];
    strcpy(University, mas2);
C++
1
strcpy(University, mas2);
кстати почему здесь mas2? по идеи должно быть просто mas.
Как уже здесь было отмечено, проблема в том, что после воода возраста, то есть переменной Age в буфере сохранился символ конца строки. Когда вы вызываете функцию getline она считывает этот символ конца строки.

Вам лучше чем-то одним пользоваться: либо вводить все через getline, либо напрямую с помощью оператора >>.
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
11.08.2011, 00:44  [ТС]     Вопрос про cin.getline() #5
тоесть хочешь сказать что лучше тогда использовать cin>>mas ?
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
11.08.2011, 00:47     Вопрос про cin.getline() #6
Цитата Сообщение от Ree.exe Посмотреть сообщение
тоесть хочешь сказать что лучше тогда использовать cin>>mas ?
если в строке нет пробелов, то да.
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
11.08.2011, 00:48  [ТС]     Вопрос про cin.getline() #7
Да в строке нет пробелов.
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
11.08.2011, 00:53     Вопрос про cin.getline() #8
тогда всмело можно использовать.
кстати попробуйте вместо cin.ingore() использовать _flushall(), может это поможет.
просто у себя проверил, оба вариант срабатывают.
Сыроежка
Заблокирован
11.08.2011, 00:56     Вопрос про cin.getline() #9
Цитата Сообщение от Ree.exe Посмотреть сообщение
тоесть хочешь сказать что лучше тогда использовать cin>>mas ?
Хочу сказать, что лучше чем-то одним пользоваться. Можно для ввода Age также использовать getline, а затем с помощью функции atoi переводить данные в число. Либо пользоваться только оператором >> при условии, что в mas должно ввестись одно слово без пробелов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2011, 12:00     Вопрос про cin.getline()
Еще ссылки по теме:

getline(cin, str) и cin>> C++
getline(cin, ); C++
C++ Cin вместо cin.getline

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

Или воспользуйтесь поиском по форуму:
IrineK
Заблокирован
11.08.2011, 12:00     Вопрос про cin.getline() #10
Попробуйте не cin.ignore(), а cin.sync().
Yandex
Объявления
11.08.2011, 12:00     Вопрос про cin.getline()
Ответ Создать тему
Опции темы

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