Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Функция fgets


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

Код

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

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

Автор: Rodman 19.1.2007, 13:14
а если при помощи Delete(str, Strlen(str)-2,2);

или не подходит?

Автор: mr_Grig 19.1.2007, 13:27
не катит (можно было и так delete(x[strlen(x)]) smile 

Автор: Kuvaldis 19.1.2007, 13:46
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 

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

Код

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

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

Автор: mr_Grig 19.1.2007, 14:15
а что такое c_str()?

Добавлено @ 14:30 
я под visual c++ 6.0, : 'getline' : undeclared identifier

Автор: _stranger_ 19.1.2007, 14:40
Функция c_str() возвращает указатель на константный символьный массив, содержащий строку объекта string.

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


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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)