[C] Fehlermeldung bei For-Schleife

Diskutiere [C] Fehlermeldung bei For-Schleife im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Hi, habe eine komische Fehlermeldung "for loop initial declaration used outside C99 mode" Zur Veranschaulichung, hier mal mein Code:...

  1. #1 Cordell, 01.11.2006
    Cordell

    Cordell Mitglied

    Dabei seit:
    14.02.2006
    Beiträge:
    43
    Zustimmungen:
    0
    Ort:
    Fulda
    Hi,

    habe eine komische Fehlermeldung "for loop initial declaration used outside C99 mode"

    Zur Veranschaulichung, hier mal mein Code:

    Code:
    #include <stdio.h> 
    #define PI 3.14159
     
     
    float krsfl(float radius);
    float kugfl(float radius);
    float rechfl(float seitea, float seiteb);
     
    main() 
    {
           int anz, fakt;
           char auswahl;                    
           float radius, seitea, seiteb;                   
               
           printf("\n F L A E C H E N B E R E C H N E R (Kreis und Kugel) \n");
           printf("\n uebersetzt am %s \t um %s Uhr",__DATE__, __TIME__);  
           printf("\n\n (1)Kreis ");
           printf("\n (2)Kugel ");
           printf("\n (3)Dreieck ");
           printf("\n (4)Quader ");
           printf("\n (5)Zylinder ");
           printf("\n (6)Kegel ");
           printf("\n\n Bitte wählen Sie einen Körper: "); 
           auswahl = getchar(); 
           
           switch(auswahl)
           {
                 case 1:
                      printf("\n Bitte geben Sie den Radius ein: ");
                      scanf("%f",&radius);
                      printf("\t Anzahl Berechnungen: "); 
                      scanf("%i",&anz);
                      printf("\t Faktor von Rechnung zu Rechnung: "); 
                      scanf("%i",&fakt); 
                      for(int i = 1; i <= anz; i++){
                         printf("\n Kreisfläche = %f",krsfl(radius));
                         radius = radius * fakt;
                      }
                      break;
                 
                 case 2:
                      printf("\n Bitte geben Sie den Radius ein: ");
                      scanf("%f",&radius);
                      printf("\t Anzahl Berechnungen: "); 
                      scanf("%i",&anz);
                      printf("\t Faktor von Rechnung zu Rechnung: "); 
                      scanf("%i",&fakt); 
                      for(int j = 1; j <= anz; j++){
                         printf("\n Kreisfläche = %f",kugfl(radius));
                         radius = radius * fakt;
                      }
                      break;
                 
                 case 3:
                      printf("\n Bitte Seite A eingeben: ");
                      scanf("%f", &seitea);
                      printf("\n Bitte Seite B eingeben: ");
                      scanf("%f", &seiteb);
                      printf("\t Anzahl Berechnungen: "); 
                      scanf("%i",&anz);
                      printf("\t Faktor von Rechnung zu Rechnung: "); 
                      scanf("%i",&fakt); 
                      for(int k = 1; k <= anz; k++){
                         printf("\n Rechteckfläche = %f",rechfl(seitea,seiteb));
                         seitea = seitea * fakt;
                         seiteb = seiteb * fakt;
                      }
                      break; 
                      
                 default:
                         printf("\n Ungueltige Option!");
           }
           
    }
    
    
    float krsfl(float radius){
          return radius*radius*PI;
    }
          
    float kugfl(float radius){
          return 4*krsfl(radius);
    }
    
    float rechfl(float seitea, float seiteb){
          return(seitea * seiteb);
    }
    
    Wäre super, wenn jemand mir nen Tip geben könnte!
    Danke im Voraus!

    Cordell
     
  2. #2 supersucker, 01.11.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Du musst das "i" ausserhalb des fors deklarieren oder den Compiler anweisen sowas zu ignorieren.
     
  3. cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn
    i,j,k müssen auserhalb definiert werden

    Kliener Tipp: in math.h ist eine konstante M_PI definiert

    EDIT: da war ich wohl zu langsam :)
     
  4. #4 Cordell, 01.11.2006
    Cordell

    Cordell Mitglied

    Dabei seit:
    14.02.2006
    Beiträge:
    43
    Zustimmungen:
    0
    Ort:
    Fulda
    Alles klar, hab die Zählvariablen außerhalb definiert und geht!
    Jedoch muss ich noch was falsch gemacht haben, denn, wenn ich nun einen Körper auswähle beendet das prog gleich wieder. :think:
     
  5. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    ltrace, strace und gdb sollten dir bei der Fehlersuche helfen. :)
     
  6. cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn
    auswahl ist vom typ char und du vergleichst mit 1,2,...:
    case 1:

    versuchs mal mit hochkomma:
    case '1':
     
  7. #7 Cordell, 01.11.2006
    Cordell

    Cordell Mitglied

    Dabei seit:
    14.02.2006
    Beiträge:
    43
    Zustimmungen:
    0
    Ort:
    Fulda
    Ja, mit Hochkomma gehts! Dankeschön

    Kann ich eigentlich die main() nach dem Ausführen eines Cases wieder aufrufen?

    Hier der aktualisierte Code:

    Code:
    #include <stdio.h> 
    #include <math.h>
    #define PI 3.14159
     
     
    float krsfl(float radius);
    float kugfl(float radius);
    float rechfl(float seitea, float seiteb);
    float dreieck(float seitea);
    float zylinder(float radius, float hoehe);
    float kegel(float radius, float hoehe);
     
    main() 
    {
           int anz, fakt;
           char auswahl;  
           char wahl;                  
           float radius, seitea, seiteb, hoehe;                   
               
           printf("\n F L A E C H E N B E R E C H N E R \n");
           printf("\n uebersetzt am %s \t um %s Uhr",__DATE__, __TIME__);  
           printf("\n\n (1)Kreis ");
           printf("\n (2)Kugel ");
           printf("\n (3)Dreieck ");
           printf("\n (4)Quader ");
           printf("\n (5)Zylinder ");
           printf("\n (6)Kegel ");
           printf("\n (0)Ende ");
           printf("\n\n Bitte wählen Sie einen Koerper: "); 
           auswahl = getchar(); 
           
           switch(auswahl)
           {
                 
                 case '0':
                      break;
                 
                 case '1':
                      printf("\n Bitte geben Sie den Radius ein: ");
                      scanf("%f",&radius);
                      printf("\t Anzahl Berechnungen: "); 
                      scanf("%i",&anz);
                      printf("\t Faktor von Rechnung zu Rechnung: "); 
                      scanf("%i",&fakt); 
                      int i;
                      for(i = 1; i <= anz; i++){
                         printf("\n Kreisfläche = %f",krsfl(radius));
                         radius = radius * fakt; 
                      }
                      printf("\n Zurück zum Menu? (y/n): ");
                      scanf("%c", &wahl);
                      if(wahl == 'y')
                              main();
                      else
                              break;
                 
                 case '2':
                      printf("\n Bitte geben Sie den Radius ein: ");
                      scanf("%f",&radius);
                      printf("\t Anzahl Berechnungen: "); 
                      scanf("%i",&anz);
                      printf("\t Faktor von Rechnung zu Rechnung: "); 
                      scanf("%i",&fakt); 
                      int j;
                      for(j = 1; j <= anz; j++){
                         printf("\n Kreisfläche = %f",kugfl(radius));
                         radius = radius * fakt;
                      }
                      break;
                 
                 case '3':
                      printf("\n Bitte Seite A eingeben: ");
                      scanf("%f", &seitea);
                      printf("\n Bitte Seite B eingeben: ");
                      scanf("%f", &seiteb);
                      printf("\t Anzahl Berechnungen: "); 
                      scanf("%i",&anz);
                      printf("\t Faktor von Rechnung zu Rechnung: "); 
                      scanf("%i",&fakt); 
                      int k;
                      for(k = 1; k <= anz; k++){
                         printf("\n Rechteckfläche = %f",rechfl(seitea,seiteb));
                         seitea = seitea * fakt;
                         seiteb = seiteb * fakt;
                      }
                      break; 
                  
                  case '5':
                       printf("\n Bitte geben Sie den Radius ein: ");
                       scanf("%f",&radius);
                       printf("\n Bitte geben Sie die Hoehe ein: ");
                       scanf("%f",&hoehe);
                       printf("\t Anzahl Berechnungen: "); 
                       scanf("%i",&anz);
                       printf("\t Faktor von Rechnung zu Rechnung: "); 
                       scanf("%i",&fakt); 
                       int l;
                       for(l = 1; l <= anz; l++){
                          printf("\n Zylinderoberflaeche = %f",zylinder(radius, hoehe));
                          radius = radius * fakt;
                          hoehe = hoehe * fakt;
                       }
                       break;
                  
                  case '6':
                       printf("\n Bitte geben Sie den Radius ein: ");
                       scanf("%f",&radius);
                       printf("\n Bitte geben Sie die Hoehe ein: ");
                       scanf("%f",&hoehe);
                       printf("\t Anzahl Berechnungen: "); 
                       scanf("%i",&anz);
                       printf("\t Faktor von Rechnung zu Rechnung: "); 
                       scanf("%i",&fakt); 
                       int m;
                       for(m = 1; m <= anz; m++){
                          printf("\n Kegeloberflaeche = %f",kegel(radius, hoehe));
                          radius = radius * fakt;
                          hoehe = hoehe * fakt;
                       }
                       break;
                     
                 default:
                         printf("\n Ungueltige Option!");
                         main();
                         break;
           }
           
    }
    
    
    float krsfl(float radius){
          return radius*radius*PI;
    }
          
    float kugfl(float radius){
          return 4*krsfl(radius);
    }
    
    float rechfl(float seitea, float seiteb){
          return(seitea * seiteb);
    }
    
    float dreieck(float seitea){
          return(((seitea * seitea)/4) * sqrt(3)); 
    }
    
    float zylinder(float radius, float hoehe){
          return((2 * PI * radius * hoehe) + 2*krsfl(radius));
    }
    
    float kegel(float radius, float hoehe){
          return(((PI/3) * (radius * radius) * hoehe) + krsfl(radius));      
    }
    
    
     
  8. #8 hoernchen, 02.11.2006
    hoernchen

    hoernchen UBERgarstiges nagetier

    Dabei seit:
    17.02.2005
    Beiträge:
    1.081
    Zustimmungen:
    0
    du koenntest das ganze in eine endlosschleife geben :

    for(;;)
    {
    BLA
    }
     
  9. cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn
    ist vielleicht nicht so sinnvoll - dann musst du das progi ja immer "abwürgen"

    gib das ganze in eine schleife

    Code:
    do
    {
    BLA
    }while (auswahl!=27)
    
    ich glaube 27 ist ESC ansonsten musst du halt in einer ASCII Tabelle nachschaun!
     
  10. #10 hoernchen, 02.11.2006
    hoernchen

    hoernchen UBERgarstiges nagetier

    Dabei seit:
    17.02.2005
    Beiträge:
    1.081
    Zustimmungen:
    0
    "return 0;" reicht, nix abwuergen.
     
  11. cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn
    ist aber kein schöner Programmierstil
     
  12. #12 hoernchen, 02.11.2006
    hoernchen

    hoernchen UBERgarstiges nagetier

    Dabei seit:
    17.02.2005
    Beiträge:
    1.081
    Zustimmungen:
    0
    und wie beendet man eine for-schleife dann schoen in diesem fall ?
     
  13. cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn
    gar nicht - man sollte eben keine endlosscheife produziert sondern eine abbruchsbedingung einbauen
     
  14. #14 hoernchen, 02.11.2006
    hoernchen

    hoernchen UBERgarstiges nagetier

    Dabei seit:
    17.02.2005
    Beiträge:
    1.081
    Zustimmungen:
    0
    die abbruchbedingung waere ja mit "return 0;" bei zb. x=0 o.ae. vorhanden.
     
  15. #15 cremi, 02.11.2006
    Zuletzt bearbeitet: 02.11.2006
    cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn
    ich versteh jetzt erst was du meinst

    Code:
    ...
    default: return 0;
    ...
    
    ??

    das ist nat. ok. - hab das irgendwie fehlinterprtiert

    finde es trotzdem besser eine best. abbruchbedingung festzulegen (z.B.: mit ESC) denn dann kann ich andere eingaben abfangen und das programm beendet auch nicht, wenn man sich mal vertippt.
     
Thema:

[C] Fehlermeldung bei For-Schleife

Die Seite wird geladen...

[C] Fehlermeldung bei For-Schleife - Ähnliche Themen

  1. Terminal Fehlermeldung

    Terminal Fehlermeldung: Hola, mir ist aufgefallen das ständig ein Fehler erscheint sobald ich einen Terminal öffne. Hat zwar keine Auswirkung auf die Arbeit damit sieht...
  2. tar Fehlermeldung/Backup

    tar Fehlermeldung/Backup: Hallo liebe Leute, ein Newbin versucht den nächsten Schritt und möchte per tar ein Backup seines Servers erstellen. Der Befehl: sudo tar...
  3. Fehlermeldung bei ganz simplen Code

    Fehlermeldung bei ganz simplen Code: #include <stdio.h> main() { int fahr, celsius; int lower, upper, step; lower = 0; upper = 300; step = 20; fahr = lower; while (fahr <= upper)...
  4. VirtuelBox 4.1.18 auf OpenSuse 12.1 startet nicht (keine Fehlermeldung)

    VirtuelBox 4.1.18 auf OpenSuse 12.1 startet nicht (keine Fehlermeldung): Hallo zusammen. Gerade ärgere ich mich wieder einmal mit VirtualBox herum. Wie so oft startet es nicht. Dieses Mal habe ich jedoch mangels...
  5. Fehlermeldung nach kernel-update bei Debian-Sid

    Fehlermeldung nach kernel-update bei Debian-Sid: Hallo hab gerade ein dist-upgarde durchgeführt, dabei den Kernel auf 6.2.0.9 upgedatet und hab von apt folgnede Fehlermeldung erhalten...