[C] Fehlermeldung bei For-Schleife

Dieses Thema im Forum "C/C++" wurde erstellt von Cordell, 01.11.2006.

  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. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #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.
     
  4. 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 :)
     
  5. #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:
     
  6. 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. :)
     
  7. 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':
     
  8. #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));      
    }
    
    
     
  9. #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
    }
     
  10. 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!
     
  11. #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.
     
  12. cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn
    ist aber kein schöner Programmierstil
     
  13. #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 ?
     
  14. 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
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #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.
     
  17. #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...