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

cin.getline() не читает строку - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.95
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
19.08.2012, 17:18     cin.getline() не читает строку #1
Добрый день. Нужно последовательно ввести 2 строки через cin.getline(), но после ввода первой, если она превышает допустимый размер, ввод второй не начинается, вернее видимо проглатывает перенос строки. cin.ignore() или getchar() никакого эффекта не дают. Вот примерный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#
using namespace std;
 
int main()
{
    char s[10];
    char ss[10];
    cin.getline(s, 9);
    cout << s;
    cin.getline(ss, 9);
    cout << ss;
}
Каким образом можно избавится от этого? getline использовать необходимо
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2012, 17:18     cin.getline() не читает строку
Посмотрите здесь:

cin.getline() не читает 1 символ C++
cin.getline переброс через строку C++
getline(cin, str) и cin>> C++
C++ Отличие функции cin.get и cin.getline
cin.getline и cin.ignore C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
b_kasenov47
14 / 14 / 1
Регистрация: 28.07.2012
Сообщений: 57
19.08.2012, 17:25     cin.getline() не читает строку #2
попробуйте не cin.getline() а getline(cin, s).
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
19.08.2012, 17:27  [ТС]     cin.getline() не читает строку #3
Цитата Сообщение от b_kasenov47 Посмотреть сообщение
попробуйте не cin.getline() а getline(cin, s).
Нужно использовать именно cin.getline
4iFF
 Аватар для 4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
19.08.2012, 19:20     cin.getline() не читает строку #4
h3mbr0, перед использованием cin.getline и getline используйте cin.get() так как символ новой строки остается во входном потоке.
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
19.08.2012, 19:33  [ТС]     cin.getline() не читает строку #5
Цитата Сообщение от 4iFF Посмотреть сообщение
h3mbr0, перед использованием cin.getline и getline используйте cin.get() так как символ новой строки остается во входном потоке.
Тот же результат
4iFF
 Аватар для 4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
19.08.2012, 19:40     cin.getline() не читает строку #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using std::cout;
using std::cin;
 
int main()
{
    char s[10];
    char ss[10];
    cin.get();
    cin.getline(s, 9);
    cout << s;
    cin.get();
    cin.getline(ss, 9);
    cout << ss;
 
return 0;
}
Неужели не проходит?
*return 0 у вас почему-то не было.
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
19.08.2012, 19:43  [ТС]     cin.getline() не читает строку #7
Цитата Сообщение от 4iFF Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using std::cout;
using std::cin;
 
int main()
{
    char s[10];
    char ss[10];
    cin.get();
    cin.getline(s, 9);
    cout << s;
    cin.get();
    cin.getline(ss, 9);
    cout << ss;
 
return 0;
}
Неужели не проходит?
*return 0 у вас почему-то не было.
Не проходит я в студии пишу, return не обязателен там
KostyaKulakov
Заблокирован
19.08.2012, 19:43     cin.getline() не читает строку #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main()
{
    char s[10];
 
    char ss[10];
 
    cin.getline(s, 10);
 
    cout << s;
 
    cin.get();
 
    cin.getline(ss, 10);
 
    cout << ss;
 
    return 0;
}
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
19.08.2012, 19:44  [ТС]     cin.getline() не читает строку #9
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main()
{
    char s[10];
 
    char ss[10];
 
    cin.getline(s, 10);
 
    cout << s;
 
    cin.get();
 
    cin.getline(ss, 10);
 
    cout << ss;
 
    return 0;
}
Тоже самое! и почему 10? ведь нулевой символ не учитывается
4iFF
 Аватар для 4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
19.08.2012, 19:47     cin.getline() не читает строку #10
Цитата Сообщение от h3mbr0 Посмотреть сообщение
return не обязателен там
не грамотно не писать return, когда main должна вернуть значение (иначе как понять корректно ли завершилась программа?).Лучше всегда:
C++
1
2
3
4
int main(){
//......
return 0;
}
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
19.08.2012, 19:49  [ТС]     cin.getline() не читает строку #11
Цитата Сообщение от 4iFF Посмотреть сообщение
не грамотно не писать return, когда main должна вернуть значение (иначе как понять корректно ли завершилась программа?).Лучше всегда:
C++
1
2
3
4
int main(){
//......
return 0;
}
return сам дописывается при компиляции, возвращая 0, даже если void main(). В программах всегда пишу, но в примере опустил
KostyaKulakov
Заблокирован
19.08.2012, 19:51     cin.getline() не читает строку #12
у меня всё работает так как надо.
представьте запись cin.getline(s, 10); как cin.getline(массив, введённое_число<10 символов); те занести символы в массив меньше 10 символов.
за пределы не перевалит вот картинка.
Миниатюры
cin.getline() не читает строку  
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
19.08.2012, 20:01     cin.getline() не читает строку #13
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
#include <iostream>
using namespace std;
 
int main()
{
    char s[10];
    char ss[10];
    cin.getline(s, 9);
    if (!cin)
    {
        cin.clear();
        cin.sync();
    }
    cout << s << endl;
    cin.getline(ss, 9);
    if (!cin)
    {
        cin.clear();
        cin.sync();
    }
    cout << ss << endl;
    system("pause");
    return 0;
}
KostyaKulakov
Заблокирован
19.08.2012, 20:05     cin.getline() не читает строку #14
Цитата Сообщение от yuron_477 Посмотреть сообщение
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
#include <iostream>
using namespace std;
 
int main()
{
    char s[10];
    char ss[10];
    cin.getline(s, 9);
    if (!cin)
    {
        cin.clear();
        cin.sync();
    }
    cout << s << endl;
    cin.getline(ss, 9);
    if (!cin)
    {
        cin.clear();
        cin.sync();
    }
    cout << ss << endl;
    system("pause");
    return 0;
}
зачем вы организовали проверку на корректный ввод? ведь вопрос был: "cin.getline() не читает строку"

Добавлено через 2 минуты
так может автору не понравился тот вариант даю другой :/
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main()
{
    char s[10];
 
    char ss[10];
 
    cin.getline(s, 10);
 
    cout << s << endl;
 
    cin.getline(ss, 10);
 
    cout << ss;
 
    return 0;
}
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
19.08.2012, 20:07     cin.getline() не читает строку #15
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
зачем вы организовали проверку на корректный ввод?
Потому что при вводе строки свыше размера массива cin переходит в ошибку.
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
19.08.2012, 20:09  [ТС]     cin.getline() не читает строку #16
Цитата Сообщение от yuron_477 Посмотреть сообщение
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
#include <iostream>
using namespace std;
 
int main()
{
    char s[10];
    char ss[10];
    cin.getline(s, 9);
    if (!cin)
    {
        cin.clear();
        cin.sync();
    }
    cout << s << endl;
    cin.getline(ss, 9);
    if (!cin)
    {
        cin.clear();
        cin.sync();
    }
    cout << ss << endl;
    system("pause");
    return 0;
}
Точно, спасибо! просто cin.clear() не помогало
KostyaKulakov
Заблокирован
19.08.2012, 20:13     cin.getline() не читает строку #17
Цитата Сообщение от yuron_477 Посмотреть сообщение
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
#include <iostream>
using namespace std;
 
int main()
{
    char s[10];
    char ss[10];
    cin.getline(s, 9);
    if (!cin)
    {
        cin.clear();
        cin.sync();
    }
    cout << s << endl;
    cin.getline(ss, 9);
    if (!cin)
    {
        cin.clear();
        cin.sync();
    }
    cout << ss << endl;
    system("pause");
    return 0;
}
приношу глубочайшие извинения. не правильно прочитал вопрос ТС. ещё раз извините.
4iFF
 Аватар для 4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
19.08.2012, 20:31     cin.getline() не читает строку #18
h3mbr0, сор не прочитал вопрос, прочитал только название темы и код =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2012, 21:10     cin.getline() не читает строку
Еще ссылки по теме:

C++ Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами
C++ Не работает ни cin.Get(), ни cin.Getline()
Отличие getline() от cin.getline() C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.08.2012, 21:10     cin.getline() не читает строку #19
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как работает getline(char&, int).
  • Если символ вообще не извлекается (например, сразу конец файла), то
    в строку ввода помещается '\0' и устанавливается failbit.
  • Если вводится больше, чем int-1, то в конец строки ввода помещается '\0' и
    устанавливает failbit. Не введённое остаётся в очереди.
  • Если конец файла, то устанавливает eofbit.
  • Если пустая строка (т.е., '\n' - первый), то чтение останавливается,
    символ '\n' извлекается из очереди (в отличие от get(char&, int)), но не сохраняется, в строку ввода помещается '\0'. Флаг ошибки НЕ устанавливается (в отличие от get(char&, int)).
  • Если символ перевода строки('\n', но не первый), то чтение останавливается, в конец строки
    помещается '\0', символ '\n' извлекается из очереди (в отличие от get(char&, int)), но не сохраняется.

Добавлено через 4 минуты
Как работает get(char&, int).
  • Если символ вообще не извлекается (например, сразу конец файла), то
    в строку ввода помещается '\0' и устанавливается failbit.
  • Если вводится больше, чем int-1, то в конец строки ввода помещается '\0', флаг ошибки НЕ устанавливается (в отличие от getline(char&, int)). Не введённое (вмесе с '\n') остаётся в очереди.
  • Если конец файла, то устанавливает eofbit.
  • Если пустая строка (т.е., '\n' - первый), то чтение останавливается и устанавливается failbit(в отличие от getline(char&, int)), символ '\n' остаётся в очереди (в отличие от getline(char&, int)), в строку ввода помещается '\0';
  • Если символ перевода строки('\n', но не первый), то чтение останавливается, в конец строки
    помещается '\0', символ '\n' остаётся в очереди (в отличие от getline(char&, int)), поэтому если дальше будет get(char&, int), то установится failbit.
Yandex
Объявления
19.08.2012, 21:10     cin.getline() не читает строку
Ответ Создать тему
Опции темы

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