Форум «Всё о Паскале» _ Ада и другие языки _ удаление ел-та из масива; бинарный файл
Автор: Jerry 26.11.2006 2:35
1.Удалить из масива элементы, индект которых кратен двум, и вывести на экран оставшиеся... как правильно записать условие? чтоб удаляло числа кратные 2-м?..
Код
void krat(apteka* stdar[]) {
//вывод эл-ов на экран printf(" # name amount price weight \n"); for (int i=0; i<MAX; i++) { stdar[i]->printstud(); }
void delobject(apteka* stdar[]) // удаление одного ел-та { int n; printf("What object do you want to delete?\n"); scanf("%d", &n); delete stdar[n-1]; stdar[n-1]=stdar[MAX-1]; stdar[MAX-1]->number=n; MAX--; printf("Deleted Complete!\n");
}
2. Записать в бинарный файл 10 обьектов класса, прочитать, вывести данные и получить размер файла в байтах. Я если чесно не нашла, описание бинарных файлов на си...>.< Разве что в них пишется fread, fwrite, а размер?.. с обычным файлом функции чтения и записи выглядят так, хотя чтение немного... эм... не работает...
Код
void Read() { file=NULL; int Number=0; char Name0[25]; int Amount0; float Price0,Weight0; char filepath[100]; printf("Please, input the full file-path:\n"); scanf("%s", filepath); file=fopen(filepath, "r"); if (file==NULL) {printf("False file-path! Please, rewrite!\n");} else {
void Write() { file=NULL; int Number=0; char filepath[100]; printf("Please, input the full file-path for writing:\n"); scanf("%s", filepath); file=fopen(filepath, "w"); if (file==NULL) {printf("False file-path! Please, rewrite!\n");} else { for (int i=0; i<MAXLEN; i++) {
fprintf(file, "%s %3d %.2f %.2f\n", stdar[i]->Name, stdar[i]->Amount, stdar[i]->Price, stdar[i]->Weight); Number++; } printf("Complete! %d Object's added\n", Number); fclose(file); } } void initialize(apteka* stdar[]) //инициализация 10 обьектов... { stdar[0] = new apteka(1,"Analgin", 12, 75, 180); stdar[1] = new apteka(2,"Noshpa", 2, 60, 285); stdar[2] = new apteka(3,"Phalimint",3, 20, 176); stdar[3] = new apteka(4,"Aspirin", 6, 18, 187); stdar[4] = new apteka(5,"Solpadein",10, 37, 300); stdar[5] = new apteka(6,"Tabletki", 21, 48, 179); stdar[6] = new apteka(7,"Nazalvan",14, 67, 475); stdar[7] = new apteka(8,"Vitamihi", 7, 54, 107); stdar[8] = new apteka(9,"Zelenka",13, 19, 171); stdar[9] = new apteka(10,"Plastir",9, 76, 220); printf("Database initialized successfully\n"); }
Автор: volvo 26.11.2006 5:51
Jerry, чтобы правильно удалить все элементы с четными индексами, надо идти по массиву от конца в начало, иначе (если пойдешь с начала массива) ты собьешь индексацию:
нашла пример записи и чтения в/с бинарного файла... но что-то не выходит...
Код
void Read() { size_t res; double filepath[100]; printf("Please, input the full file-path:\n"); / scanf("%s", filepath); file=fopen(filepath, "rb"); if (file == 0) { perror("Ошибка"); exit(1); }
res = fread(filepath, sizeof(double), 100, file);
} fclose(file);
}
void Write() { int Number=0; double filepath[100]; printf("Please, input the full file-path for writing:\n"); scanf("%s", filepath); file=fopen(filepath, "wb"); if (file == 0) { perror("Ошибка"); exit(1); } for (int i=0; i<MAXLEN; i++) { // вот тут что надо писать в скобках для записи сруткуры? res= fwrite(filepath, "%s %3d %.2f %.2f\n", stdar[i]->Name, stdar[i]->Amount, stdar[i]->Price, stdar[i]->Weight,file); Number++; } printf("Complete! %d Object's added\n", Number); fclose(file); } }
Автор: volvo 26.11.2006 21:01
res = fwrite(&s, sizeof(s), 1, f);
где s - переменная (структура), которую пишем в файл, f - файл, куда пишем ...
А пример - бред какой-то записывать имя файла в массив double-ов ...
Автор: Jerry 26.11.2006 23:57
так должно быть? ибо оно что-то не запускется...
Код
//stdar - указательна структуру //FILE* file;
void Read(Apteka* stdar[]) { file=NULL; int i; size_t res; char filepath[100]; printf("Please, input the full file-path:\n"); scanf("%s", filepath); file=fopen(filepath, "rb"); / if (file==NULL) {printf("False file-path! Please, rewrite!\n");} else {
while (!(feof(file))) { res = fread(&stdar[i], sizeof(stdar[i]), 1, file);
} fclose(file);
}
void Write(Apteka* stdar[]) { file=NULL; int i; size_t res; char filepath[100]; printf("Please, input the full file-path for writing:\n"); scanf("%s", filepath); file=fopen(filepath, "wb"); if (file==NULL) {printf("False file-path! Please, rewrite!\n");} else {
while (!(feof(file))) { res = fwrite(&stdar[i], sizeof(stdar[i]), 1, file); } fclose(file);