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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция fgets 
V
    Опции темы
mr_Grig
Дата 19.1.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.1.2007
Где: Ваши мысли

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



Народ когда мы считываем из файла кусок текста, к примеру построчно функцией 
Код
fgets(x, 100, f1)
, то в конец х добавляется \0, ну и думаю еще \n (как условие переход на другую строчку). Как вырезать \0 и \n, и оставить только чистый текст строки.

Код

char *x;
x = new char(80);

while (!feof(f1))
   {    
       while(fgets(x,256,f1))
     {
                      <<операции с чистым текстом строки>>


Это сообщение отредактировал(а) mr_Grig - 19.1.2007, 13:12
PM MAIL   Вверх
Rodman
Дата 19.1.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



а если при помощи Delete(str, Strlen(str)-2,2);

или не подходит?
PM MAIL WWW Skype GTalk YIM MSN   Вверх
mr_Grig
Дата 19.1.2007, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.1.2007
Где: Ваши мысли

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



не катит (можно было и так delete(x[strlen(x)]) smile 
PM MAIL   Вверх
Kuvaldis
Дата 19.1.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

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



mr_Grig, 
1.
Разберись с выделением памяти. Ты выделяешь только на 1 символ с инициализацией значением 80
Код

x = new char(80);

А нужно 
Код

x = new char[80];   // на массив из 80 символов

2. 
Код

while(fgets(x,256,f1))

считываешь не более 255 символов
нужно тогда и выделить памяти в п.1 не на 80 а на 256 символов (включая окончание - нулевой символ)
3.
Код

int main()    
{    
    char *x;    
    x = new char[256];    
   
    fgets(x, 256, f1);
    int len = strlen(x);
    if (x[len - 1] == '\n')
       x[len - 1] = '\0';
    getch();
        
   return 0;    
}


В С нет встроенного типа  "строка". Если хочешь без нулевого символа, то это будет массив с длиной len 

Это сообщение отредактировал(а) Kuvaldis - 19.1.2007, 13:49


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
_stranger_
Дата 19.1.2007, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.10.2006
Где: город-герой Киев

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



можно попробывать другой функцией, например getline: 

Код

string s;
ifstream f1("text.txt");

while(!f1.eof())
  {
     getline(f1,s,'\n');
     puts(s.c_str());
      
  }

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


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.1.2007
Где: Ваши мысли

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



а что такое c_str()?

Добавлено @ 14:30 
я под visual c++ 6.0, : 'getline' : undeclared identifier
PM MAIL   Вверх
_stranger_
Дата 19.1.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.10.2006
Где: город-герой Киев

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



Функция c_str() возвращает указатель на константный символьный массив, содержащий строку объекта string.
PM MAIL   Вверх
Kuvaldis
Дата 19.1.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

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



mr_Grig, 
тебе нужно в чистом С или в С++ написать?
Ты работал когда-нибудь с потоками?


_stranger_
ИМХО, некрасиво смешивать С и С++. Если уж использовать потоки и классы, но везде, без всяких puts() и т.д.

Это сообщение отредактировал(а) Kuvaldis - 19.1.2007, 14:42


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
mr_Grig
Дата 19.1.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.1.2007
Где: Ваши мысли

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



Все задачу решил! Огромное спасибо друзья. 
"Я еще не волшебник, но учусь!"  smile 

P.S.: И в особенности thanks Kuvaldis-y.

Это сообщение отредактировал(а) mr_Grig - 19.1.2007, 18:59
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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