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

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

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

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

19.08.2012, 17:18. Просмотров 3522. Ответов 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 использовать необходимо
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2012, 17:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос cin.getline() не читает строку (C++):

cin.getline() не читает 1 символ - C++
Доброго времени суток :) пишу довольно простой код, но тут появилась проблема. Вот обрезаний кусок кода который не хочет работать...

cin.getline переброс через строку - C++
Использую функцию cin.getline,но происходит вот такое чуДооО см картинку внизу Код char *Names = new char; char...

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

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

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

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

18
b_kasenov47
14 / 14 / 1
Регистрация: 28.07.2012
Сообщений: 57
19.08.2012, 17:25 #2
попробуйте не cin.getline() а getline(cin, s).
0
h3mbr0
245 / 88 / 21
Регистрация: 12.03.2012
Сообщений: 355
19.08.2012, 17:27  [ТС] #3
Цитата Сообщение от b_kasenov47 Посмотреть сообщение
попробуйте не cin.getline() а getline(cin, s).
Нужно использовать именно cin.getline
0
4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
19.08.2012, 19:20 #4
h3mbr0, перед использованием cin.getline и getline используйте cin.get() так как символ новой строки остается во входном потоке.
0
h3mbr0
245 / 88 / 21
Регистрация: 12.03.2012
Сообщений: 355
19.08.2012, 19:33  [ТС] #5
Цитата Сообщение от 4iFF Посмотреть сообщение
h3mbr0, перед использованием cin.getline и getline используйте cin.get() так как символ новой строки остается во входном потоке.
Тот же результат
0
4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
19.08.2012, 19:40 #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 у вас почему-то не было.
0
h3mbr0
245 / 88 / 21
Регистрация: 12.03.2012
Сообщений: 355
19.08.2012, 19:43  [ТС] #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 не обязателен там
0
KostyaKulakov
Заблокирован
19.08.2012, 19:43 #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;
}
0
h3mbr0
245 / 88 / 21
Регистрация: 12.03.2012
Сообщений: 355
19.08.2012, 19:44  [ТС] #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? ведь нулевой символ не учитывается
0
4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
19.08.2012, 19:47 #10
Цитата Сообщение от h3mbr0 Посмотреть сообщение
return не обязателен там
не грамотно не писать return, когда main должна вернуть значение (иначе как понять корректно ли завершилась программа?).Лучше всегда:
C++
1
2
3
4
int main(){
//......
return 0;
}
1
h3mbr0
245 / 88 / 21
Регистрация: 12.03.2012
Сообщений: 355
19.08.2012, 19:49  [ТС] #11
Цитата Сообщение от 4iFF Посмотреть сообщение
не грамотно не писать return, когда main должна вернуть значение (иначе как понять корректно ли завершилась программа?).Лучше всегда:
C++
1
2
3
4
int main(){
//......
return 0;
}
return сам дописывается при компиляции, возвращая 0, даже если void main(). В программах всегда пишу, но в примере опустил
0
KostyaKulakov
Заблокирован
19.08.2012, 19:51 #12
у меня всё работает так как надо.
представьте запись cin.getline(s, 10); как cin.getline(массив, введённое_число<10 символов); те занести символы в массив меньше 10 символов.
за пределы не перевалит вот картинка.
0
Миниатюры
cin.getline() не читает строку  
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
19.08.2012, 20:01 #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;
}
2
KostyaKulakov
Заблокирован
19.08.2012, 20:05 #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;
}
1
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
19.08.2012, 20:07 #15
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
зачем вы организовали проверку на корректный ввод?
Потому что при вводе строки свыше размера массива cin переходит в ошибку.
0
19.08.2012, 20:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2012, 20:07
Привет! Вот еще темы с ответами:

cin.getline и cin.ignore - C++
Есть кусок кода в котором не могу разобраться. Если cin.ignore() есть, то теряется первый вводимый символ начиная со второго входа в for....

Не работает ни cin.Get(), ни cin.Getline() - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include &quot;windows.h&quot; #include &quot;string.h&quot; using namespace::std; const...

Cin вместо cin.getline - C++
#include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;fstream&gt; using namespace std; int get_int(int default_value); char name; ...

getline(cin, str) и cin>> - C++
Добрый день. Есть код: ... string str; int N; cin&gt;&gt; N; getline(cin, str); cout&lt;&lt;str&lt;&lt;endl; //Выводит: &lt;пустота&gt; ...


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

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

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