peachlover Posted June 19, 2004 Share Posted June 19, 2004 mi to ob6to zeto az si4ko napisah v zaglavieto ama da povtorq iskam kato sam sazdal edin struct s nqkakvi elementi i posle sam deklariral masiv ot tozi struct da moga kato mu dam stoinost na elementite i uj si4ko e ok iskam da go nabutam v edin fail .. kak stava za6toto s f<<masiv_ot_struct-a ne stava? sigurno mi e mnogo tap vaprosa no kato ne znam nqma kakvo da se pravi Link to comment Share on other sites More sharing options...
sasquatch Posted June 19, 2004 Share Posted June 19, 2004 #include "stdio.h"#define COUNT 10 struct s1{ int a; int b; double c; }; s1 masiv[COUNT]; s1 masiv2[COUNT]; int main(int argc, char* argv[]) { FILE * f; for(int i=0;i<COUNT;i++){ masiv.a = i; masiv.b = i*2; masiv.c = (double)i/2; } //otvarq file-a if((f = fopen("test.dat","wb+")) == 0) { printf("%s","Error opening file!\n"); return 1; } //zapisva masiva fwrite(masiv,sizeof(masiv),1,f); //zatvarq file-a fclose(f); if((f = fopen("test.dat","rb")) == 0) { printf("%s","Error opening file!\n"); return 1; } //chete masiva fread(masiv2,sizeof(masiv2),1,f); for(i=0;i<COUNT;i++){ printf("%d %d %f\n",masiv2.a, masiv2.b, masiv2.c); } fclose(f); return 0; } Естествено ако не знаеш размера на масива (ако ползваш указател) щети трябва и променлива в която да държиш размера и ще трябва и нея да я записваш във файла с fwrite() за да знаеш после колко да прочетеш с fread(). Респективно вместо sizeof(masiv) ще си слагаш твоята променлива. Link to comment Share on other sites More sharing options...
peachlover Posted June 19, 2004 Author Share Posted June 19, 2004 mersi mnogo. Link to comment Share on other sites More sharing options...
sasquatch Posted June 19, 2004 Share Posted June 19, 2004 да не забравиш и в началото #include "stdio.h" щото иначе няма printf(), fopen(), fwrite() и FILE Link to comment Share on other sites More sharing options...
ddb Posted June 19, 2004 Share Posted June 19, 2004 да не забравиш и в началото #include "stdio.h"щото иначе няма printf(), fopen(), fwrite() и FILE Що си мисля, че има нещо сбъркано тук? Пича пита за Ц++ ти му говориш на Ц, и накрая когато се опита да компилира сорса с Ц++ компилатор, ми е интересно какво ще се получи Link to comment Share on other sites More sharing options...
rasco Posted June 20, 2004 Share Posted June 20, 2004 изхождайки от факта, че С++ е надмножество на С следва, че във всеки С++ сорс може да включваш и С код. йедит: и btw всеки С++ компилатор с удоволствие ще ти компилира С код. Link to comment Share on other sites More sharing options...
sasquatch Posted June 20, 2004 Share Posted June 20, 2004 Да това си е напрактика C сорс но той ще се компилира на всеки ANSI C++ компилатор и ще си върви. Link to comment Share on other sites More sharing options...
Airfan Posted June 20, 2004 Share Posted June 20, 2004 само че на С++ е много общо казано. Добре е да каже и точно средата. Може да използва и fstream примерно Link to comment Share on other sites More sharing options...
sasquatch Posted June 20, 2004 Share Posted June 20, 2004 само че на С++ е много общо казано. Добре е да каже и точно средата.Може да използва и fstream примерно Теоретично на всяка среда която поддържа ANSI C++ трябва да върви. #include <cstdlib>#include <fstream> #include <iostream> using namespace std; #define COUNT 10 struct s1{int a;int b;double c;}; template <int x> class u2{ public: union{ char content[x*sizeof(s1)]; s1 array[x]; }; }; u2<COUNT> temp_out; u2<COUNT> temp_in; int main(int argc, char* argv[]) { for(int i=0;i<COUNT;i++){ temp_out.array.a = i; temp_out.array.b = i*2; temp_out.array.c = (double)i/2; } std::ofstream out("test.dat",ios_base::binary | ios_base::trunc); if(!out){ cout << "Error opening file!" << endl; return 1; } for(i=0;i<COUNT*sizeof(s1);i++){ out.put(temp_out.content); } out.close(); std::ifstream in("test.dat",ios_base::binary); if(!in){ cout << "Error opening file!" << endl; return 1; } for(i=0;i<COUNT*sizeof(s1);i++){ in.get(temp_in.content); } for(i=0;i<COUNT;i++){ cout << temp_in.array.a << " " << temp_in.array.b << " " << temp_in.array.c << endl; } in.close(); return 0; } Едит: направих лека модификация с template, така може да се инстанцира клас в който има анонимно обединение в което пък има масив с x на брой структури. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.