expected primary expression before '}' bitte helfen



  • Ich habe Fehler : expected primary expression before '}' und expected while() auch before '}'. Ich hab die Error-Zeile markiert.
    Kann jemand bitte helfen.

    #include <stdio.h>
    #include <dos.h>
    #include <windows.h>
    #include <math.h>
    #include <stdlib.h>
    
    //globale Variablen
    int Phase1 = 0;                 //Ausgang Phase1
    int Phase2 = 0;                 //Ausgang Phase2
    int Phase3 = 0;                 //Ausgang Phase3
    int POS[] = {0,500,1000,1500,2000,2500,3000,3500,4000,4096};
    int runden(float n)           // rundungsfunktion (weil modulo nicht mit Float funktioniert)
    {
      if (n-(int)(n) >= 0.5) 
        return (int)(n+1);
    
      else
        return (int)(n);
    
    } //ende runden
    
    typedef enum {Ruhe,Links,Rechts,Stop}TSTATE; 
    TSTATE state = Ruhe;          
    
    //Main-Funktion
    int main(){
    
    unsigned int schrittwinkel = 15;
    unsigned int ausschaltwinkel = 14;    // variabel
    float a,p1;
    unsigned int aufloesung = 4096;
    float zw,KPOS1;
    int KPOS = 0;
    int i,b,c,d;
    
    a = schrittwinkel*(aufloesung/360);        // schrittwinkel
    b = ausschaltwinkel*(aufloesung/360);       // ausschaltwinkel
    c = 512;   // periode = 3*15*umrechungsfaktor = 512    
    
    //---------Endlosschleife begin------------------------------------------------------------------------------------
     while(1){
    
       switch (state) {
    		case Ruhe:   
              int j;			  
              do{         
                 printf("Drehrichtung auswählen (0 für links und 1 für rechts)");
                 scanf("%i",j);
                 if(j==0){
                 state = Links;
                 }
                 else if(j==1){
                 state = Rechts;
                 }
                 else{
                 printf("FEHLER!!! bitte nur 0 oder 1 eingeben ");
                 }
                while(j<0||j>1);
            break;    
    
            case Links :
              zw = 48+(a-b);
              for(i=0;i<=9;i++){
                 KPOS1 = POS[i] + zw;
                 KPOS = runden(KPOS1);
                 d = KPOS % c;
    
                 if(KPOS >=4096){
                 KPOS = KPOS - 4096;
                 }
    
                 printf("POS: %i\n",POS[i]);
                 printf("KPOS: %i\n",KPOS); 
                 //drehender Betrieb
    
                 if((0 <= d) && (d <= a)){
    
                 Phase1 = 0;
                 Phase3 = 0;
                 Phase2 = 1;
                 printf("Phase1: %i\n",Phase1);
    	         printf("Phase2: %i\n",Phase2);
    	         printf("Phase3: %i\n",Phase3);
    	         printf("--------------------\n");
                 } //ende if
    
                 if((a < d) && (d <= 2*a)){
    
                 Phase2 = 0;
                 Phase1 = 0;
                 Phase3 = 1;
                 printf("Phase1: %i\n",Phase1);
    	         printf("Phase2: %i\n",Phase2);
    	         printf("Phase3: %i\n",Phase3);
    	         printf("--------------------\n");
    
                 }  //ende if
    
                 if((2*a < d) && (d <3* a)){
    
                 Phase2 = 0;
                 Phase3 = 0;
                 Phase1 = 1;
                 printf("Phase1: %i\n",Phase1);
    	         printf("Phase2: %i\n",Phase2);
    	         printf("Phase3: %i\n",Phase3);
    	         printf("--------------------\n");
                 } //ende if
    
             } //ende for
            break; 
    
            case Rechts:
              zw = 48-(a-b);
              for(i=0;i<=9;i++){
    
                 KPOS1 = POS[i] + zw;
                 KPOS = runden(KPOS1);
                 d = 512-(KPOS % c);
    
                 if(KPOS >=4096){
                 KPOS = KPOS - 4096;
                 }	
                 printf("POS: %i\n",POS[i]);
                 printf("KPOS: %i\n",KPOS);        	
    
                 //drehender Betrieb
    
                 if((0 <= d) && (d <= a)){
                 Phase1 = 0;
                 Phase3 = 0;
                 Phase2 = 1;
    	         printf("Phase1: %i\n",Phase1);
                 printf("Phase2: %i\n",Phase2);
     	         printf("Phase3: %i\n",Phase3);
    	         printf("--------------------\n");
                 } //ende if
    
                 if((a < d) && (d <= 2*a)){
                 Phase2 = 0;
                 Phase1 = 0;
                 Phase3 = 1;
                 printf("Phase1: %i\n",Phase1);
    	         printf("Phase2: %i\n",Phase2);
          	     printf("Phase3: %i\n",Phase3);
    	         printf("--------------------\n");
                 }  //ende if
    
                 if((2*a < d) && (d <3* a)){
    
                 Phase3 = 0;
                 Phase3 = 0;
                 Phase1 = 1;
                 printf("Phase1: %i\n",Phase1);
                 printf("Phase2: %i\n",Phase2);
    	         printf("Phase3: %i\n",Phase3);
    	         printf("--------------------\n");
                 } //ende if
    
              } //ende for
            break;  
    
            case Stop:
              Phase3 = 1;
              Phase3 = 1;
              Phase1 = 1;
              printf("Phase1: %i\n",Phase1);
              printf("Phase2: %i\n",Phase2);
              printf("Phase3: %i\n",Phase3);
              printf("--------------------\n");
              Sleep(3000);
              Phase3 = 0;
              Phase3 = 0;
              Phase1 = 0;
              printf("Phase1: %i\n",Phase1);
              printf("Phase2: %i\n",Phase2);
              printf("Phase3: %i\n",Phase3);
              printf("--------------------\n");
              state = Ruhe;
              printf("***** Ruhe *****\n");
              printf("--------------------\n");
            break;
    
            default:
              state = Ruhe;
            break;
      }  // ende switch-case  
    } //ende endlos while(1)   [b] FEHLER in dieser ZEILE
    [/b]
    return 0;
    
    }// ende main
    

    [/QUOTE]



  • Du hast vermutlich mehr schließende als öffnende geschweifte Klammern.

    Um sowas zu finden hilft eine vernünftige Einrückung ungemein.



  • Zeile 58 fehlt ein }



  • while schrieb:

    Zeile 58 fehlt ein }

    herzlichen Dank!!!!!!

    Ich hab mehrmals die Klammer gezählt, aber die fehlende Klamma gar nicht gesehen.

    vielen dank nochmals für deine Hilfe!!!



  • pmt0107 schrieb:

    Ich hab mehrmals die Klammer gezählt, aber die fehlende Klamma gar nicht gesehen.

    Kleiner Tip: die meisten IDEs können zusammengehörende Klammern highlighten. Einfach Cursor draufstellen (bzw. dahinter) und du siehst wo das Gegenstück ist - sofern es nicht gerade ausserhalb vom Bildschirm ist.

    Und die meisten IDEs können auch zum Gegenstück springen. In Visual-Studio ist das auf Ctrl + (Taste nebem der Backspace-Taste) gemappt. Ein Tastendruck und der Cursor springt zum jeweiligen Gegenstück. Sehr praktisch.

    Und dann gibt es natürlich die automatische Einrückung, können auch die meisten IDEs. Unter Visual-Studio markierst du einfach den Bereich der korrekt eingerückt werden soll, und drückst erst Ctrl+K und dann Ctrl+F (die Ctrl Taste kannst du dabei gedrückt lassen). Schwupps, alles korrekt eingerückt.

    Damit hast du so "einfache" Fehler im Handumdrehen selbst gefunden, auch wenn der Code lange und unübersichtlich ist.


Anmelden zum Antworten