Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2010, 01:05   #1
peplenko
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 23
По умолчанию построчное считывание

дабы не плодить темы.
Код:
 char argu[20];
char str[100];
int i=0;
vector<const char*> ve;
strcpy(argu,argv[1]);

    FILE *file=fopen(argu,"r");
    while(!feof(file)){
    fgets(str,100,file);
    ve.push_back(str);
cout<<ve[i];
i++;
    }
такое работает нормально, т.е выводит из коллекции все строки, которые хранились в файле.

Код:
 char argu[20];
char str[100];
int i=0;
vector<const char*> ve;
strcpy(argu,argv[1]);

    FILE *file=fopen(argu,"r");
    while(!feof(file)){
    fgets(str,100,file);
    ve.push_back(str);
    }
cout<<ve[1];
а такой нет. т.е. в каждом элементе коллекции хранится последняя строчка текстового файла.

первым кодом не могу пользоваться т.к. нужны пермутации. В чём может быть проблема? спасибо.

Последний раз редактировалось peplenko; 06.09.2010 в 18:51.
peplenko вне форума Ответить с цитированием
Старый 06.09.2010, 08:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С потолка:
Код:
while(!feof(файл)){
 fscanf(file,"%s",var);
 if(var[0]=='w'){ пишем var в первый файл};
 if(var[0]=='r'){ пишем var во второй файл };
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.09.2010, 18:51   #3
peplenko
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 23
По умолчанию

ап. первый пост отредактирован.
peplenko вне форума Ответить с цитированием
Старый 06.09.2010, 19:53   #4
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

а так?
Код:
 	fgets(str,100,file);
	char *buf;
	buf = new char [strlen(str)];
	strcpy(buf, str);
	ve.push_back(buf);
include <Qt>

Последний раз редактировалось sever-42; 06.09.2010 в 20:13.
sever-42 вне форума Ответить с цитированием
Старый 06.09.2010, 20:22   #5
peplenko
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 23
По умолчанию

такое вообще ошибку выдаёт.
Я нашёл решение:
записывать в array, а потом пихать в коллекцию.
do{
arr_str[i]=fgets(strop,100,file);

name.push_back(arr_str[i]);

}while(!feof(file));

но мне нужен динамический массив, а колл. не хочет принимать его, что с этим можно сделать?
peplenko вне форума Ответить с цитированием
Старый 06.09.2010, 20:45   #6
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Цитата:
Код:
 fgets(str,100,file);
 ve.push_back(str);
вы тут помещаете в вектор адрес локальной переменной str содержимое которой изменится после итерации while. Надо поместить в память содержимое str и засунуть указатель этой памяти в вектор и так на каждой итерации, похожий пример
Код:
char str[10] ;
	char *buf;
	char itabuf[10];
	vector<const char *> vec;
	for (int i = 0; i < 10; ++i) {
		strcpy(str, itoa(i, itabuf, 10));
		buf = new char [strlen(str)];
		strcpy(buf, str);
		vec.push_back(buf);
	}
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 06.09.2010, 21:20   #7
peplenko
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 23
По умолчанию

Цитата:
Сообщение от sever-42 Посмотреть сообщение
Код:

		strcpy(str, itoa(i, itabuf, 10));
		
	}
поясните пожалуйста, что делает эта строка?
peplenko вне форума Ответить с цитированием
Старый 06.09.2010, 21:52   #8
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

itoa конвертирует из int в char * и возвращает указатель строки, которую копируем в str.
include <Qt>
sever-42 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка строк с определенной меткой из одной таблицы и автоматический перенос в новую таблицу. dk01 Microsoft Office Excel 28 30.01.2011 18:16
Как сделать автозаполнение строк, которые зависят от строк другого столбца путвфда_иил Microsoft Office Excel 19 29.08.2010 17:16
выборка строк, если есть совпадение одновременно в двух стролбцах 7mango Microsoft Office Excel 2 09.07.2010 11:46
Выборка выборка с таблицы с отношением многие-ко-многим 8alig8 БД в Delphi 2 24.06.2010 12:21
Выборка строк из таблицы по значению TDBLookupComboBox Gringo БД в Delphi 4 28.10.2008 05:45