Undeclared Variablen obwohl deklariert?



  • Liebe Community
    ich bin grade dabei ein C Programm zu schreiben das bei einer HTML Seite die Hintergrund farbe verändern soll allerdings kriege ich immer wieder Compiler errors von wegen das ich die variablen nicht definniert hab.
    Vllt könntet ihr euhc ja mal den Code angucken.
    Main.c:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      char buffer[5];
      int i = 0;
      fpos_t pos;
      global char Day[10] = getweekday()
      if ( argc == 1)
    
         {
         int dateiname = argv[argc];
             if( dateiname =! 0 )
                 {
                 FILE *pf;
                 pf = fopen( dateiname, "r+");
                    if( !pf )
                        {
                        printf( "Fehler beim Öffnen der Datei\n");
                        exit(0);
                        }
                 while(1)
                         {
                         fgetpos( pf, &pos);
                         buffer[i] = fgetc( pf);
                         i++;
                         while( feof(pf))
                                break;
                         while ( i == 5)
                               {
                                   if( buffer[i] == "{" && buffer[i-1] == "" && buffer[i-2] == "y" && buffer[i-3] ==  "d" && buffer[i-4] == "o" && buffer[i-5] == "b")
                                       {
                                       fsetpos( pf, &pos);
                                       while(1)
                                               {
                                               if ( Day[0] == "M" && Day[1] == "o")
                                                  fputs("body { background-color:##DC143C;", pf);
                                               if ( Day[0] == "T" && Day[1] == "u")
                                                  fputs("body { background-color:##DC143C;", pf);
                                               if ( Day[0] == "W" && Day[1] == "e")
                                                  fputs("body { background-color:##DC143C;", pf);
                                               if ( Day[0] == "T" && Day[1] == "h")
                                                  fputs("body { background-color:##DC143C;", pf);
                                               if ( Day[0] == "F" && Day[1] == "r")
                                                  fputs("body { background-color:##DC143C;", pf);
                                               exit( 1);
                                               }
                                       break;
                                      }
                                   else
                                      {
                                      i = 0;
                                      continue;
                                      }                         
                           } 
      system("PAUSE");
    }
    

    und die gettime.c

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int getweekday ()
    {
        time_t rawtime;
        struct tm * timeinfo;
        char Day [10];
    
        time ( &rawtime );
        timeinfo = localtime ( &rawtime );
    
        strftime (Day,9,"%A",timeinfo);
    
        return Day;
    }
    

    um das ganze zu verstehen wäre auhc evtl noch die hmtl datei wertvoll:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
      <meta http-equiv="Content-Type" content="text/html;charset=windows-1252">
    
      <title>Vertretungsplan</title>
    
    <style type="text/css">
    <!--
    /*
    
          Im folgenden Block befinden sich die Format-Angaben zu der Plan-Ausgabe
    
          Eine Beschreibung der Optionen finden Sie unter
          http://de.selfhtml.org/css/eigenschaften/index.htm
    */
    body { background-color:#FFFFCC;
    }
    
    /*
      Formatierung der Kopfzeile
    */
    /* Definitionen f�r alle Spalten */
    th {
      border:thin solid black;
      border-spacing:0px;
      font-weight:bold;
      font-size:100%;
      color:Black;
    /*  background-color:White; */
      text-align:left;
      padding:4px;
    }
    /* Abweichungen f�r einzelne Spalten */
    th.Klasse {}
    th.Stunde {}
    th.Fach {}
    th.Lehrer {}
    th.Vertretung {}
    th.Raum {}
    th.Anmerkung {}
    /*
      Formatierung der Daten-Eintragungen
    */
    /* Definitionen f�r alle Spalten */
    td {
      border:thin solid black;
      border-spacing:0px;
      font-weight:normal;
      font-size:100%;
      color:Black;
    /*  background-color:White; */
      height:20px;
      padding:4px;
    }
    /* Abweichungen f�r einzelne Spalten */
    td.Klasse {}
    td.Stunde {}
    td.Fach {}
    td.Lehrer {}
    td.Vertretung {}
    td.Raum {}
    td.Anmerkung {}
    /* Spalten der als "neu" markierten Eintragungen */
    td.KlasseNeu {color:Red;}
    td.StundeNeu {color:Red;}
    td.FachNeu {color:Red;}
    td.LehrerNeu {color:Red;}
    td.VertretungNeu {color:Red;}
    td.RaumNeu {color:Red;}
    td.AnmerkungNeu {color:Red;}
    /*
      Formatierung der Text-Abs�tze
    */
    p {
      font-weight:normal;
      font-size:100%;
      color:Black;
    /*  background-color:White; */
      margin-top: 0pt;
      margin-bottom: 0pt;
    }
    /* Formatierung der �berschriften */
    p.Titel {font-size:140%;font-weight:bold;}
    p.UnterTitel{}
    p.UnterTitel2{font-size:80%;}
    p.Stand{}
    /* Liste der Abwesenen Lehrer, Klassen R�ume */
    p.AbwesenheitenLabel{}
    p.Abwesenheiten{}
    /* Liste der Lehrer, die fr�her kommen m�ssen */
    p.LehrerFrueherLabel{}
    p.LehrerFrueher{}
    /* Liste der insgesamt verplanten Lehrer */
    p.LehrerVerplantLabel{}
    p.LehrerVerplant{}
    /* Verweis auf den n�chsten Teilplan */
    p.Weiter{}
    /*
      Allgemeine Format-Angaben
    */
    table {
      border:thin solid black;
      border-spacing:0px;
      empty-cells:show;
    }
    dl {
      margin-top:0px;
      margin-bottom:2px;
    }
    /*
    
          Ende der Formatierungs-Angaben
    
    */
    -->
    </style>  
    
    </head>
    
    <body>
    
    <!-- Die folgende Zeie wird durch den Vertretungsplan ersetzt. -->
    
    <p class="Titel">Vertretungsplan f�r Montag, 21. Februar 2011</p>
    <p class="UnterTitel2">Turbo-Vertretung 2011</p>
    <p class="UnterTitel2">Fritz-Reuter-Gymnasium, D-29451 Dannenberg</p>
    <p class="Stand"> Stand: 20.02.2011, 07:53:02</p>
    <p class="AbwesenheitenLabel">Abwesenheiten:<dl>
    <dd><p class="Abwesenheiten">Da 1. bis 12.</p></dd>
    <dd><p class="Abwesenheiten">Dk 4. bis 12.</p></dd>
    <dd><p class="Abwesenheiten">Nl 1. bis 12.</p></dd>
    
    <dd><p class="Abwesenheiten">Sc 7. bis 12.</p></dd>
    </dl>
    <table><tr>
    <th class="Klasse">Kl.</th>
    <th class="Stunde">Std.</th>
    <th class="Vertretung">Leh.</th>
    <th class="Fach">Fach</th>
    <th class="Raum">Raum</th>
    <th class="Lehrer">-</th>
    <th class="Anmerkung">Anmerkung</th>
    
    </tr>
    <tr>
    <td class="Klasse">5b<br></td>
    <td class="Stunde">5<br></td>
    <td class="Vertretung">Ad<br></td>
    <td class="Fach">Vf<br></td>
    <td class="Raum">R128<br></td>
    <td class="Lehrer">Dk<br></td>
    <td class="Anmerkung"><br></td>
    </tr>
    <tr>
    
    <td class="KlasseNeu">5c<br></td>
    <td class="StundeNeu">6<br></td>
    <td class="VertretungNeu"><br></td>
    <td class="FachNeu">EN<br></td>
    <td class="RaumNeu"><br></td>
    <td class="LehrerNeu">Hr<br></td>
    <td class="AnmerkungNeu">f�llt aus, vorgezogen auf Do, den 17.02.2011, 3.<br></td>
    </tr>
    <tr>
    <td class="Klasse">6c<br></td>
    <td class="Stunde">3<br></td>
    
    <td class="Vertretung">Ro<br></td>
    <td class="Fach">DE statt MA<br></td>
    <td class="Raum">R123<br></td>
    <td class="Lehrer">Da<br></td>
    <td class="Anmerkung">statt 4. Std.<br></td>
    </tr>
    <tr>
    <td class="Klasse">6c<br></td>
    <td class="Stunde">4<br></td>
    <td class="Vertretung">Gr<br></td>
    
    <td class="Fach">PH statt DE<br></td>
    <td class="Raum">R-Ph2<br></td>
    <td class="Lehrer">Ro<br></td>
    <td class="Anmerkung"> <br></td>
    </tr>
    <tr>
    <td class="Klasse">9a 9b<br></td>
    <td class="Stunde">3<br></td>
    <td class="Vertretung">Ol<br></td>
    <td class="Fach">LA<br></td>
    
    <td class="Raum">R27<br></td>
    <td class="Lehrer">Nl<br></td>
    <td class="Anmerkung">Aufgabe Nl<br></td>
    </tr>
    <tr>
    <td class="Klasse">9a 9b<br></td>
    <td class="Stunde">4<br></td>
    <td class="Vertretung">Or<br></td>
    <td class="Fach">LA<br></td>
    <td class="Raum">R27<br></td>
    
    <td class="Lehrer">Nl<br></td>
    <td class="Anmerkung">Aufgabe Nl<br></td>
    </tr>
    <tr>
    <td class="KlasseNeu">9b<br></td>
    <td class="StundeNeu">6<br></td>
    <td class="VertretungNeu"><br></td>
    <td class="FachNeu">EN<br></td>
    <td class="RaumNeu"><br></td>
    <td class="LehrerNeu">Kf<br></td>
    <td class="AnmerkungNeu">frei verlegt auf Freitag, 25.02., 6.Std.<br></td>
    
    </tr>
    <tr>
    <td class="Klasse">9b<br></td>
    <td class="Stunde">7<br></td>
    <td class="Vertretung"><br></td>
    <td class="Fach">GE<br></td>
    <td class="Raum"><br></td>
    <td class="Lehrer">Sc<br></td>
    <td class="Anmerkung">frei<br></td>
    </tr>
    <tr>
    <td class="Klasse">9b<br></td>
    
    <td class="Stunde">8<br></td>
    <td class="Vertretung"><br></td>
    <td class="Fach">GE<br></td>
    <td class="Raum"><br></td>
    <td class="Lehrer">Sc<br></td>
    <td class="Anmerkung">frei<br></td>
    </tr>
    <tr>
    <td class="Klasse">10b<br></td>
    <td class="Stunde">1<br></td>
    <td class="Vertretung">Wt<br></td>
    
    <td class="Fach">GE statt MA<br></td>
    <td class="Raum">R30<br></td>
    <td class="Lehrer">Da<br></td>
    <td class="Anmerkung">statt 3. Std.<br></td>
    </tr>
    <tr>
    <td class="Klasse">10b<br></td>
    <td class="Stunde">2<br></td>
    <td class="Vertretung">Wt<br></td>
    <td class="Fach">GE statt MA<br></td>
    
    <td class="Raum">R30<br></td>
    <td class="Lehrer">Da<br></td>
    <td class="Anmerkung">statt 4. Std.<br></td>
    </tr>
    <tr>
    <td class="Klasse">10b<br></td>
    <td class="Stunde">3<br></td>
    <td class="Vertretung">Bl<br></td>
    <td class="Fach">EN statt GE<br></td>
    <td class="Raum">R34<br></td>
    
    <td class="Lehrer">Wt<br></td>
    <td class="Anmerkung"><br></td>
    </tr>
    <tr>
    <td class="Klasse">10b<br></td>
    <td class="Stunde">4<br></td>
    <td class="Vertretung">Ro<br></td>
    <td class="Fach">DE statt GE<br></td>
    <td class="Raum">R34<br></td>
    <td class="Lehrer">Wt<br></td>
    
    <td class="Anmerkung">statt 5. Std.<br></td>
    </tr>
    <tr>
    <td class="Klasse">10b<br></td>
    <td class="Stunde">5<br></td>
    <td class="Vertretung"><br></td>
    <td class="Fach">DE<br></td>
    <td class="Raum"><br></td>
    <td class="Lehrer">Ro<br></td>
    <td class="Anmerkung">frei verlegt auf 4. Std.<br></td>
    </tr>
    
    <tr>
    <td class="Klasse">11<br></td>
    <td class="Stunde">5<br></td>
    <td class="Vertretung"><br></td>
    <td class="Fach">la5<br></td>
    <td class="Raum"><br></td>
    <td class="Lehrer">Nl<br></td>
    <td class="Anmerkung">Oberstufenarbeit<br></td>
    </tr>
    </table>
    <p class="Titel">Vertretungsplan f�r Montag, 21. Februar 2011</p>
    
    <p class="UnterTitel2">Turbo-Vertretung 2011</p>
    <p class="UnterTitel2">Fritz-Reuter-Gymnasium, D-29451 Dannenberg</p>
    <p class="Stand"> Stand: 20.02.2011, 07:53:02</p>
    <table><tr>
    <th class="Klasse">Kl.</th>
    <th class="Stunde">Std.</th>
    <th class="Vertretung">Leh.</th>
    <th class="Fach">Fach</th>
    <th class="Raum">Raum</th>
    
    <th class="Lehrer">-</th>
    <th class="Anmerkung">Anmerkung</th>
    </tr>
    <tr>
    <td class="KlasseNeu">11<br></td>
    <td class="StundeNeu">5<br></td>
    <td class="VertretungNeu">Sb<br></td>
    <td class="FachNeu">ek5<br></td>
    <td class="RaumNeu">R24<br></td>
    <td class="LehrerNeu">Da<br></td>
    
    <td class="AnmerkungNeu"><br></td>
    </tr>
    <tr>
    <td class="Klasse">11<br></td>
    <td class="Stunde">6<br></td>
    <td class="Vertretung"><br></td>
    <td class="Fach">la5<br></td>
    <td class="Raum"><br></td>
    <td class="Lehrer">Nl<br></td>
    <td class="Anmerkung">Oberstufenarbeit<br></td>
    </tr>
    <tr>
    
    <td class="KlasseNeu">11<br></td>
    <td class="StundeNeu">6<br></td>
    <td class="VertretungNeu">Sb<br></td>
    <td class="FachNeu">ek5<br></td>
    <td class="RaumNeu">R24<br></td>
    <td class="LehrerNeu">Da<br></td>
    <td class="AnmerkungNeu"><br></td>
    </tr>
    </table>
    <p>Klausuren PW2 und ph6 in den Kursstunden!</p>
    
      <!-- Manuelles Umbl�ttern zur n�chsten Seite
    	Die Zeichenfolge "ausgabe.html" wird gegen den Dateinamen der Folgeseite ausgetauscht
      -->
      <p class="Weiter"><a href="ausgabe.html">Weiter</a></p>
      <!-- Ende -->
      <hr>
      <p><small>
    
        Erstellt mit: Turbo-Vertretung 2011, Copyright &copy; 1988-2010,
        <a href="http://www.haneke.de">Haneke Software, Siegburg</a>
    
      </small></p>
    
    </body>
    <head>
      <!-- Automatisches Umbl�ttern zur n�chsten Seite
      	Unter "content" wird mit der Zahlenangabe am Anfang angegeben, wie viele Sekunden eine Seite angezeigt werden soll
    	Die Zeichenfolge "ausgabe.html" wird gegen den Dateinamen der Folgeseite ausgetauscht
      -->
      <meta http-equiv="refresh" content="15;ausgabe.html">
      <!-- Ende -->
    </head>
    </html>
    

    Es soll mit der Main c die Farbe halt Abhängig vom Tag der mit der gettime c geholt wird die farbe in die html datei geschreiben.

    ich wäre über hilfe sehr froh 🙂

    MfG hellomelon



  • Den Riesen-Code will ja keiner ohne weitere Details durchforsten. Also bitte konkret: welche Variable(n) ist laut Compiler nicht definiert? Poste am besten den komplette Fehlertext.



  • JA tut mir leid 😞
    also hier noch mal der FehlerLog vom Kompiler

    Compiler: Default compiler
    Building Makefile: "C:\Dev-Cpp\Makefile.win"
    Führt make... aus
    make.exe -f "C:\Dev-Cpp\Makefile.win" all
    gcc.exe -c main.c -o main.o -I"C:/Dev-Cpp/include"

    main.c: In function main': main.c:20: warning: passing arg 1 offopen' makes pointer from integer without a cast

    main.c:35: warning: comparison between pointer and integer
    main.c:35: warning: comparison between pointer and integer
    main.c:35: warning: comparison between pointer and integer
    main.c:35: warning: comparison between pointer and integer

    main.c:35: warning: comparison between pointer and integer
    main.c:35: warning: comparison between pointer and integer
    main.c:40: error: `Day' undeclared (first use in this function)
    main.c:40: error: (Each undeclared identifier is reported only once
    main.c:40: error: for each function it appears in.)
    main.c:61: error: syntax error at end of input

    make.exe: *** [main.o] Error 1

    Ausführung beendet

    mittlerweile sieht die main.c allerdings so aus:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      int buffer[5];
      int i = 0;
      fpos_t pos;
      int DayNumber;
      getweekday( &DayNumber);
      char dateiname;
      char *datei = &dateiname;  
        if ( argc == 1)
    
         {
         dateiname = *argv[argc];
             if( dateiname =! 0 )
                 {
                 FILE *pf;
                 pf = fopen( *datei, "r+");
                    if( !pf )
                        {
                        printf( "Fehler beim Öffnen der Datei\n");
                        exit(0);
                        }
                 while(1)
                         {
                         fgetpos( pf, &pos);
                         buffer[i] = fgetc( pf);
                         i++;
                         while( feof(pf))
                                break;
                         while ( i == 5)
                               {
                                   if( buffer[i] == "{" && buffer[i-1] == "" && buffer[i-2] == "y" && buffer[i-3] ==  "d" && buffer[i-4] == "o" && buffer[i-5] == "b")
                                       {
                                       fsetpos( pf, &pos);
                                       while(1)
                                               {
                                               if ( Day[0] == "M" && Day[1] == "o")
                                                  fputs("body { background-color:##DC143C;", pf);
                                               if ( Day[0] == "T" && Day[1] == "u")
                                                  fputs("body { background-color:##DC143C;", pf);
                                               if ( Day[0] == "W" && Day[1] == "e")
                                                  fputs("body { background-color:##DC143C;", pf);
                                               if ( Day[0] == "T" && Day[1] == "h")
                                                  fputs("body { background-color:##DC143C;", pf);
                                               if ( Day[0] == "F" && Day[1] == "r")
                                                  fputs("body { background-color:##DC143C;", pf);
                                               exit( 1);
                                               }
                                       break;
                                      }
                                   else
                                      {
                                      i = 0;
                                      continue;
                                      }                         
                           } 
      system("PAUSE");
    

    ich kann leiern icht nur auschnitte posten da sich der fehler anscheinend durch so gut wie die ganze datei zieht.



  • mein größtes problem ist das ich ja einen Variablen datei namen mit fopen öfnnen möchte und das das ja anscheinend nicht klappt.
    ich habs schon versucht mitm pointer zu lösen aber irgendwie funktioniert das nicht.
    Man muss dazu sagen das ich noch nicht so erfahren bin.
    MfG hellomelon



  • Der Fehler mit der nicht deklarierten Variable ist leicht zu erklären: du hast die Variable nicht deklariert! Du benutzt eine Variable 'Day', die es in deinem Code aber gar nicht gibt. Ein "char Day[1024]" am Anfang des Programms könnte zumindest bei der Fehlermeldung Abhilfe schaffen. Damit wird dein Programm aber noch nicht machen, was du willst.

    Und dann schlummern noch einige weitere Fehler in deinem Progrämmchen. Da fehlt's ziemlich an Grundlagen, ehrlich gesagt. Zunächst solltest du dir in dem Buch/Tutorial deiner Wahl mal bitte durchlesen, was der Unterschied zwischen einem Zeichen (char) und einer Zeichenkette (char*) ist. Das scheint noch nicht ganz klar zu sein.

    Und im Anschluss ließ bitte noch mal das Kapitel zum Thema Pointer durch. Du veranstaltest da wilde Zuweisungen von Zeigern und Adressen, die sich meiner Logik entziehen. 😉

    Bis dir hier einer diese sämtlichen Grundlagen so erklärt hat, dass du sie auch verstanden hast, hast du dreimal ein gutes Buch zu dem Thema gelesen.



  • So jetzt hab ich das ganze mal kritisch überarbeitet und kriege lediglich warnings.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      int buffer[5];
      int i = 0;
      fpos_t pos;
      int DayNumber;
      getweekday( &DayNumber);
        if ( argc == 1)
         {
         char const *dateiname = argv[1];
         FILE *pf;
         pf = fopen( dateiname, "r+");
              if( !pf )
                        {
                        printf( "Fehler beim Öffnen der Datei\n");
                        exit(0);
                        }
                 while(1)
                         {
                         fgetpos( pf, &pos);
                         buffer[i] = fgetc( pf);
                         i++;
                         while( feof(pf))
                                break;
                         while ( i == 5)
                               {
                                   if( buffer[i] == "{" && buffer[i-1] == "" && buffer[i-2] == "y" && buffer[i-3] ==  "d" && buffer[i-4] == "o" && buffer[i-5] == "b")
                                       {
                                       fsetpos( pf, &pos);
                                       while(1)
                                               {
                                                switch( DayNumber)
                                                        {
                                                        case 1:
                                                               fputs("body { background-color:##DC143C;", pf);
                                                        case 2:
                                                               fputs("body { background-color:##4169e1;", pf);
                                                        case 3:
                                                               fputs("body { background-color:##00ff7F;", pf);
                                                        case 4:
                                                               fputs("body { background-color:##F0e68c;", pf);
                                                        case 5:
                                                               fputs("body { background-color:##a9a9a9;", pf);
                                                        }
                                               }
                                       break;
                                      }
                                   else
                                      {
                                      i = 0;
                                      continue;
                                      }                         
                           }
                           } 
             }
    	}
    

    aber so wirklich tun was ich möchte tuts immernoch nicht.

    achja hier zusaätzlihc noch die gettime.c

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    void getweekday (int *DayNumber)
    {
        time_t rawtime;
        struct tm * timeinfo;
        char Day [10];
    
        time ( &rawtime );
        timeinfo = localtime ( &rawtime );
    
        strftime (Day,9,"%A",timeinfo);
        if ( Day[0] == "M" && Day[1] == "o")
           *DayNumber = 1;
        if ( Day[0] == "T" && Day[1] == "u")
           *DayNumber = 2;
        if ( Day[0] == "W" && Day[1] == "e")
           *DayNumber = 3;
        if ( Day[0] == "T" && Day[1] == "h")
           *DayNumber = 4;
        if ( Day[0] == "F" && Day[1] == "r")
           *DayNumber = 5;
    }
    

    und wenn du mir jetzt sagen könntest wo genau ich lieber nochmal nachlernen sollte dann wär ich dir ziemlich dankbar 🙂
    ich hab nämlihc mich schon damit beschäftigt. ist nur ein bisschen her seit dem letzten mal programmieren.

    MfG hellomelon



  • hellomelon schrieb:

    So jetzt hab ich das ganze mal kritisch überarbeitet und kriege lediglich warnings.

    Super Idee. Wenn auch immer noch überwiegend falsch.
    Der Compiler hat immer Recht, auch wenn es nur Warnungen sind.
    Du weisst nicht, wie man chars vergleicht.
    Du weisst nicht, wie man Strings vergleicht.
    Für dich ist int gleich char.
    Du hast argc nicht verstanden.
    ...
    Du hast doch schon mal ganz gut mit einer Funktion angefangen. Das hast du offensichtlich verstanden. Dann nutze weitere Funktionen zur Kapselung deines Anwendungsfalls, innerhalb einer vernünftig und sinnvoll gestalteten Dateileseschleife.



  • Funktionen haben den Vorteil, dass sie einen Rückgabewert haben können. Dann kannst du schon mal auf die Zeiger verzichten.

    Zudem ist in der struct tm ein Eintrag Namens tm_wday. Der enthält die Nummer des Wochentags So = 0 ... Sa = 6.
    http://www.cplusplus.com/reference/clibrary/ctime/tm/

    #include <time.h>
    
    int getweekday ()
    {
        time_t rawtime;
        struct tm * timeinfo;
        char Day [10];
    
        time ( &rawtime );
        timeinfo = localtime ( &rawtime );
    
        return timeinfo->tm_wday
    }
    

    Aufruf dann mit

    DayNumber = getweekday();
    


  • Tut mir leid aberi ch hattein letzter Zeit viel um die Ohren. Hab mich allerdings nochmal mit dem ganzem C Buch auseinander gesetzt und hoffe das es jetzt wenigstens so einergermaßen stimmt.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      char buffer[4];
      int i = 0;
      fpos_t pos;
      int DayNumber= getweekday();
      char match[]={"body"};
      ;
        if ( argc == 1)
         {
         char const *dateiname = argv[1];
         FILE *pf;
         pf = fopen( dateiname, "r+");
              if( !pf )
                        {
                        printf( "Fehler beim Öffnen der Datei\n");
                        exit(0);
                        }
                 while(1)
                         {
                         fgetpos( pf, &pos);
                         buffer[i] = fgetc( pf);
                         i++;
                         while( feof(pf))
                                printf("Keine gültige Datei erkannt");
                                exit( 0);
                         while ( i == 4)
                               {
                                   if( match[0]==buffer[0] )
                                       if( match[1]==buffer[1] )
                                           if( match[2]==buffer[2] )
                                               if( match[3]==buffer[3])
                                                   {     
                                                   fsetpos( pf, &pos);
                                                   while(1)
                                                   {
                                                   switch( DayNumber)
                                                           {
                                                           case 1:
                                                               fputs("body { background-color:##DC143C;", pf);
                                                               exit( 1);
                                                           case 2:
                                                                fputs("body { background-color:##4169e1;", pf);
                                                                exit( 1);
                                                           case 3:
                                                               fputs("body { background-color:##00ff7F;", pf);
                                                               exit( 1);
                                                           case 4:
                                                               fputs("body { background-color:##F0e68c;", pf);
                                                               exit( 1);
                                                           case 5:
                                                               fputs("body { background-color:##a9a9a9;", pf);
                                                               exit( 1);
                                                           default:
                                                               printf("Kein gültiger Wochentag erkannt");
                                                               exit(0);
                                                        }
                                               }
                                      }
                                   else
                                      {
                                      i = 0;
                                      continue;
                                      }                         
                           }
                           } 
             }
    	}
    
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int getweekday ()
    {
        time_t rawtime;
        struct tm * timeinfo;
        char Day [10];
    
        time ( &rawtime );
        timeinfo = localtime ( &rawtime );
    
        return timeinfo->tm_wday;	
    }
    

    wäre wieder einmal sehr froh über eure hilfe 🙂
    MfG hellomelon



  • int main(int argc, char *argv[])
    {
      char z[1000];
      fpos_t pos;
    
      if( argc > 1 )
      {
        FILE *f = fopen( argv[1], "r+");
        if( !f )
        {
          perror(argv[1]);
          exit(1);
        }
        while( fgetpos( f, &pos), fgets(z,1000,f) )
          if( strstr(z,"body { background-color:")==z )
            switch( fsetpos( f, &pos), getweekday() ) {
              case 1:
                      fputs("body { background-color:#DC143C;", f);
                      fclose(f);exit( 1);
              case 2:
                      fputs("body { background-color:#4169e1;", f);
                      fclose(f);exit( 1);
              case 3:
                      fputs("body { background-color:#00ff7F;", f);
                      fclose(f);exit( 1);
              case 4:
                      fputs("body { background-color:#F0e68c;", f);
                      fclose(f);exit( 1);
              case 5:
                      fputs("body { background-color:#a9a9a9;", f);
                      fclose(f);exit( 1);
              default:
                      printf("Kein gültiger Wochentag erkannt");
                      fclose(f);exit( 0);
            }
    
      }
      return 0;
    }
    


  • Vielen Dank!
    das ist echt nett von dir 🙂
    Ich hab gemerkt das mir häufig so wichtige Befehle besonders im Umgang mit Strings und auch die bedeutungen von int char usw fehlen. Da werd ich mich wohl nochmal mit auseinander setzen.
    Also in dem sinne.
    Bis zum nächsten mal 😉
    MfG hellomelon



  • Also ich würde folgendes schreiben:

    if(FILE* f = fopen(...))
    {
         ...
    }
    

    Verstehe nicht, warum das niemand so macht.



  • Also eigentlich bin ich ja wirklich kein Unschuldslamm, wenn's um unsaubereren Stil geht, aber selbst ich deklariere alle lokalen Variablen am Beginn der Funktion und nicht irgendwann zwischendrin...
    Stichwort Wartung und so. Niemand hat Lust, Tausende Zeilen Quellcode nach Variablendeklarationen zu durchsuchen, wenn sich mal die Anforderungen ändern...



  • Diese Variante ist doch sauber. Sie ist so lokal wie möglich und kurz sowie verständlich, jeder weiß, was hier passiert. Variablen gehören dann definiert, wenn sie verwendet werden.



  • 314159265358979 schrieb:

    Diese Variante ist doch sauber. Sie ist so lokal wie möglich und kurz sowie verständlich, jeder weiß, was hier passiert.

    so unrecht hast du ja nicht, nur dass eben die Variable f dann halt nur innerhalb
    der geschweiften Klammern des ifs gültig ist... nach dem if existiert diese
    variable sozusagen nicht mehr, das gleiche wie bei:

    for(int i=0; i<MAX_VALUE_PER_LINE; i++){
    // befehlsblock
    }
    


  • Das ist ja auch das Ziel.



  • ChrisIT schrieb:

    Also eigentlich bin ich ja wirklich kein Unschuldslamm, wenn's um unsaubereren Stil geht, aber selbst ich deklariere alle lokalen Variablen am Beginn der Funktion und nicht irgendwann zwischendrin...
    Stichwort Wartung und so. Niemand hat Lust, Tausende Zeilen Quellcode nach Variablendeklarationen zu durchsuchen, wenn sich mal die Anforderungen ändern...

    Wieso tausende Zeilen? Schreibst du etwa Funktionen, die tausende Zeilen enthalten? Wenn du sinnvoll programmierst, sind deine Funktionen nur ein paar Zeilen groß, und dann entfällt das erwähnte Suchen, weil eine Funktion meist auf eine Seite passt. Und dann zieht dein Argument halt nicht mehr.

    Btw, es wird sicher einen Grund gehabt haben, warum ANSI-C in der Hinsicht geändert (bzw. imho verbessert) wurde, so dass - anders als noch bei C89 - Variablendeklarationen überall im Code und nicht nur am Scope-Anfang erlaubt sind.



  • itedvo schrieb:

    314159265358979 schrieb:

    Diese Variante ist doch sauber. Sie ist so lokal wie möglich und kurz sowie verständlich, jeder weiß, was hier passiert.

    so unrecht hast du ja nicht, nur dass eben die Variable f dann halt nur innerhalb
    der geschweiften Klammern des ifs gültig ist... nach dem if existiert diese
    variable sozusagen nicht mehr

    Ja, und? Was machst du denn bitteschön noch mit der Variable f, wenn sie 0 ist?



  • naja, wenn sie NULL ist, so soll sie zum beispiel erstellt werden...

    zum beispiel so:

    int main(void){
    
      FILE* dat;
      char file_dat[MAX_CHAR];
    
      if(dat=fopen("text.txt","r"))
         fscanf(dat,"%s", file_dat); 
      else
         dat=fopen("text.txt", "w");
    
      fclose(dat);
    
      return 0;
    }
    


  • _matze schrieb:

    itedvo schrieb:

    314159265358979 schrieb:

    Diese Variante ist doch sauber. Sie ist so lokal wie möglich und kurz sowie verständlich, jeder weiß, was hier passiert.

    so unrecht hast du ja nicht, nur dass eben die Variable f dann halt nur innerhalb
    der geschweiften Klammern des ifs gültig ist... nach dem if existiert diese
    variable sozusagen nicht mehr

    Ja, und? Was machst du denn bitteschön noch mit der Variable f, wenn sie 0 ist?

    Nichts.


Log in to reply