citire/scriere fisiere in c++


paul15
problema suna asa: in fisierul fis.in se afla n numere. sa se calculeze suma lor si sa se puna in fisierul fis.out.
varianta la care ma gandesc eu:D :


#inculde<iostream.h>
#include<fstream.h>
main()
{int n,i,suma=0;
cout<<"n=";cin>>n;
int a[n];

fstream f1(fis.in, ios::in), f2(fis.out, ios::out);
for(i=1;i<=n;i++)
f1>>a[i];
for(i=1;i<=n;i++)
suma=suma+a[i];
f2<<suma;
f1.close();
f2.colse();
}


care sunt greselile !? huh.gif huh.gif huh.gif

1.imi spune ca fis nu stie ce e, sau ceva in genu...apoi daca ii dau sa citeasca de la tastatura numele fisierului merge, ceva in genu: "char nume1[20],nume2[20];
cout<<"introduceti nume fisier 1";cin>>nume1;
cout<<"introduceti nume fisier 2";cin>>nume2;
fstream f1(nume1, ios::in), f2(nume2, ios::out);
etc...", asa merge, dar eu nu vreau sa imi citeasca numele de la tastatura biggrin.gif. ce e de facut!?

2.sa zicem ca in fis.in sunt numerele: 23 43 12; in fis.out imi scrie un numar total paralel . mellow.gif


cred ca sunt mai multe greseli aici smile.gif
ceva sfaturi, va rog!! biggrin.gif

ps:folosesc borland c++ 3.1
OriginalCopy
int a[n]; <-- asta se numeste in cazul tau alocare dinamica pentru ca n e introdus dinamic de la tastatura. vestea proasta e ca alocarea dinamica de memorie nu se poate face asa. Vad ca folosesti C++, deci foloseste
CODE
std::vector a
in loc de
CODE
int a[]
si citeste in acel vector din fisier cam asa:

do {
a.push_back(f1);
}while(n--);
zalman
daca citesti din fisier nu mai ai ce face cu cout<<"n=";cin>>n;
pentru a face ce vrei tu iti trebuie ori primul numar din fisier sa fie numarul de numere ex:3(nr de numere) 23 43 12(numerele)
3 reprezinta n-ul ala care tu il citeai cu cout<<"n=";cin>>n;
si iar..nu ai nevoie de a[n]...

CODE
#include<fstream.h>
int n,s,x;
fstream f("fis.in");
ofstream g("fis.out);
int main()
{
f>>n;//(numarul de numere pe care vrei sa le insumezi
for(int i=1;i<=n;i++)
{f>>x;
s=s+x;}
g<<s;
f.close();
g.close();
return 0;
}


se poate si cu vectori da nu are rost sa te complici
CODE
#include<fstream.h>
int n,s,v[100];
fstream f("fis.in");
ofstream g("fis.out);
int main()
{
f>>n;//(numarul de numere pe care vrei sa le insumezi
for (int i=1;i<=n;i++)
f>>v[i];
for(i=1;i<=n;i++)
s=s+v[i];
g<<s;
f.close();
g.close();
return 0;
}


vei obtine acelasi rezultat
paul15
"f>>n;//(numarul de numere pe care vrei sa le insumezi
for(int i=1;i<=n;i++)
{f>>x;
s=s+x;}"

deci explica'mi chestia asta biggrin.gif . cu "f>>n" baga din fisierul f in n numarul de numere, iar mai jos, "f>>x" baga din fisierul f numerele insesi. cum vine asta ? huh.gif

inca ceva:
"fstream f("fis.in");
ofstream g("fis.out);"

fstream f("fis.in"); reprezinta operatia de citire din f (input), iar ofstream g("fis.out"); reprezinta operatia de scriere in g (output) ?


happy.gif happy.gif happy.gif ms!


later edit:
imi da eroare la randul asta: "fstream f("fis.in");" si anume: could not find a match for 'fstream::fstream(char *)'
zalman
QUOTE (paul15 @ Jan 26 2008, 13:05) *
"f>>n;//(numarul de numere pe care vrei sa le insumezi
for(int i=1;i<=n;i++)
{f>>x;
s=s+x;}"


f este fisierul tau (putea fi orice alt numa fin,x,n,...orice...) iar f>>n(este echivalentu cu cin>>n) .cand folosesti fisiere nu mai ai nevoie de cout<<"introduceti numarul :";cin>>nr;
el isi ia numarul direct din fisier iar ">>" marcheaza operatia de citire...
f>>n =citesti cate numere sunt in fisier;
CODE
f>>n;
for(int i=1;i<=n;i++)
{f>>x;
s=s+x;}"


este echivalentu cu

CODE
cout<<"numarul de numere care doriti sa le insumati :";cin>>n;
for(i=1;i<=n;i++)//citesti numerele
{
cout<<"introduceti numarul:";cin>>x;
s=s+x;}
cout<<"suma este :"<<s;





ifstream f reprezinta fisierul din care citeste(ce este in paranteza este doar numele fisierului ("fis.in"); care ti-l specifica in cerinta)
ofstream g reprezinta fisierul in care scri ce doresti


happy.gif happy.gif happy.gif ms!
paul15
ultima problema biggrin.gif :
in fis.in se afla:
7 8 9
dupa rulare, in fis.out este afisat un rezultat total paralel: 16995
zalman
care dintre solutii ai folosit-o?aia cu vectori sau ...fara? la compilare iti merea?
paul15
QUOTE (zalman @ Jan 26 2008, 20:58) *
care dintre solutii ai folosit-o?aia cu vectori sau ...fara? la compilare iti merea?

am folosit'o pe aceea fara vectori, si imi dadea numerele inmultite! biggrin.gif adica daca erau 22 35 6 , in fis.out imi scria nr-le inmultite.

am reusit cu alt algoritm pana la urma:
#include<fstream.h>
int n=1,s=0,x[3];
ifstream f("fis.IN");
ofstream g("fis.OUT");
int main()
{

for (int i=1;i<=3;i++)
{f>>x[i];
s=s+x[i];}
g<<s;
f.close();
g.close();
}
zalman
ce ai facut tu este pe un caz particular (cand sunt 3 numere) ...daca vrei sa il generalizezi declara vecorul mai mare si du-te fu forul pana la n...biggrin.gif
Mosotti
citeste toate numerele pina intilnesti sfirsitul fisierului si aduna-le. nu-ti trebuie nici un vector si nici nu trebuie sa stii cite numere sint in fisier

CODE
#include <fstream>

using namespace std;

int main() {
    ifstream inputFile("fis.in");
    ofstream outputFile("fis.out");

    int s = 0;
    int n = 0;

    while (inputFile >> n) {
        s += n;
    }

    outputFile << s;

    outputFile.close();
    inputFile.close();
}
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.