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

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

Войти
Регистрация
Восстановить пароль
 
Alberto_Timakov
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 183
#1

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

16.07.2012, 22:16. Просмотров 984. Ответов 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();
}
но тоже каналья...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2012, 22:16     Метод cin.getline(str,n,'\n'), если в строке более n-1 символа
Посмотрите здесь:
C++ Почему при использовании getline( std::cin, str ) строка считывается не так, как ожидается?
C++ Подсчёт количества символов в строке (cin.getline)
C++ Cin вместо cin.getline
C++ как создать функцию или программу, чтобы str состояла из цифр,а также давалась новой строке str
C++ Написать и протестировать функцию, которая по заданной строке Str формирует новую строку, состоящую только из цифр, входящих в Str
C++ cin.getline
cin И getline C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
16.07.2012, 23:21     Метод cin.getline(str,n,'\n'), если в строке более n-1 символа #2
Цитата Сообщение от Alberto_Timakov Посмотреть сообщение
Он считывает только 123456789, остальные цифры не хочет, почему?
C++
1
cin.getline(str[i],100,'\n');
Alberto_Timakov
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 183
16.07.2012, 23:36  [ТС]     Метод cin.getline(str,n,'\n'), если в строке более n-1 символа #3
Не в этом вопрос состоял ведь...
easybudda
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
16.07.2012, 23:48     Метод cin.getline(str,n,'\n'), если в строке более n-1 символа #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;
}
Alberto_Timakov
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 183
16.07.2012, 23:59  [ТС]     Метод cin.getline(str,n,'\n'), если в строке более n-1 символа #5
easybudda. Пожалуйста, в кратце, что там написанно, а то я англ. совсем не знаю...
easybudda
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
17.07.2012, 00:13     Метод cin.getline(str,n,'\n'), если в строке более n-1 символа #6
Цитата Сообщение от Alberto_Timakov Посмотреть сообщение
в кратце, что там написанно
В кратце там написано, что флаг failbit потока cin устанавливается в true среди прочего в том случае, если уже прочитано n - 1 символов, а они ещё остались.

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

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2012, 09:30     Метод cin.getline(str,n,'\n'), если в строке более n-1 символа
Еще ссылки по теме:
C++ cin.getline
cin.getline() C++
C++ getline(cin,a);
cin.getline() C++

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

Или воспользуйтесь поиском по форуму:
Alberto_Timakov
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 183
17.07.2012, 09:30  [ТС]     Метод cin.getline(str,n,'\n'), если в строке более n-1 символа #7
Спасибо!
Yandex
Объявления
17.07.2012, 09:30     Метод cin.getline(str,n,'\n'), если в строке более n-1 символа
Ответ Создать тему
Опции темы

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