[C] Fehlermeldung bei For-Schleife

Cordell

Cordell

Mitglied
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
 
Du musst das "i" ausserhalb des fors deklarieren oder den Compiler anweisen sowas zu ignorieren.
 
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 :)
 
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:
 
ltrace, strace und gdb sollten dir bei der Fehlersuche helfen. :)
 
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:

auswahl ist vom typ char und du vergleichst mit 1,2,...:
case 1:

versuchs mal mit hochkomma:
case '1':
 
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));      
}
 
du koenntest das ganze in eine endlosschleife geben :

for(;;)
{
BLA
}
 
du koenntest das ganze in eine endlosschleife geben :

for(;;)
{
BLA
}

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!
 
und wie beendet man eine for-schleife dann schoen in diesem fall ?
 
die abbruchbedingung waere ja mit "return 0;" bei zb. x=0 o.ae. vorhanden.
 
die abbruchbedingung waere ja mit "return 0;" bei zb. x=0 o.ae. vorhanden.

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.
 
Zuletzt bearbeitet:

Ähnliche Themen

C Code Hilfe!!! gesucht bei Dezimalzahl in Binärzahl for loop

Aufgabe in C

Segmentation fault -- warum?

Kommando gesucht

expected unqualified-id

Zurück
Oben