Indlæse tal fra fil til et array

Tags:    c++

<< < 12 > >>
Hej jeg skal lave et program som kan indlæse klokken f.eks. 23 11 59 fra en fil og arbejde med talet for derefter at udskrive det til en anden fil, men jeg kan simpelthen ikke finde ud af at få mit program til at indlæse fra filen. jeg plejer nemlig kun at bruge cin... jeg forstår slet ikke hvornår man bruger infile, get, read, osv. jeg har prøvet lidt af hver uden succes... mit program skal iævrigt også kunne indlæse f.eks. 3.4587 fra en fil og ind i et array. det skal lige siges at der kommer til at stå 30 tal i hver fil eller der omkring.

jeg håber der er noge som vil hjælpe eller komme med et eksempel



13 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Hej jeg skal lave et program som kan indlæse klokken f.eks. 23 11 59 fra en fil og arbejde med talet for derefter at udskrive det til en anden fil, men jeg kan simpelthen ikke finde ud af at få mit program til at indlæse fra filen. jeg plejer nemlig kun at bruge cin... jeg forstår slet ikke hvornår man bruger infile, get, read, osv. jeg har prøvet lidt af hver uden succes... mit program skal iævrigt også kunne indlæse f.eks. 3.4587 fra en fil og ind i et array. det skal lige siges at der kommer til at stå 30 tal i hver fil eller der omkring.

jeg håber der er noge som vil hjælpe eller komme med et eksempel


Jeg tror det du fisker efter, er fstream (ifstream, ofstream).
-
Mvh.
Christian Schultz Knudsen



Demonstrationskode:

Fold kodeboks ind/udKode 


[Redigeret d. 22/11-04 13:47:49 af Troels Henriksen]





Jeg tror det du fisker efter, er fstream (ifstream, ofstream).
-
Mvh.
Christian Schultz Knudsen


Tror du har ret...
Bare lige for at få det helt præciseret:

For at læse fra en fil skal man først oprette et objekt af typen ifstream
Fold kodeboks ind/udKode 


Herefter bruger du ofstream's open funktion til at åbne filen med
Fold kodeboks ind/udKode 


Hernæst læser du på samme måde som du normalt gør fra cin (altså med >>;) :
Fold kodeboks ind/udKode 


ofstream (som bruges til at skrive til filer med) fungerer faktisk på samme måde, bare du skal bruge << (som i cout) til at skrive til filen med...
selvfølglelig skal du allerførst inkludere fstream

Mvh Caramon



Og fstream er naturligvis include-filen.
-
Mvh.
Christian Schultz Knudsen



i kan lige se koden til mit program... i skal se på det der ligger i main funktionen programmet er på ingen måde færdig jeg er bare ved at støbe det sammen lidt løst men ideen er at main funktioen skal indlæse fra en fil og skrive til en anden og at de to andre funktioner skal beregnen nogle ting.

#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
double K=200000/(24*60*60);
const int MAX = 100; //size of buffer
int buff[MAX];

//ofstream outfile("beregninger.txt",ios::binary);
//ifstream infile("tabeller.txt", ios::binary);

int main()
{

void NYtilGAMMEL();
void GAMMELtilNY();


ifstream infile("beregninger.txt");

cout<<"hey";
for(int j=0 ; j<MAX ; j++
{
infile>>buff[j];;
}

cout<<"hey2";
for( j=0; j<MAX; j++)
cout<<buff[j];

return 0;
}


// cout<<"*****************"<<endl;


void NYtilGAMMEL()
{
double nytimer;

cout << "indtast nye timer";
cin>> nytimer;

double tidsamlet=(nytimer*10000)/K;
double tidtimer=tidsamlet/3600;
int tidtimer2=tidtimer;
double tidmin=(tidtimer-tidtimer2)*60;
int tidmin2=tidmin;
double tidsek=(tidmin-tidmin2)*60;
float tidsek2=floor(tidsek+0.5);

cout<< "timer" << tidtimer2 << "min" << tidmin2 << "sek" <<tidsek;

}

void GAMMELtilNY()
{
int timer, min,sek;

cout<<"indtast gammel tid (TT MM SS)";
cin>>timer>>min>>sek;
float seksamlet=(timer*60*60)+(min*60)+sek;
float nyseksamlet= seksamlet*K;
float nysamlet=nyseksamlet/10000;
///float nyhel=floor(nysamlet+0.5);
//HUSK KUN FIRE DECIMALEr!!!!!
cout<< "nytid" << nysamlet;
}



Lige en fuldstændig overpedantisk kommentar:
Man skal returnere en af EXIT_FAILURE, EXIT_SUCCESS eller 0 fra main eller bruge en af disse i kaldet til main, og intet andet (f.ex. ikke -1).



Lige en fuldstændig overpedantisk kommentar:
Man skal returnere en af EXIT_FAILURE, EXIT_SUCCESS eller 0 fra main eller bruge en af disse i kaldet til main, og intet andet (f.ex. ikke -1).


Der skulle selvfølgelig stå "i kaldet til exit" og ikke main.
Jeg kunne ikke få lov til at rette ???



Man skal returnere en af EXIT_FAILURE, EXIT_SUCCESS eller 0 fra main eller bruge en af disse i kaldet til main, og intet andet (f.ex. ikke -1).


Generelt ja, men det er tilladt at returnere andet fra main(). F.eks. bruger Stroustrup i sin bog, The C++ Programming Language, i et eksempel, et eksempel hvor returværdien er antallet af fejl. Denne teknik virker unødvendig i standalone-applikationer, men det gør dem lettere at integrere i scripts, hvor returværdien kan være vigtig.



Hvis man har de pedantiske briller på når man læser C standarden (jeg har ikke læst C++ standarden, men jeg tror at det samme gælder her) står der at man kun må returnere en af de tre førnævnte værdier fra sine programmer, ellers får man "Undefined behavior" og alt kan ske.

Hvis man har brugt GetExitCodeProcess:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getexitcodeprocess.asp

Ved man at man ikke skal returnere 259 fra sine programmer hvis de skal kunne køre på Windows.



Hvis man har de pedantiske briller på når man læser C standarden (jeg har ikke læst C++ standarden, men jeg tror at det samme gælder her) står der at man kun må returnere en af de tre førnævnte værdier fra sine programmer, ellers får man "Undefined behavior" og alt kan ske.


Dette gælder ikke for C++. Dog er det "dårlig form" at returnere andet end hvad der kan ligge i en byte (åndssvagt, synes jeg, man kunne lige så godt udvide det til et machine word). Det er, så vidt jeg husker, acceptabelt for en given implementation at wrappe alle returværdier der ikke passer i en byte (for main).

Hvis man har brugt GetExitCodeProcess:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getexitcodeprocess.asp

Ved man at man ikke skal returnere 259 fra sine programmer hvis de skal kunne køre på Windows.


Jeg udvikler under Unix, men hvis jeg nogensinde får behov for at portere mine programmer, vil dette nok have betydning. Jeg takker for informationen. :-)




<< < 12 > >>
t