56 / 56 / 16
Регистрация: 01.08.2011
Сообщений: 141
1

Вопрос про cin.getline()

11.08.2011, 00:12. Показов 1117. Ответов 9
Метки нет (Все метки)

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?

 Комментарий модератора 
Сообщения не выделяем, кому надо - тот и так прочитает, кому не надо - и так не станет читать.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2011, 00:12
Ответы с готовыми решениями:

Опять про cin.getline и невызов
я знаю, что вопрос много раз поднимался, но везде ссылки или описания типа делай так и все - это я...

Метод getline(cin, m) не срабатывает без cin.ignore() / Ревью кода
Почему в моем случае getline(cin, m) не срабатывает без cin.ignore() ? Если по коду есть...

Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами
Нужна помощь. Задача продемонстрировать различие между вводом с помощью cin.get и cin.getline с...

Объясните работу методов cin.getline и cin.ignore
Фрагмент программы ниже. Что делают cin.getline и cin.ignore (12-13 строки) void...

9
Android Programmer
139 / 140 / 10
Регистрация: 08.12.2010
Сообщений: 421
11.08.2011, 00:20 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.
0
56 / 56 / 16
Регистрация: 01.08.2011
Сообщений: 141
11.08.2011, 00:29  [ТС] 3
Цитата Сообщение от silentnuke Посмотреть сообщение

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

Добавлено через 2 минуты
Цитата Сообщение от silentnuke Посмотреть сообщение
cin.ignore();//должно помочь
Не помогло.
0
Заблокирован
11.08.2011, 00:34 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, либо напрямую с помощью оператора >>.
0
56 / 56 / 16
Регистрация: 01.08.2011
Сообщений: 141
11.08.2011, 00:44  [ТС] 5
тоесть хочешь сказать что лучше тогда использовать cin>>mas ?
0
Android Programmer
139 / 140 / 10
Регистрация: 08.12.2010
Сообщений: 421
11.08.2011, 00:47 6
Цитата Сообщение от Ree.exe Посмотреть сообщение
тоесть хочешь сказать что лучше тогда использовать cin>>mas ?
если в строке нет пробелов, то да.
1
56 / 56 / 16
Регистрация: 01.08.2011
Сообщений: 141
11.08.2011, 00:48  [ТС] 7
Да в строке нет пробелов.
0
Android Programmer
139 / 140 / 10
Регистрация: 08.12.2010
Сообщений: 421
11.08.2011, 00:53 8
тогда всмело можно использовать.
кстати попробуйте вместо cin.ingore() использовать _flushall(), может это поможет.
просто у себя проверил, оба вариант срабатывают.
0
Заблокирован
11.08.2011, 00:56 9
Цитата Сообщение от Ree.exe Посмотреть сообщение
тоесть хочешь сказать что лучше тогда использовать cin>>mas ?
Хочу сказать, что лучше чем-то одним пользоваться. Можно для ввода Age также использовать getline, а затем с помощью функции atoi переводить данные в число. Либо пользоваться только оператором >> при условии, что в mas должно ввестись одно слово без пробелов.
0
Заблокирован
11.08.2011, 12:00 10
Попробуйте не cin.ignore(), а cin.sync().
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2011, 12:00
Помогаю со студенческими работами здесь

Отличие функции cin.get и cin.getline
Добрый день! Изучаю функции get и getline, сказано, что они отличаются тем, что функция get...

два вопроса по С++,вопрос про заг.файла и поток cin
1.У меня есть заголовoчный файл,созданный в проекте А,в проекте В он нужен,как его туда...

Отличие getline() от cin.getline()
Чем отличается getline() от cin.getline() ?

Cin вместо cin.getline
#include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;fstream&gt; using namespace std; int...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru