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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.95
h3mbr0
212 / 55 / 13
Регистрация: 12.03.2012
Сообщений: 286
#1

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

19.08.2012, 17:18. Просмотров 3186. Ответов 18
Метки нет (Все метки)

Добрый день. Нужно последовательно ввести 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++
Использую функцию cin.getline,но происходит вот такое чуДооО см картинку внизу Код char *Names = new char; char...

Getline() и cin - C++
Проблема заключается в том, что после ввода через cin , getline() не работает, точнее работает, но непонятно для меня. Я так предполагаю,...

cin.getline() - C++
Помагите пожалуйсто.Ввести предложение. Вывести так, чтобы в каждой строке было написано одно слово предложения после пробела.с++ 2006...

cin.getline - C++
есть простенькая программа #include &lt;iostream&gt; using namespace std; struct note { char fi; int number; int dob; }; int...

getline(cin, ); - C++
Программа создаёт текстовый документ в который записывает название, автора и кол-во проданных экземпляров книги. Вот только возникла...

cin.getline() - C++
Вопрос заключается в следующем, собственно программа отказывается выполнять cin.getline(... , ...); (... - аргументы) в начале своей ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
b_kasenov47
14 / 14 / 1
Регистрация: 28.07.2012
Сообщений: 57
19.08.2012, 17:25     cin.getline() не читает строку #2
попробуйте не cin.getline() а getline(cin, s).
h3mbr0
212 / 55 / 13
Регистрация: 12.03.2012
Сообщений: 286
19.08.2012, 17:27  [ТС]     cin.getline() не читает строку #3
Цитата Сообщение от b_kasenov47 Посмотреть сообщение
попробуйте не cin.getline() а getline(cin, s).
Нужно использовать именно cin.getline
4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
19.08.2012, 19:20     cin.getline() не читает строку #4
h3mbr0, перед использованием cin.getline и getline используйте cin.get() так как символ новой строки остается во входном потоке.
h3mbr0
212 / 55 / 13
Регистрация: 12.03.2012
Сообщений: 286
19.08.2012, 19:33  [ТС]     cin.getline() не читает строку #5
Цитата Сообщение от 4iFF Посмотреть сообщение
h3mbr0, перед использованием cin.getline и getline используйте cin.get() так как символ новой строки остается во входном потоке.
Тот же результат
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
212 / 55 / 13
Регистрация: 12.03.2012
Сообщений: 286
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
212 / 55 / 13
Регистрация: 12.03.2012
Сообщений: 286
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
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
212 / 55 / 13
Регистрация: 12.03.2012
Сообщений: 286
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
1429 / 766 / 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
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
19.08.2012, 20:07     cin.getline() не читает строку #15
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
зачем вы организовали проверку на корректный ввод?
Потому что при вводе строки свыше размера массива cin переходит в ошибку.
h3mbr0
212 / 55 / 13
Регистрация: 12.03.2012
Сообщений: 286
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
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() не читает строку
Еще ссылки по теме:

cin.getline - C++
Здравствуйте. Есть вот программа: #include &lt;iostream&gt; // #include &lt;cmath&gt; // #include &lt;conio.h&gt; // //...

cin.getline - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #define N 100 using namespace std; struct book { int page; char str; }...

cin И getline - C++
#include &lt;iostream&gt; int main() { using namespace std; char n1; int n2;

getline(cin,a); - C++
Почемй когда я пишуgetline(cin,a); ничего не выполняется. Т.е. это не выполняется, а всё остальное выполняется! Зачем это вообще сделали в...

Проблема с cin.getline(); - C++
Есть вопрос по поводу использования cin.getline() после cin: cin&gt;&gt; n; char c; cin.getline(c, buf); Почему можно ввести...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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() не читает строку
Ответ Создать тему
Опции темы

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