Jump to content
BulForum.com

C++ help


peachlover

Recommended Posts

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

#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

mersi mnogo. :) :punk :) :punk :)

Link to comment
Share on other sites

да не забравиш и в началото #include "stdio.h"

щото иначе няма printf(), fopen(), fwrite() и FILE

Link to comment
Share on other sites

да не забравиш и в началото #include "stdio.h"

щото иначе няма printf(), fopen(), fwrite() и FILE

Що си мисля, че има нещо сбъркано тук? Пича пита за Ц++ ти му говориш на Ц, и накрая когато се опита да компилира сорса с Ц++ компилатор, ми е интересно какво ще се получи :)

Link to comment
Share on other sites

изхождайки от факта, че С++ е надмножество на С следва, че във всеки С++ сорс може да включваш и С код.

 

йедит: и btw всеки С++ компилатор с удоволствие ще ти компилира С код.

Link to comment
Share on other sites

Да това си е напрактика C сорс но той ще се компилира на всеки ANSI C++ компилатор и ще си върви.

Link to comment
Share on other sites

само че на С++ е много общо казано. Добре е да каже и точно средата.

Може да използва и 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

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...