imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 14.04.2007, 16:02     # 1
Warchief
::VIP::
 
Аватар для Warchief
 
Регистрация: 14.05.2003
Адрес: 127.0.0.1
Сообщения: 852

Warchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех Гуру
Чтение содержимого файла в массив. С++

Сама задача следующая: посчитать кол-во строк в файле, передать их в дин. массив и отсортировать.
Нужно прочитать содержимое файла(содержит числа в строчку, одно число одна строка). Так я считаю кол-во строк.
Код:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream in("input.txt");
if(!in) {
cout << "Cannot open file.\n";
return 1;
}

char ch[255];
int lines=0;
while(in){
in.getline(ch,255);
lines++;
if(in)
cout<<ch<<endl;}

in.close(); //close stream



ofstream out("output.txt");
if(!out){
	cout <<"error";
    return 1;
}
out << lines;
out.close();
return 0;
}
Потом мне надо прочитать тот-же файл ещё раз и загрузить числа в массив(одна строка, одна ячейка в массиве.)Нужно для последующей сортировки(как сортировать я знаю.)Проблема в том, что я не знаю как записать тип int в массив.


Пробовал записать так:
Код:
#include<fstream>
#include<iostream>
using namespace std;

int main()
{
    int	input[1001];

	fstream infile;
	infile.open("input.txt",ios::in);

		for (int i=0;i<1001;i++)
		{
			if(infile.eof())
				return -1;
			infile >>input;
			cout<<input<<endl;
		}
		return 0;
}

Компайлер спотыкается на строке infile >>input;
Пробовал компилировать в VS8 и Dev++.
__________________
reality.sys corrupt
Kernel panic - not syncing:
Fatal exception
halt life(y,n)?

Последний раз редактировалось Warchief; 14.04.2007 в 16:05.
Warchief вне форума  
Старый 15.04.2007, 11:28     # 2
Drakosha
Full Member
 
Аватар для Drakosha
 
Регистрация: 16.10.2002
Адрес: ArchLinux, Internet
Сообщения: 557

Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)
скорее всего ты забыл индекс:
infile >>input[i];
Drakosha вне форума  
Старый 15.04.2007, 11:48     # 3
Bishop
Member
 
Аватар для Bishop
 
Регистрация: 18.08.2004
Пол: Male
Сообщения: 235

Bishop Имеются все основания чтобы гордиться собойBishop Имеются все основания чтобы гордиться собойBishop Имеются все основания чтобы гордиться собойBishop Имеются все основания чтобы гордиться собойBishop Имеются все основания чтобы гордиться собойBishop Имеются все основания чтобы гордиться собойBishop Имеются все основания чтобы гордиться собойBishop Имеются все основания чтобы гордиться собойBishop Имеются все основания чтобы гордиться собойBishop Имеются все основания чтобы гордиться собой
Warchief,
infile >> input[i];

[upd] Долго писал Drakosha опередил.

Последний раз редактировалось Bishop; 15.04.2007 в 11:50.
Bishop вне форума  
Старый 15.04.2007, 18:48     # 4
Warchief
::VIP::
 
Аватар для Warchief
 
Регистрация: 14.05.2003
Адрес: 127.0.0.1
Сообщения: 852

Warchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех Гуру
Drakosha,
Bishop,

Ага забыл...


А, что нужно изменить в первом куске кода, чтобы можно было записать в ch[255] сразу значение интегер, а не char? Если просто поменять char на int, то естественно код не компилируется.
__________________
reality.sys corrupt
Kernel panic - not syncing:
Fatal exception
halt life(y,n)?
Warchief вне форума  
Старый 15.04.2007, 18:58     # 5
Drakosha
Full Member
 
Аватар для Drakosha
 
Регистрация: 16.10.2002
Адрес: ArchLinux, Internet
Сообщения: 557

Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)
по моему можно написать:

int xx;
in >> xx;
Drakosha вне форума  
Старый 26.04.2007, 08:05     # 6
PSyton
Junior Member
 
Аватар для PSyton
 
Регистрация: 19.04.2002
Адрес: Дом
Пол: Male
Сообщения: 187

PSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форуме
Информация к размышлению (точнее вопросы):
А почему бы не делать все за раз?
Складывать в массив и попутно считать?
Складывать сразу в отсортированом виде?
А если в строке не число, пусть все умрет?
А если строк больше чем тысяча одна, на оставшиеся пофиг?
А почему бы не использовать std::vector?

Я так понял это учебная задача, так вот практика показывает что если учебные задачи решаются абы как, то потом и на практике все будет решаться также. Извините если кого обидел. Просто когда начинаешь работать с каким-то крупным проектом и видишь там куски отвратительного когда, становится как-то грустно...

P.S. а да еще - при чтении потока через >> совсем не очевидно что считается целая строка.
__________________
Дураки не динозавры - они не вымрут...

Последний раз редактировалось PSyton; 26.04.2007 в 08:07.
PSyton вне форума  
Старый 06.05.2007, 20:36     # 7
Warchief
::VIP::
 
Аватар для Warchief
 
Регистрация: 14.05.2003
Адрес: 127.0.0.1
Сообщения: 852

Warchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех ГуруWarchief Отец (мать) всех Гуру
PSyton,


Цитата:
Сообщение от PSyton Посмотреть сообщение
Информация к размышлению (точнее вопросы):
А почему бы не делать все за раз?
Складывать в массив и попутно считать?
Складывать сразу в отсортированом виде?
А если в строке не число, пусть все умрет?
А если строк больше чем тысяча одна, на оставшиеся пофиг?
А почему бы не использовать std::vector?

Я так понял это учебная задача, так вот практика показывает что если учебные задачи решаются абы как, то потом и на практике все будет решаться также. Извините если кого обидел. Просто когда начинаешь работать с каким-то крупным проектом и видишь там куски отвратительного когда, становится как-то грустно...
Ты прав, задача учебная. Дело в том, что до этого момента я нокогда не сталкивался с с++, времени дают очень мало, поэтому просто не успеваю разбираться с заданием как следует, к тому-же задания у нас дают в рамках совсем другого предмета(програмирования у нас вообще нет ). Никаких определённых рекомендаций как решать эти задания тоже нет.



Цитата:
Сообщение от PSyton Посмотреть сообщение
P.S. а да еще - при чтении потока через >> совсем не очевидно что считается целая строка.
Объясни пожалуйста почему, и если не трудно, объясни как сделать лучше?
__________________
reality.sys corrupt
Kernel panic - not syncing:
Fatal exception
halt life(y,n)?
Warchief вне форума  
Старый 06.05.2007, 21:47     # 8
PSyton
Junior Member
 
Аватар для PSyton
 
Регистрация: 19.04.2002
Адрес: Дом
Пол: Male
Сообщения: 187

PSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форуме
Цитата:
Сообщение от Warchief Посмотреть сообщение
Объясни пожалуйста почему, и если не трудно, объясни как сделать лучше?
Оператор >> читает из потока до первого разделителя, коим может быть конец строки или пробел или табуляция, потому если в строке есть что-то типа "abc 2234", то << считает только "abc". Потому в подобных случаях целесообразнее испоользовать cin.getline(), если предполагать что размер строки заведомо меньше заданного в функции. В случае же когда непонятно какого размера строки могут встретиться из потока читается какое-то количество байт и потом там ищется символ конца строки. И этот процесс продолжается итеративно, с последующим добавлением следующих байтов из потока, пока он не закончится.
А как пример одной из множества реализаций можно написать так:

Код:
#include <iostream>
#include <set>
#include<fstream>
#include<iostream>
using namespace std;

int main()
{
	multiset<int> sorted_data; //Объявляем шаблонный класс упорядоченного множетсва.
	ifstream in("input.txt");
	if(!in)
	{
		cout << "Cannot open file." << endl;
		return -1;
	}
	else
		while (in) //Читаем файл
		{
			char line[255];
			in.getline(line, 255);
			sorted_data.insert(atoi(line));
		}
		in.close();
		cout << "Lines count: " << sorted_data.size() << endl; //Количество прочитанных строк.
		ofstream out("output.txt");
		if(!out) 
		{
			cout << "Can't open output file";
			return -1;
		}
		//Записываем в выходной файл числа в отсотртированном виде.
		multiset<int>::const_iterator i = sorted_data.begin();
		multiset<int>::const_iterator ei = sorted_data.end();
		for (; i != ei; ++i)
		{
			out << *i << endl;
		}
		out.close();
		return 0;
}
Судя по задаче доподлинно известно что во входящем файле только числа на каждой строке, потому
Код:
		char line[255];
		in.getline(line, 255);
		sorted_data.insert(atoi(line));
//можно, как заметил Drakosha, заменить на 
		int tmp;
		in >> tmp;
		sorted_data.insert(tmp);
__________________
Дураки не динозавры - они не вымрут...

Последний раз редактировалось PSyton; 06.05.2007 в 21:52.
PSyton вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 02:37.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.