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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите по строкам 
:(
    Опции темы
Игорь007
Дата 27.5.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужно вывести на экран из файла всё кроме первой строки. Сколько строк в файле изначально неизвестно.
Вот кое-что набросал, но не знаю как отсечь 1ую строку:
Код

#include <stdlib.h>
#include <stdio.h>
int main (int argc, char *argv[])
{
int u;
char st[1000];
FILE *red;
red=fopen("red.txt","r");
while(!feof(red))
{
u=fgets(st,200,red);
if(u==NULL) printf("Error");
printf("%s",st);
}
getchar();
fclose(red);
}

Зараннее спасибо.

Это сообщение отредактировал(а) Игорь007 - 27.5.2008, 20:05
PM MAIL   Вверх
bsa
Дата 27.5.2008, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Ты не поверишь:
Код
#include <stdlib.h>
#include <stdio.h>
int main (int argc, char *argv[])
{
   int u;
   char st[1000];
   FILE *red = fopen("red.txt", "rt");
   if (red == NULL) { //файл не удалось открыть - выход из программы
      perror("Error openning file: ");
      return 1;
   }
   u=fgets(st, sizeof(st), red); // все гениальное просто
   while( ( !feof(red) ) && u ) {
      u=fgets(st, sizeof(st), red);
      if (u == NULL)
         printf("Error");
      else
         printf("%s", st);
   }
   fclose(red);
   getchar();
}

PM   Вверх
Игорь007
Дата 27.5.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уже сам разобрался)
Код

#include <stdlib.h>
#include <stdio.h>

int main (int argc, char *argv[])
{
char *u;
char st[1000];
FILE *red;
red=fopen("red.txt","r");
u=fgets(st,200,red);
while(!feof(red))
{
u=fgets(st,200,red);
if(u==NULL) printf("Error");
printf("%s",st);
}
getchar();
fclose(red);
}

Тупанул, с кем не бывает=)

Это сообщение отредактировал(а) Игорь007 - 27.5.2008, 20:17
PM MAIL   Вверх
Mephisto
Дата 27.5.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Если не критично С или С++, то можно так:
Код

#include <iostream>
#include <algorithm>
#include <string>
#include <fstream>
#include <iterator>

using namespace std;

int main(){
    ifstream t("test.txt");
    istream_iterator<string> start(t);
    start++;
    copy(start,istream_iterator<string>(),ostream_iterator<string>(cout,"\n"));
    return 0;
}

PM   Вверх
bsa
Дата 27.5.2008, 22:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Mephisto
1. ты уверен в оптимальности использования постфиксного оператора ++? Зачем писсимизировать?  smile 
2. ты уверен, что инкремент istream_iterator<string> приведет к перемещению на следующую строку, а не слово?
PM   Вверх
Mephisto
Дата 28.5.2008, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Цитата(bsa @  27.5.2008,  23:40 Найти цитируемый пост)
ты уверен, что инкремент istream_iterator<string> приведет к перемещению на следующую строку, а не слово? 

Да, тут действительно я провтыкал на счет строки  smile 
PM   Вверх
Mephisto
Дата 5.6.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Цитата

1. ты уверен в оптимальности использования постфиксного оператора ++? Зачем писсимизировать?

bsa, а ты уверен что в строке менее 1000 символов?  smile 


Это сообщение отредактировал(а) Mephisto - 5.6.2008, 23:31
PM   Вверх
vinter
Дата 6.6.2008, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Цитата(Mephisto @  6.6.2008,  00:29 Найти цитируемый пост)
bsa, а ты уверен что в строке менее 1000 символов?   

а причем тут кол-во символов?


--------------------
Мой блог
PM MAIL WWW   Вверх
anatox91
Дата 6.6.2008, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

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



Цитата(bsa @  27.5.2008,  20:12 Найти цитируемый пост)
char st[1000];

vinter, массив фиксированного размера
хотя так написал Игорь007, может ему так и нужно...



--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
vinter
Дата 6.6.2008, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



блин, как вяжется совет bsa насчет использования префиксного инкремента и размер строки?


--------------------
Мой блог
PM MAIL WWW   Вверх
bsa
Дата 6.6.2008, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(vinter @ 6.6.2008,  08:25)
блин, как вяжется совет bsa насчет использования префиксного инкремента и размер строки?

Это попытка мне отомстить за мои замечания.  smile 
Цитата(Mephisto)
bsa, а ты уверен что в строке менее 1000 символов?  smile
Нет, не уверен. Я просто взял код топикстартера и его немного дополнил. Это во-первых. А во-вторых, раз ты такой критичный, то мог бы заметить, что читается только 200 символов.  smile 

Это сообщение отредактировал(а) bsa - 6.6.2008, 10:18
PM   Вверх
Mephisto
Дата 6.6.2008, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Цитата(bsa @  6.6.2008,  11:15 Найти цитируемый пост)
Я просто взял код топикстартера и его немного дополнил. Это во-первых. А во-вторых, раз ты такой критичный, то мог бы заметить, что читается только 200 символов

Я видел, это и взрывает моск. smile В первом посте сказано что количество строк неограничено, про длину строки вообще неизвестно. Возьмем типичный вариант чтения XML, где нода может иметь n атрибутов внутри. Длина строки часто бывает больше 1000. Ставить 2000 или 3000??? smile 
Цитата(bsa @  6.6.2008,  11:15 Найти цитируемый пост)
Это попытка мне отомстить за мои замечания.

неа, не угадал. Твои замечания по делу. 
Просто, как по мне, чаще встречаются задачи в которых экономия нескольких миллисекунд не столь важна по сравнению с универсальностью. Поэтому может мой код и пессимистичен, но надо быть оооочень большим оптимистом чтоб верить что в читаемой срочке всегда будет меньше 1000 символов и уж тем более 200. smile
PM   Вверх
vinter
Дата 6.6.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



Mephisto, ты походу не понимаешь
скажи мне в чем будет отличие(кроме скорости)
Код

int main(){
    ifstream t("test.txt");
    istream_iterator<string> start(t);
    ++start;
    copy(start,istream_iterator<string>(),ostream_iterator<string>(cout,"\n"));
    return 0;

}

и 
Код

int main(){
    ifstream t("test.txt");
    istream_iterator<string> start(t);
    start++;
    copy(start,istream_iterator<string>(),ostream_iterator<string>(cout,"\n"));
    return 0;

}



--------------------
Мой блог
PM MAIL WWW   Вверх
Mephisto
Дата 6.6.2008, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Кстати, почему снова вернулся к этой теме...
Мне и самому интересно как можно стандартными алгоритмами библиотеки сразу вычитать строку.
Хотелось бы заюзать итераторы. Но чет идей никаких smile

Добавлено через 42 секунды
vinter, да не в чем smile

Добавлено через 3 минуты и 50 секунд
vinter, скорее всего действительно чего-то недопонимаю. Можешь обяснить почему существенная разница во времени? Если действительно она есть. smile
PM   Вверх
vinter
Дата 6.6.2008, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



псевдокод
ob++
{
    ob newob(ob);
    ob += 1;
    return newob;
}

++ob
{
    return ob +=1
}

итого имеем лишний конструктор и деструктор

Добавлено @ 14:21
Цитата(Mephisto @  6.6.2008,  14:29 Найти цитируемый пост)
Хотелось бы заюзать итераторы. Но чет идей никаких 

через итераторы никак

Добавлено @ 14:23
можно так
Код

#include <iostream>
#include <fstream>
#include <limits>

using namespace std;

int main(){
    ifstream t("test.txt");
    t.ignore(numeric_limits<int>::max(), '\n');
    cout << t.rdbuf();
    return 0;

}

поправил чуток


Это сообщение отредактировал(а) vinter - 6.6.2008, 14:33


--------------------
Мой блог
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.4358 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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