ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 24.02.2008, 20:18
zythar
Moderator - Level 7
Регистрация: 16.02.2008
Сообщений: 580
Провел на форуме:
1595333

Репутация: 291


Отправить сообщение для zythar с помощью ICQ
По умолчанию

а почему у тебя массив структур то?
делай одну структуру а не массив. потом присваивай значения элементам структуры, потом открывай файл и в него пиши. что ты там написал я не разобрался. лучше используй не с++ а си. в си все намноге проще и яснее

Последний раз редактировалось zythar; 24.02.2008 в 20:21..
 

  #2  
Старый 24.02.2008, 21:29
nc.STRIEM
Members of Antichat - Level 5
Регистрация: 05.04.2006
Сообщений: 1,066
Провел на форуме:
3493315

Репутация: 1228


Отправить сообщение для nc.STRIEM с помощью ICQ
По умолчанию

Код:
#include <stdio.h>

struct MYSTRUCT {
	char city[20];
	char otp[5];
	int number;
	char r[5];
	int mest;
	};
	
int main(void)
{
    int KolEl;
 ///// .......  определяемся c кол-вом элементов
    MYSTRUCT *dan= new MYSTRUCT[KolEl];
    
	/* тут ввод данных
	..................
	*/
	
	//сохраняем
	FILE *fw;
	fw = fopen("save.txt", "wb");
	for(int i=0; i<KolEl; i++)
		fprintf(fw, "%s\n%s\n%d\n%s\n%d\n", dan[i].city, dan[i].otp, dan[i].number, dan[i].r, dan[i].mest,);
	fclose(fw);
	return 0;
}
 

  #3  
Старый 24.02.2008, 22:13
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме:
3578578

Репутация: 275
Отправить сообщение для Forcer с помощью ICQ
По умолчанию

ph0en1x
Держи рабочий вариант:

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

struct MYSTRUCT {
	char city[20];
	char otp[5];
	int number;
	char r[5];
	int mest;
};

void setStructVals(struct MYSTRUCT &);
void svStrToFile(const struct MYSTRUCT &, fstream &);
void prtStr(const struct MYSTRUCT &);

int main()
{
	const char ifile[] = "aeroflot.txt";
	struct MYSTRUCT* myptr = 0;
	int size = 0;

	// узнаём у пользователя, сколько он хочет ввести структур
	cout << "Number of structurs : ";
	cin >> size;

	//  выделяем память и проверяем, выделилась ли она
	myptr = new struct MYSTRUCT[size];

	if( myptr == 0 ) {
		cerr << "Not enougth memory" << endl;
		return 1;
	}

	// открываем файл, делаем проверку открытия
	fstream file(ifile, ios::binary | ios::in | ios::out | ios::trunc);
	
	if( file.fail() ) {
		cerr << "Cant open file" << endl;
		return 1;
	}

	// предоставляем пользователю возможность ввести значения для структур, сразу же сохраняя в файл
	for(int i=0; i < size; ++i) {
		cout << "\tNew struct : " << endl;
		setStructVals(myptr[i]);
		svStrToFile(myptr[i], file);
	}

	// освобождаем память занятую структурами
	// теперь структуры мы сможем получить только из файла
	delete [] myptr;

	// запрашиваем у пользователя данные для поиска
	char city[20];
	char otp[5];

	cout << "\n\tFind struct:\nInput parametrs for struct : " << endl;
	cout << "\ncity : ";
	cin >> city;
	cout << "otp : ";
	cin >> otp;

	struct MYSTRUCT tmp;

	// осуществляем поиск по введённым значениям
	for(int i=0; i < size; ++i) {
		file.seekg(i * sizeof(tmp));
		file.read((char*)&tmp, sizeof(tmp));

		if( ( strcmp(tmp.city, city) && strcmp(tmp.otp, otp) ) == 0 ) {
			cout << "Struct : " << endl;
			prtStr(tmp);
			// break;  // можно завершить поиск, либо искать дальше
		}
	}

	cout << "\tsearch is ended" << endl;

	// завершаем работу
	file.close();

	return 0;
}

void setStructVals(struct MYSTRUCT &str) {
	cout << "city : ";
	cin >> str.city;   // предполагается, что нет разделителей в названии города
	cout << "otp : ";
	cin >> str.otp;
	cout << "number : ";
	cin >> str.number;
	cout << "r : " ;
	cin >> str.r;
	cout << "mest : ";
	cin >> str.mest;
}

void svStrToFile(const struct MYSTRUCT &str, fstream &file) {
	file.write((char*)&str, sizeof(str));
}

void prtStr(const struct MYSTRUCT &str) {
	cout << "city : " << str.city << endl;
	cout << "otp : " << str.otp << endl;
	cout << "number : " << str.number << endl;
	cout << "r : " << str.r << endl;
	cout << "mest : " << str.mest << endl;
}
Замечание:
Как правильно заметил zythar, для данной конкретной задачи не нужно использовать массив структур, достаточно одной стуктуры. При написании этого кода я упустил этот момент. Оставляю первоначальный вариант, так как он, мне кажется, больше соответствует названию темы.

Последний раз редактировалось Forcer; 25.02.2008 в 03:36..
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT.XYZ