C Programm auf Fehler untersuchen



  • Hi,
    ich bin ein totaler C Neuling und habe folgende Aufgabe:

    das folgende kleine Programmstück auf syntaktische und semantische Fehler zu untersuchen:

    #include "stdio.h"
    #define CURRENT_YEAR 2015;
    #define MAX_YEAR 2500;
    
    int main(int argc, char **argv) {
      for(int year=0; year < MAX_YAER; year++) {
        if( year = CURRENT_YEAR );
          printIt(year);
        else
          printf("passed the year %d...", year)
    }
    
    Int printIt(int year) {
      printf("The currrent year is: %d", year);
    }
    

    Meine Ideen:

    Zeile 6: man muss die Variable year zuerst lokal deklarieren, YAER falschgeschrieben
    Zeile 7: Vergleich muss mit dem == Operator geschehen.
    Zeile 10: Semikolon vergessen.

    und die Funktion printIt muss noch deklariert werden

    mfg



  • in Zeile 1: #include <stdio.h>



  • hamsterbacke1234 schrieb:

    in Zeile 1: #include <stdio.h>

    Bei "" wird auch im Include-Pafd gesucht, wenn im aktuellen Verzeichnis keine Datei gefunden wird.

    hamsterbacke1234 schrieb:

    Zeile 6: man muss die Variable year zuerst lokal deklarieren,

    Nein.
    Das ist seit mittlerweile 17 Jahren erlaubt.

    Schau dir die Funktion printIt nochmal an.
    Schon an der Farbgebung hier im Forum kannst du einen Fehler sehen.

    Ansonsten schick den Code durch einen Compiler. Der sagt dir genau, was er nicht mag.
    Es gibt auch Online-Compiler. Achte dann aber darauf, dass du als Sparche C (nicht C++ oder C#) auswählst.



  • was mir noch aufgefallen ist die Konstanten darf man nicht mit Semikolon abschließen.

    ansonsten kriege ich es jetzt zum kompilieren

    #include "stdio.h"
    #define CURRENT_YEAR 2015
    #define MAX_YEAR 2500
    
    int printIt(year);
    
    int main(int argc, char **argv) {
    
     int year;
      for(int year=0; year < MAX_YAER; year++) {
        if( year = CURRENT_YEAR ){
          printIt(year);}
        else{
          printf("passed the year %d...", year);}
    }
    }
    
    int printIt(int year) {
      printf("The currrent year is: %d", year);
    }
    


  • noch ein zweites Programm das ich untersuchen soll:

    int main(int argc, char **argv) {
      int value;
      do{
        value++;
        printf("current value: %d", value);
      }while(!(value==10) || !(value==20))
      //now our value equals 10
      return 0;
    }
    

    ich bin mir bei diesem Programmstück bzgl. der Funktion nicht sicher was es überhaupt tun müsste. Soll es von 1 bis 10 zählen?

    mfg



  • hamsterbacke1234 schrieb:

    Soll es von 1 bis 10 zählen?

    Wie kommst du darauf, dass es bei 1 anfängt?

    Edit: Und bei 10 aufhört?



  • Es soll wahrscheinlich random Dinge tun, schließlich wurde value keinen Anfangswert zugewiesen.
    Würde man value zu Beginn auf 0 setzen, würde es von 0 bis 9 zählen, wobei die Schleifenbedingung recht merkwürdig ist.



  • das war nur eine Vermutung...

    wenn ich value nicht initalisiere kommt mir die Ausgabe komisch vor und Sie scheint auch nicht zu terminieren...

    #include <stdio.h>
    
    int main(int argc, char **argv) {
      int value;
      do {
        value++;
        printf("current value: %d", value);
       }while(!(value==10) && !(value==20));
      //now our value equals 10
      return 0;
    }
    


  • Genau wegen den bereits genannten Fakten.



  • also meint ihr, dass das Programm so wie jetzt hingeschrieben gedacht ist?



  • Wird value einen Wert zu gewiesen?



  • in der Aufgabe wird value kein Wert zugewiesen.. ich weiß aber nicht ob das ein Fehler oder gewollt ist.



  • Denk mal stark nach 😉



  • Wenn der Kommentar in Zeile 9 stimmen soll, dann muß value vor der Schleife einen Wert größer INT_MIN und kleiner 9 haben.

    Der Überlauf von INT_MAX nach INT_MIN ist nicht vom Standard garantiert.



  • also zum Beispiel 0? ich finde es irgentwie logisch eine int variable mit 0 zu intialieren, weil das ja ein "standartwert" ist.



  • Es sollte ein, für das Problem, sinnvoller Wert sein.


Anmelden zum Antworten