Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [Cat vervanger in C]Rare fout in While loop  (gelezen 890 keer)

Offline Joshua822

  • Documentatieteam
  • Steunpunt: Nee
[Cat vervanger in C]Rare fout in While loop
« Gepost op: 2009/07/19, 20:55:19 »
Hallo allemaal,

ik ben bezig met het schrijven van mijn eerste commando lijn hulpmiddel. Namelijk om een bestand uit te lezen, Dit is de code :

#include <stdio.h>

 int main(int argc, int argv[2]) {

  int check_eof;

  if ( !argc == 2 ) {

   printf("%s","U specifceerde geen bestand om uit te lezen.\n");
   return 1;

  }

  FILE *fptr = fopen( argv[1], "r" );

  while ( ( check_eof = fgetc( fptr ) ) !check_eof = EOF ) {

   printf("%s", check_eof);

  }
 }

Nu is het probleem als volgt, ik krijg van gcc steeds de volgende foutmelding :

readfile.c:16: error: expected ‘)’ before ‘check_eof’
Maar er staan naar mijn weten toch genoeg haakjes ?

O, en ik weet het, ik controleer nu nog niet of het bestand niet bestaat, maar dat zal ik nadat dit is opgelost wel even doen.

Alvast bedankt.

Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Re: [Cat vervanger in C]Rare fout in While loop
« Reactie #1 Gepost op: 2009/07/20, 00:07:12 »
Er zijn een aantal zaken mis met je code:

- tweede argument van int main moet char** zijn, dus "char **argv" of "char *argv[]" in plaats van "int argv[2]"
- als je netjes (volgens ANSI C) wil programmeren, mag je declaraties niet mixen met programmacode, wat betekent dat declaraties altijd bovenaan een blok moeten staan; in dit geval moet "File *fptr = blablabla;" dus voor of achter "int check_eof;" geplaatst worden
- de eigenlijke fout: de expressie in je while lus is misvormd... probeer dit in de plaats:
while (fgetc(fptr) != EOF) {
    printf("Not end of file yet...\n");
}
dat is korter en eenvoudiger; de check_eof variabele mag je dan eventueel ook weglaten
- hoewel het bij C++ weggelaten mag worden (maar ook is afgeraden omdat dit een slechte programmeerstijl is) moet in C élke functie, ook de main functie, een integer returnen, dus onderaan het programma is "return 0;" nog vereist (tenminste als je de ANSI C standaard wil volgen)

Al deze problemen zou de compiler automatisch voor je hebben gevonden als je compileert met de opties "gcc -Wall -ansi -pedantic file.c -o file"

Verder zijn er ook enkele problemen die de compiler niet vindt, namelijk:

- !argc == 2 is een foutief statement want !argc zal een boolean waarde teruggeven, welke je vervolgens probeert te vergelijken met een integer.. wat jij wil doen is: argc != 2

Met die verandering zou je programma moeten compileren en runnen. Succes.
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline Joshua822

  • Documentatieteam
  • Steunpunt: Nee
Re: [Cat vervanger in C]Rare fout in While loop
« Reactie #2 Gepost op: 2009/07/20, 21:37:13 »
Bedankt voor de hulp.

Ik heb net de code afgerond, het geheel is nu net, en het werkt perfect.

#include <stdio.h>

 int main ( int argc, char *argv[] )
 {

  if ( argc != 2 )
  {

    printf("%s","U specificeerde geen bestand.");
    return 1;

  }

  FILE *fptr = fopen ( argv[1],"r" );

  if ( fptr == 0 )
  {

    printf("%s","Het bestand bestaat niet.");
    return 1;

  }

  int x;

  do {

   x = fgetc( fptr );

   if ( x != EOF )
   {
     printf("%c",x);

   }

  } while ( x != EOF );

  return 0;

 }

Deze code is vrije software, dus voel vrij om het te gebruiken en te verspreiden.


Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Re: [Cat vervanger in C]Rare fout in While loop
« Reactie #3 Gepost op: 2009/07/21, 00:03:53 »
Even een kleine opmerking: die if-test binnen de do-while-lus is overbodig als je een while-lus gebruikt:

int x;
while ((x = fgetc(fptr)) != EOF)
    printf("%c", x);

Toegegeven, de expressievoorwaarde in de while-lus is iets ingewikkelder op deze manier, maar je vermijd zo wel een stuk overbodige code.
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)