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.