ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

24.02.2008, 20:18
|
|
Moderator - Level 7
Регистрация: 16.02.2008
Сообщений: 580
Провел на форуме: 1595333
Репутация:
291
|
|
а почему у тебя массив структур то?
делай одну структуру а не массив. потом присваивай значения элементам структуры, потом открывай файл и в него пиши. что ты там написал я не разобрался. лучше используй не с++ а си. в си все намноге проще и яснее
Последний раз редактировалось zythar; 24.02.2008 в 20:21..
|
|
|

24.02.2008, 21:29
|
|
Members of Antichat - Level 5
Регистрация: 05.04.2006
Сообщений: 1,066
Провел на форуме: 3493315
Репутация:
1228
|
|
Код:
#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;
}
|
|
|

24.02.2008, 22:13
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
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)
|
|
|
|