Fehlermeldung: error: expected '(' before '{' token



  • Hallo,

    ich versuche seit Tagen dieses Porgramm zu programmieren und habe nun alles Fehler, bis auf diesen einen, behoben. Hier komme ich jedoch einfach nicht drauf, was da falsch sein soll, denn mit den Klammern müsste eigentlich alles stimmen.

    Der Fehler: error: expected '(' before '{' token, wird auf Zeile 26 angezeit, die Stelle habe ich mit Ausrufezeichen versucht, hervorzuheben.
    Ich hoffe, dass mir da jemand weiterhelfen kann und meinen Fehler findet...wäre echt sehr dankbar

    [C-CODE]
    #include <stdio.h>
    #include <math.h>

    int main()
    {
    int x;
    int i;
    i=0;
    printf("\n Geben Sie eine Dezimalzahl an, für das die benötigte Bitzahl zum Speichern berechnet werden soll\n");
    printf("\nx=");
    scanf("%i" ,&x);

    if (pow(2, i)>=x)
    {
    return (pow(2, i));
    }

    else
    {
    do
    {
    pow(2, i+1);
    }

    while
    !!!!!! { !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    pow(2, i+1)<x;
    }

    if (x=pow(2, i+1))
    {
    return pow(2, i+1);
    }

    else
    {
    int j;
    int y;
    j=0;
    y=x-pow(2, i+1);

    if (y<=pow(2, j))
    {
    return pow(2, i+1)+pow(2, j);
    }
    else
    {
    return pow(2, i+1)+pow(2, j+1);
    }
    }
    }

    }
    [C-CODE]



  • do
    {
    pow(2, i+1);
    }
    
    while
    { 
    pow(2, i+1)<x;
    } 
    }
    

    Das Gerüst einer do-while-Schleife:

    do
    {
      tu_was();
    } while (bedingung);
    

    Das Grundgerüst einer while-schleife:

    while (bedingung)
    {
      tu_was();
    }
    

    Mit anderen Worten, die fehlt die Schleifenbedingung, wie lange die Schleife laufen soll. Desweiteren brauchst du die geschweiften Klammern danach auch nicht. Es sei denn das while bezieht sich auf eine Schleife darunter, dann würde allerdings die Bedingung der while-Schleife darüber fehlen sowie die der do-while-schleife. Irgendwas ist bei dem Codestück auf jedenfall derbe was schiefgelaufen.



  • Benutze in Zukunft bitte die cpp-Tags des Forums (der Button links unter den Smileys), nicht selbsterdachte. Dann klappt's auch mit der Formatierung. 😉



  • Vielen Dank! Der Fehler wird mir nicht mehr angezeigt. Jedoch reagiert das Programm für zahlen ab 3 nicht.... Sieht vielleicht jemand, woran das liegt??
    Dieses Programm soll eine Dezimalzahl einlesen und berechnen, wie viele Bits für das Speichern dieser Zahl benötigt werden und diese in Binärcode wiedergeben.
    Und da schaut man ja immer, wieviel 2^i das sind.
    Naja jetzt ist mir während des Schreibens schon aufgefallen, das das völlig falsch ist, was ich da gemacht habe.
    Also der Outpur ist falsch
    Ich gebe ja immer 2^i raus
    aber ich muss gucken an welcher stelle diese 2^i sind
    denn die Bits werden ja so berechnet:
    z.B für die Dezimalzahl
    176
    =1* 27 + 0* 26 + 1* 25 + 1* 24 + 0* 23 + 0* 22 + 0* 21 + 0* 20
    =1 0 1 1 0 0 0 0
    =10110000
    also muss für die Zahl 176 die binärcode 10110000 wiedergegeben werden als ergebnis.
    aber wie kriege ich das hin?
    die richtige 2 hoch i müsste bei diesem Programm ja eigentlich schon richtig wiedergegeben werden (was es aber ab 3 auch nicht tut?? :S)
    aber wie kriege ich es hin, dass es dann bei jedes mal, wenn er eine +1 zum neuen i addiert auch einen schritt nach rechts rutscht und da eine 0 hinkommt um schließlich sowas zu haben 10110000.....
    ich blick grad garnicht mehr durch es scheint mir jede minute ein bisschen komplizierter :(((
    und danke für den Tipp, hier der Quelltext nochmal richtig formatiert(selbsterdacht :D):

    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
        int x;
        int i;
        i=0;
        printf("\n Geben Sie eine Dezimalzahl an, fuer das die benoetigte Bitzahl zum Speichern berechnet werden soll\n");
        printf("\nx=");
        scanf("%i" ,&x);
    
        if (pow(2, i)>=x)
    
        {
            return (pow(2, i));
        }
    
        else
        {
            do
            {
                pow(2, i+1);
            } while (pow(2, i+1)<x);
    
            if (x=pow(2, i+1))
            {
                return pow(2, i+1);
            }
    
            else
            {
                int j;
                int y;
                j=0;
                y=x-pow(2, i+1);
    
                if (y<=pow(2, j))
                {
                    return pow(2, i+1)+pow(2, j);
                }
                else
                {
                    return pow(2, i+1)+pow(2, j+1);
                }
            }
        }
    
    }
    

    aber bei mir würde es schauen, 2^i (anfangswert für i=0)



  • oder müsste ich dafür ein neues Thema eröffnen??



  • Da die Binärzahl nur eine Darstellung für den Menschen ist, musst du die als char Array speichern.
    Wo gibst du überhaupt das Ergebnis aus?

    Zeile 23 bewirkt gar nichts.

    pow() ist für Integerzahlen zur Basis 2 Overkill. Da nimmt man die Shiftoperatoren << bzw >>.
    Statt pow(2, i+1); schreibst du 1<<(i+1);

    derya schrieb:

    176
    =1* 27 + 0* 26 + 1* 25 + 1* 24 + 0* 23 + 0* 22 + 0* 21 + 0* 20
    =1 0 1 1 0 0 0 0
    =10110000

    Deine Rechnung ist großer Blödsinn.
    27+25+24=76 (Wo hast du überhaupt die Zahlen her?

    Die Zweierpotenzen sind 1 2 4 8 16 32 64 128 ...

    176 = 1*128 + 0*64 + 1*32 + 1*16 + 0*8 + 0*
    4 + 0*2 + 0*1
        = 1       0      1      1      0     0     0     0
        = 1011 0000
    


  • DirkB schrieb:

    Zeile 23 bewirkt gar nichts.

    bewirkt sie nicht, dass i jedesmal um 1 erhöht wird, solange diese kleiner als x ist??

    DirkB schrieb:

    pow() ist für Integerzahlen zur Basis 2 Overkill. Da nimmt man die Shiftoperatoren << bzw >>.
    Statt pow(2, i+1); schreibst du 1<<(i+1);

    okay, das wusste ich nicht, werde ich nochmal so versuchen, vielen Dank!

    quote="DirkB"]

    derya schrieb:

    176
    =1* 27 + 0* 26 + 1* 25 + 1* 24 + 0* 23 + 0* 22 + 0* 21 + 0* 20
    =1 0 1 1 0 0 0 0
    =10110000

    Deine Rechnung ist großer Blödsinn.
    27+25+24=76 (Wo hast du überhaupt die Zahlen her?
    [/quote]

    ohh das ist so geworden weil ich es kopiert habe. da ist immer 2^gemeint also
    =1* 2^7 + 0* 2^6 + 1* 2^5 usw

    aber wie teile ich das dem Programm mit, dass er das auch so darstellt...
    sozusagen, dass er jedesmal wenn er nochmal eine 1 zu i addiert eine spalte nach rechts rutschen und für diese links geblieben dann o ausgibt...??



  • derya schrieb:

    bewirkt sie nicht, dass i jedesmal um 1 erhöht wird, solange diese kleiner als x ist??

    Nein. Du erzeugst einen temporären Wert, der i+1 ist. Wenn du in einem Ausdruck i erhöhen willst, musst du ++i oder i++ notieren (je nachdem, ob du möchtest, dass die Wertänderung vor oder nach Auswerten des Ausdrucks geschieht).


Anmelden zum Antworten