Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
1

Метод cin.getline(str,n,'\n'), если в строке более n-1 символа

16.07.2012, 22:16. Просмотров 1381. Ответов 6
Метки нет (Все метки)

Помогите пожалуйста!
Насколько знаю метод cin.getline(str,n,'\n'), должен считать n-1 символ из строки и занести в конец строки '\0', либо считать произвольное количество символом до '\n' включительно. Вот... пишу такую штуку:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
enum A {STR = 2, LEN = 100};
 
int main(void)
{
    
    char str[STR][LEN];
    int i = 0;
 
    for(int i = 0; i < STR; i++)
        cin.getline(str[i],10,'\n');
 
    for(int i = 0; i < STR; i++)
        cout << str[i] << endl;
 
    system("pause");
 
    return 0;
}
в консоли ввожу 123456789123456789. Он считывает только 123456789, остальные цифры не хочет, почему? Ведь после первого считывания, в потоке остается 123456789\n, а он при втором считывании считывает кажется '\n' ...

Добавлено через 13 минут
Да и еще, если поставить после cin.getline(str[i],10,'\n'); строчку cout << cin.peek(); т.е.
C++
1
2
3
4
5
for(int i = 0; i < STR; i++)
{
     cin.getline(str[i],10,'\n');
     cout << cin.peek();
}
то он выведет -1, т.е. EOF, т.е. конец файла...но ведь это не конец...шельма какая-то...

Добавлено через 3 минуты
пробовал писать
C++
1
2
3
4
5
for(int i = 0; i < STR; i++)
{
     cin.getline(str[i],10,'\n');
     cin.ignore();
}
но тоже каналья...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2012, 22:16
Ответы с готовыми решениями:

getline(cin, str) и cin>>
Добрый день. Есть код: ... string str; int N; cin&gt;&gt; N; getline(cin, str); cout&lt;&lt;str&lt;&lt;endl;...

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

Почему при использовании getline( std::cin, str ) строка считывается не так, как ожидается?
Цель программы: При вводе строки, подсчитывает количество гласных букв. Проблема: При вводе...

Подсчёт количества символов в строке (cin.getline)
Здравствуйте! Задача такова: нужно подсчитать количество символов 'a' в строке. Помогите,...

6
1450 / 787 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
16.07.2012, 23:21 2
Цитата Сообщение от Alberto_Timakov Посмотреть сообщение
Он считывает только 123456789, остальные цифры не хочет, почему?
C++
1
cin.getline(str[i],100,'\n');
0
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
16.07.2012, 23:36  [ТС] 3
Не в этом вопрос состоял ведь...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10837 / 6647 / 1614
Регистрация: 25.07.2009
Сообщений: 12,428
16.07.2012, 23:48 4
Alberto_Timakov, внимательно читаем руководство например на www.cplusplus.com, видим
failbit No characters were extracted because the end was prematurely found.
This is also set if the function stops extracting because n-1 characters were extracted (n including the terminating null-character).
Notice that some eofbit cases will also set failbit.
Делаем
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;
 
enum A {STR = 2, LEN = 100};
 
int main(void)
{
    
    char str[STR][LEN];
    //int i = 0;
 
    for(int i = 0; i < STR; i++) {
        cin.getline(str[i],10,'\n');
        cin.clear();
    }
 
    for(int i = 0; i < STR; i++)
        cout << str[i] << endl;
 
    system("pause");
 
    return 0;
}
0
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
16.07.2012, 23:59  [ТС] 5
easybudda. Пожалуйста, в кратце, что там написанно, а то я англ. совсем не знаю...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10837 / 6647 / 1614
Регистрация: 25.07.2009
Сообщений: 12,428
17.07.2012, 00:13 6
Цитата Сообщение от Alberto_Timakov Посмотреть сообщение
в кратце, что там написанно
В кратце там написано, что флаг failbit потока cin устанавливается в true среди прочего в том случае, если уже прочитано n - 1 символов, а они ещё остались.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Alberto_Timakov Посмотреть сообщение
я англ. совсем не знаю...
Если всерьёз хотите заниматься программированием, прийдётся выучить...

0
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
17.07.2012, 09:30  [ТС] 7
Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.07.2012, 09:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

Разница между cin >> x и getline(cin, x)
Собственно код, на который я опираюсь: #include &lt;iostream&gt; using namespace std; int main() {...

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

Не работает ни cin.Get(), ни cin.Getline()
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include &quot;windows.h&quot; #include...


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

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

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