Toon posts:

[C++]wegschrijven naar tekstbestand doet het niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben wat aan het programmeren in C++. Nu wil ik een ketting in een tekstfile zetten. Dit doe ik als volgt:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void keuze7(naw*beginn,naw*naam,int&gedaan) {
  char waar[80];
  if (gedaan == 1) {
    naam = beginn->volg;
    clrscr();
    cout << "Waar wilt u het bestand opslaan?: ";
    cin >> waar;
    ofstream bestand(waar);
    while (naam->volg != NULL); {
      bestand << naam->nummer << "  ";
      bestand << naam->naam << "  ";
      bestand << naam->adres << "  ";
      bestand << naam->woonplaats << endl;
      naam = naam->volg; }
    bestand.close(); }
  else {
    cout << "U moet wel eerst de tabel hebben geinitialiseerd!!!";
    getch(); }
}


Het enige wat hij nu doet is vragen waar het bestand moet komen te staan en vervolgens wordt me cpu gebruik 100% en blijft hij hangen. Al sluit ik het programma dan hart af dan staat er op me schijf wel een tekstbestand, maar die is helemaal leeg!! Wat zou het probleem kunnen zijn???

[ Voor 17% gewijzigd door Verwijderd op 06-05-2003 16:55 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

P&W FAQ - gedrag
Overmatig gebruik van uitroeptekens, vraagtekens en hoofdletters in topictitels zijn uitermate storend.
Doe dat dus niet. Je hebt goede kans dat je topic puur op basis van de stijl al op slot gaat.
En er staat een ; achter je while ()

Had je natuurlijk ook makkelijk zelf achter kunnen komen tijdens debuggen :{
P&W FAQ - Leer **** debuggen!!

[ Voor 22% gewijzigd door .oisyn op 06-05-2003 17:01 ]

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
owww, damn. Ik heb er wel een uur naar gekeken ofzow, maar had hem nie eenz gezien :P

thnx!!!!!!!! :P

[ Voor 11% gewijzigd door Verwijderd op 06-05-2003 17:03 ]


Verwijderd

BTW: deze code slaat beginn over, en gaat meteen over op het tweede item. Ook hou je in deze functie geen rekening met:
• (beginn == NULL)
• ((naam = beginn->volg) == NULL)

edit:
En het laatste item sla je ook nog over!!! als naam->volg niet bestaat, bestaat naam nog wel...


En "naam" lijkt me hier meer gepast als locale variabele i.p.v. een functie argument, maar dat is persoonlijk... Het is een stuk sneller, maar misschien wil je meteen ook weten wat de laatste postitie is op de lijst....

[ Voor 14% gewijzigd door Verwijderd op 06-05-2003 17:22 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

maar misschien wil je meteen ook weten wat de laatste postitie is op de lijst....
dan had het een reference naar een pointer moeten zijn, wat het niet is. De parameter wordt hier gewoon gebruikt als locale variabele, en het maakt zelfs niet uit wat de aanroepende functie meegeeft als naam: die waarde wordt gelijk overschreven met beginn->volg :)

Maar idd, ik zou die naam dus helemaal weghalen (ook niet als locale var), en die while als volgt:

C++:
1
2
3
4
for (naw * n = beginn; n; n = n->volg)
{
    // ...
}


Ook zou ik van die char[80] een std::string maken, zodat het niet de soep in loopt als je een pad van 80 characters of langer opgeeft
En natuurlijk een std::getline () ipv de operator >>, zodat spaties in het bestandnaam ook nog mogelijk zijn

[ Voor 38% gewijzigd door .oisyn op 06-05-2003 17:57 ]

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 tips allemaal, maar achter dit stukje source zit nog een aardig groot programma van 15 functies en hij werkt zo prima. Dus bedankt voor de tips, maar ik laat het toch maar zo :D

Verwijderd

.oisyn schreef op 06 May 2003 @ 17:55:
dan had het een reference naar een pointer moeten zijn, wat het niet is.
Idd, overlooked, dacht ook dat dat d'r stond, maar dat was "gedaan". Voor "gedaan" wordt dit dus wel gedaan ;), terwijl dat al helemaal niet nodig is, aangezien die const blijft...
Maar idd, ik zou die naam dus helemaal weghalen (ook niet als locale var), en die while als volgt:
C++:
1
for (naw * n = beginn; n; n = n->volg)
Ga ik ook bijdehand doen: dat is ook een locale var!!! :X

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 06 May 2003 @ 20:09:
Ga ik ook bijdehand doen: dat is ook een locale var!!! :X
ja :D
ik dacht eerst, ik maak een for-lus zonder locale var en pas ik beginn gewoon steeds aan. Maar toen bedacht ik dat dat eigenlijk niet zo netjes was, dus ik maakte toch maar een extra iteratie-variabele :Y)

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.

Pagina: 1