Toon posts:

[C] resultaten in file zetten / fprintf

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een zeer eenvoudig reken programmaatje te schrijven in C, ik wil alleen graag dat de resultaten niet alleen als het scherm hebben, maar ook in een file worden gezet (fprintf) ik heb al verscheidene dingen geprobeert, maar niets werkt, wie kan raad geven? Ik zal even een verkorte code geven:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>

main()

{
    int i, n, year, found, stop;
    float  files, result;

    printf("hoeveel berekeningen wil je uitvoeren? ");
    scanf ("%d", i);
    printf("\n");

    n = 0;

    while (n < i) {

        printf("berekening %d:\n", n+1);
        printf("---------------------------------------------\n");
        printf("over welk jaar wilt u result berekenen: ");
        scanf ("%d", &year);
        printf("\n");

        printf("aantal files gevonden: ");
        scanf ("%d", &found);
        printf("\n");

        if (year == 1997)
            files = 2196;
    
        else if (year == 1998)
            files = 3580;
     
        else if (year == 1999)
            files = 3132;  

        /*etcetcetcetc*/
  
        else 
            printf ("geen invoer ontvangen"); 

        result = (found / files)*100;

        printf("in %d is het resultaat %.2f\n", year, result);
        printf("\n");

        n++;
    }

    return 0;
}

[ Voor 29% gewijzigd door .oisyn op 14-03-2004 15:46 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

ik heb je code maar even wat leesbaarder gemaakt (indenting is heel belangrijk!)
Maar wat werkt er nou precies niet? Waar gebruik je dat fprintf dan? Ik zie je ook nergens een file openen...

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
.oisyn schreef op 14 maart 2004 @ 15:47:
ik heb je code maar even wat leesbaarder gemaakt (indenting is heel belangrijk!)
Maar wat werkt er nou precies niet? Waar gebruik je dat fprintf dan? Ik zie je ook nergens een file openen...
bedankt, mis gegaan met kopieren. Met dat fopen zit ik dus ook, ik weet wel dat ik ergens fopen moet plaatsen maar hoe waar en wat precies kom ik dus niet achter :( ik mijn boek staan veel complexere voorbeelden waarbij fopen en fprintf bij worden gebruikt en krijg het helaas niet gereduceerd naar deze code en ergens weet ik dat het niet zo moeilijk zal wezen.

  • Daedalus
  • Registratie: Mei 2002
  • Niet online

Daedalus

Moderator Apple Talk

Keep tryin'

Misschien dat je hier wat aan hebt: http://vergil.chemistry.g...amming/c-tutorial/io.html

“You know what I've noticed Hobbes? Things don't bug you if you don't think about them. So from now on, I simply won't think about anything I don't like, and I'll be happy all the time!” | 宇多田ヒカル \o/


  • _Johannn_
  • Registratie: Februari 2004
  • Laatst online: 08-05 06:24
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <fstream> //bovenaan de file
...
ifstream in_stream;
ostream outstream;

in_stream.open("infile.txt");
out_stream("uitfile.txt");

// en je getal dat je met behulp van je dos progje krijgt

oustream << getaldosprogje;

in_stream.close();
out_stream.close();


Hierboven een klein voorbeeldje hoe er ermee kan werken

edit:
was net iets te laat

[ Voor 12% gewijzigd door _Johannn_ op 14-03-2004 16:01 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 14 maart 2004 @ 15:53:
[...]


bedankt, mis gegaan met kopieren. Met dat fopen zit ik dus ook, ik weet wel dat ik ergens fopen moet plaatsen maar hoe waar en wat precies kom ik dus niet achter :( ik mijn boek staan veel complexere voorbeelden waarbij fopen en fprintf bij worden gebruikt en krijg het helaas niet gereduceerd naar deze code en ergens weet ik dat het niet zo moeilijk zal wezen.
Je zou ook gewoon de documentatie kunnen lezen over de functie fopen. Wat doet fopen? Een file openen. Wanneer moet je dat doen? voordat je naar de file wilt schrijven natuurlijk, dus aan het begin van je programma lijkt me wellicht een goed idee.

Het programma dat je nu hebt, heb je dat wel zelf geschreven? Dan moet het je toch ook wel lukken om ipv naar het scherm, naar een file te schrijven? En ook tegelijkertijd?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
bedankt voor de tutorial
The prototype for fprintf is:
int fprintf(FILE *stream, const char *format, ...);

fprintf takes in a special pointer called a file pointer, signified by FILE *. It then accepts a formatting string and arguments. The only difference between fprintf and printf is that fprintf can redirect output to a particular stream. These streams can be stdout, stderr, or a file pointer. More on file pointers when we get to fopen
ik moet dus een pointer FILE * aanmaken die naar de lokatie wijst van de file waar het in moet staan. Alleen de prototype kan ik even niet vertalen naar mijn code aangezien ik geen const char heb.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

_Johannn_ schreef op 14 maart 2004 @ 16:01:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <fstream> //bovenaan de file
...
ifstream in_stream;
ostream outstream;

in_stream.open("infile.txt");
out_stream("uitfile.txt");

// en je getal dat je met behulp van je dos progje krijgt

oustream << getaldosprogje;

in_stream.close();
out_stream.close();


Hierboven een klein voorbeeldje hoe er ermee kan werken

edit:
was net iets te laat
Niet alleen iets te laat, bovendien heeft de TS er gewoon niets aan, het is C, geen C++ (bovendien is het niet echt gewenst om met kant-en-klare oplossingen te komen)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 26-05 23:14
Erm, _Johannn, het gaat over C, niet over C++.

De link van mcDaedalus is trouwens wel nuttig.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 14 maart 2004 @ 16:03:
Alleen de prototype kan ik even niet vertalen naar mijn code aangezien ik geen const char heb.
Wat is het type van "bladiebla" in je code dan?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • _Johannn_
  • Registratie: Februari 2004
  • Laatst online: 08-05 06:24
Ik had echt dat het om C++ ging :)

En de door mijn gegeven code is verre van klaar, hij zal zowiezo alles aan moeten passen zodat het ook in zijn C file zou werken. In mijn code zeg ik enkel hoe je gebruik zou kunnen maken van een fstream.

Verwijderd

Topicstarter
.oisyn schreef op 14 maart 2004 @ 16:02:
[...]


Je zou ook gewoon de documentatie kunnen lezen over de functie fopen. Wat doet fopen? Een file openen. Wanneer moet je dat doen? voordat je naar de file wilt schrijven natuurlijk, dus aan het begin van je programma lijkt me wellicht een goed idee.

Het programma dat je nu hebt, heb je dat wel zelf geschreven? Dan moet het je toch ook wel lukken om ipv naar het scherm, naar een file te schrijven? En ook tegelijkertijd?
Ja ik heb dit programma zelf geschreven, de lokatie waarop het moet staan is mij ook duidelijk, en ik ben het helaas niet met je eens als me dit al lukt met schrijven dat ik ook een fopen moet kunnen schrijven: ik werk met "C programming a modern aproach" en je zou dit al kunnen schrijven op basis van hoofdstuk 1 t/m 5 en fopen wordt pas behandeld in hoofdstuk 22 in combinatie met veel complexere code.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Kom kom, met een beetje logisch nadenken moet je er toch ook wel komen? fprintf () is precies hetzelfde als printf (), met als uitzondering dat je een FILE * mee moet geven. Hoe je een file opent (fopen) en sluit (fclose) is ook vrij simpel, en staat gewoon in de documentatie beschreven

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
.oisyn schreef op 14 maart 2004 @ 16:09:
Kom kom, met een beetje logisch nadenken moet je er toch ook wel komen? fprintf () is precies hetzelfde als printf (), met als uitzondering dat je een FILE * mee moet geven. Hoe je een file opent (fopen) en sluit (fclose) is ook vrij simpel, en staat gewoon in de documentatie beschreven
dus bv:

C:
1
2
3
4
5
6
7
8
9
10
11
12
FILE *fp;
    
fp = fopen("output.dat", "rb+");

/* blablabla */


fprintf(fp, "jaar: %d : resultaat: %.2f procent\n", year, result);

/* blablabla */

fclose(fp)

[ Voor 4% gewijzigd door Verwijderd op 14-03-2004 20:41 ]


  • Daedalus
  • Registratie: Mei 2002
  • Niet online

Daedalus

Moderator Apple Talk

Keep tryin'

Heb je deze code al uitgeprobeerd?

“You know what I've noticed Hobbes? Things don't bug you if you don't think about them. So from now on, I simply won't think about anything I don't like, and I'll be happy all the time!” | 宇多田ヒカル \o/


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

a) werkt dat? (kun je zelf ook achter komen natuurlijk)
b) over dat "rb+", vraag jezelf eens af waarom r, waarom b en waarom +

Misschien kom ik wat irritant over, maar ik leer je alleen maar je probleem te begrijpen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
mcDaedalus schreef op 14 maart 2004 @ 20:45:
Heb je deze code al uitgeprobeerd?
Yup, maar werkt bijna logischerwijs niet...
a) werkt dat? (kun je zelf ook achter komen natuurlijk)
b) over dat "rb+", vraag jezelf eens af waarom r, waarom b en waarom +

Misschien kom ik wat irritant over, maar ik leer je alleen maar je probleem te begrijpen
ik wil het ook graag leren, dus komt niet irritant over :) hapklaar is niet altyd even leerzaam

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nog even een hint over die mode (rb+): je wilt een textbestand wegschrijven ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Daedalus
  • Registratie: Mei 2002
  • Niet online

Daedalus

Moderator Apple Talk

Keep tryin'

Overigens is het wel raadzaam om te controleren of fopen geen null-pointer oplevert. Het is een kleine moeite en bespaart je een hoop zorgen.

[ Voor 3% gewijzigd door Daedalus op 15-03-2004 00:08 ]

“You know what I've noticed Hobbes? Things don't bug you if you don't think about them. So from now on, I simply won't think about anything I don't like, and I'll be happy all the time!” | 宇多田ヒカル \o/


  • Marc
  • Registratie: November 2001
  • Laatst online: 01-12-2021
als je toch bezig bent is het misschien leuk als je kennis maakt met het switch-statement :)

C:
1
2
3
4
5
6
7
8
9
10
11
switch (year) {
            case 1997:
                        files = 2196; 
                        break;
            case 1998:
                        files = 3580; 
                        break;
            ....
            default:
                        printf ("geen invoer ontvangen");  
}

succes :)

[ Voor 11% gewijzigd door Marc op 15-03-2004 10:08 ]


  • LazySod
  • Registratie: Augustus 2003
  • Laatst online: 27-05 12:44

LazySod

Scumbag with a mission

als je toch bezig bent is het misschien leuk als je kennis maakt met het switch-statement
En als dan gebruikt wordt gemaakt van een switch statement is het handig als er daar ook voor gezorgd wordt dat de "files" variabele een geldige waarde krijgt - zodat de vervolgende berekeningen niet in de mist gaan (beter nog - niet gebeuren)

verder .. als in de eerste scanf( "%d", i) nog een & voor de i wordt gezet dan werkt dat ook.

input controle is hier en daar ook wel handig, maar dat terzijde.

Proof is the idol before whom the pure mathematician tortures himself. (Sir Arthur Eddington)

Pagina: 1