Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция посимвольного считывания ввода 
V
    Опции темы
trinitr0
Дата 30.6.2020, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 25.6.2013

Репутация: нет
Всего: нет



Помогите пожалуйста в реализации функции, которая считывает посимвольно ввод, до тех пор пока не достигнет конца ввода или не встретится символ переноса строки. Функция должна возвращать C-style строку с прочитанными символами.

Пытался так:

Код

char* getline()
{
    char in;
    int i=0;
    
    char* pOld = new char[1]; 
    char* pNew = new char[1];  

    while(cin.get(in) && (in != '\n'))
    {
          i++;
          pOld[i]=in;
    }  
     
    pOld = pNew; 
    delete [] pNew;
    pOld[i] = '\0'; 
    
    return pOld; 
}



Но это вызывает segmentation fault в тестирующей системе.


Это сообщение отредактировал(а) trinitr0 - 30.6.2020, 12:26
PM MAIL Jabber   Вверх
Romikgy
Дата 30.6.2020, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Цитата(trinitr0 @  30.6.2020,  09:25 Найти цитируемый пост)
char* old = new char[1]; 

Цитата(trinitr0 @  30.6.2020,  09:25 Найти цитируемый пост)
old[i]=in;

вы выделили чаров на 1 символ... а пихаете туда на всю строку!

Цитата(trinitr0 @  30.6.2020,  09:25 Найти цитируемый пост)
 char* new = new char[1];  

new это служебное слово , его нельзя использовать





--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
trinitr0
Дата 30.6.2020, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 25.6.2013

Репутация: нет
Всего: нет



"new это служебное слово , его нельзя использовать" - да я глупость написал, исправил.

А почему всю строку, ведь in тип char имеет?

Это сообщение отредактировал(а) trinitr0 - 30.6.2020, 10:42
PM MAIL Jabber   Вверх
Romikgy
Дата 30.6.2020, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Цитата(trinitr0 @  30.6.2020,  09:37 Найти цитируемый пост)
А почему всю строку, ведь in тип char имеет?


Цитата(trinitr0 @  30.6.2020,  09:25 Найти цитируемый пост)
pOld[i]=in;

i у вас будет увеличиваться ? куда будет ссылаться массив pOld при индексе более нуля ????


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
trinitr0
Дата 30.6.2020, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 25.6.2013

Репутация: нет
Всего: нет



Кое-как со сторонней помощью и собственных усилий решил так:

Код

char *getline()
{
    char in;
    int i=0;
    char* pOld = new char[1];  
    
    while(cin.get(in) && (in != '\n')){ 
        ++i;
        pOld[i-1] = in;
        char* pNew = new char[i+1]; 
        
        for (int j=0;j<i;++j){ 
                pNew[j] = pOld[j];
        }   

        delete [] pOld;
        pOld = pNew;
    }
 
pOld[i] = '\0';
return pOld; 
}


Комментарии и замечания приветствуются!
PM MAIL Jabber   Вверх
Romikgy
Дата 30.6.2020, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Код

char *getline()
{
char* pOld = new char[1024];  
cin.getline(pOld ,1023,'\n') ;
return pOld; 
}



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.