C Anfänger braucht hilfe :)

06/07/2010 18:34 xXFunyXx#1
Also, ich versuche mich gerade ein bissl in C. Bin da noch ganz am Anfang. Ich habe mir ein TUT durchgelesen und habe einfach mal losgelegt, weil ich so am besten lerne, aber irgentwie will das nicht so ganz klappen. ^^

Ich wollte mir ein ganz simplen Rechner basteln:

Code:
#include <stdio.h>

int main()

{
    int eingabe=0, zahl1=0, zahl2=0;


    printf ("\nBitte die erste Zahl eingeben: \n");
    scanf ("%d", &zahl1);

    printf ("\nBitte + - * oder : eingeben: \n");
    scanf ("%d", &eingabe);

    printf ("\nBitte die zweite Zahl eingeben: \n");
    scanf ("%d", &zahl2);

    if (eingabe = "+")
        printf ("Ergebnis: %d", zahl1 + zahl2);
    else{
        if (eingabe = "-")
            printf ("Ergebnis: %d", zahl1 - zahl2);
        else{
            if (eingabe = "*")
                printf ("Ergebnis: %d", zahl1 * zahl2);
            else{
                if (eingabe = ":")
                    printf ("Ergebnis: %d", zahl1 / zahl2);
            }
        }
    }
    return 0;
}
Der Spukt mir aber 4 Warnungen aus.
Mag mir da mal jemand helfen?
06/07/2010 20:01 Shadow992#2
Quote:
Originally Posted by xXFunyXx View Post
Also, ich versuche mich gerade ein bissl in C. Bin da noch ganz am Anfang. Ich habe mir ein TUT durchgelesen und habe einfach mal losgelegt, weil ich so am besten lerne, aber irgentwie will das nicht so ganz klappen. ^^

Ich wollte mir ein ganz simplen Rechner basteln:

Code:
#include <stdio.h>

int main()

{
    int eingabe=0, zahl1=0, zahl2=0;


    printf ("\nBitte die erste Zahl eingeben: \n");
    scanf ("%d", &zahl1);

    printf ("\nBitte + - * oder : eingeben: \n");
    scanf ("%d", &eingabe);

    printf ("\nBitte die zweite Zahl eingeben: \n");
    scanf ("%d", &zahl2);

    if (eingabe = "+")
        printf ("Ergebnis: %d", zahl1 + zahl2);
    else{
        if (eingabe = "-")
            printf ("Ergebnis: %d", zahl1 - zahl2);
        else{
            if (eingabe = "*")
                printf ("Ergebnis: %d", zahl1 * zahl2);
            else{
                if (eingabe = ":")
                    printf ("Ergebnis: %d", zahl1 / zahl2);
            }
        }
    }
    return 0;
}
Der Spukt mir aber 4 Warnungen aus.
Mag mir da mal jemand helfen?
Das sind keinen Warnungen, sondern Errors .
Du darfst bei den Überprüfungen von 2 Werten nie 1 = schreiben , da es sonst als Wertzuweisung interpretiert wird :
Code:
#include <stdio.h>

int main()

{
    int eingabe=0, zahl1=0, zahl2=0;


    printf ("\nBitte die erste Zahl eingeben: \n");
    scanf ("%d", &zahl1);

    printf ("\nBitte + - * oder : eingeben: \n");
    scanf ("%d", &eingabe);

    printf ("\nBitte die zweite Zahl eingeben: \n");
    scanf ("%d", &zahl2);

    if (eingabe == "+")
        printf ("Ergebnis: %d", zahl1 + zahl2);
    else{
        if (eingabe == "-")
            printf ("Ergebnis: %d", zahl1 - zahl2);
        else{
            if (eingabe == "*")
                printf ("Ergebnis: %d", zahl1 * zahl2);
            else{
                if (eingabe == ":")
                    printf ("Ergebnis: %d", zahl1 / zahl2);
            }
        }
    }
    return 0;
}
06/07/2010 20:17 xNopex#3
Quote:
Das sind keinen Warnungen, sondern Errors .
Nein es sind Warnungen. Prinzipiell ist es erlaubt, z.B. folgendes zu schreiben:


Code:
if( a = 1 )
//do sth.

Nur ist deine if-Abfrage damit völlig sinnlos, da der Ausdruck immer als wahr interpretiert wird und so immer der Code der innerhalb der if-Abfrage steht ausgeführt wird.
Aber es ist kein Fehler :) Trotzdem hat der Schreiber über mir recht. Um eben die Verwechslung zwischen Zuweisung und Abfrage auszuschließen, verwendet man hier zwei "=".
06/07/2010 20:39 MrSm!th#4
Quote:
Originally Posted by xXFunyXx View Post
Code:
if (eingabe = ":")
Und um die beiden noch zu ergänzen:

Gaaanz böser Fehler!

Hiermit vergleichst du nicht den String selbst, sondern den Zeiger, der auf ihn zeigt (in C/C++ ist ein String einfach ein Zeiger, der auf eine Kette von Zeichen zeigt)!

Wenn du also die Eingabe in den ASCII Wert konverierst, musst du
Code:
if(eingabe == ':')
schreiben.
Damit wird der ASCII Wert des Zeichens ":" genommen, anstatt einem Zeiger auf das Zeichen ":".
06/07/2010 21:33 nkkk#5
ausserdem würde ich die geschweifeten klammern nach den else weglassen, die sind in den meisten fällen unnötig un verwirren nur:


Code:
#include <stdio.h>
int main()
{
    int zahl1=0, zahl2=0;
    char eingabe;// <-- wenn eingabe ein char sein soll auch als solches deklarieren


    printf ("\nBitte die erste Zahl eingeben: \n");
    scanf ("%d", &zahl1);

    printf ("\nBitte + - * oder : eingeben: \n");
    //scanf ("%c", &eingabe); hier muss daür gesorgt werden dass er nicht die entertaste als nöchstes zeichen nimmt, der einfachste, wenn auch nicht der schönste weg ist, einach noch ein zweitesscanf;    
    scanf ("%c", &eingabe);// <-- "%c" für char einlasen

    printf ("\nBitte die zweite Zahl eingeben: \n");
    scanf ("%d", &zahl2);

    if (eingabe == '+')//<-  '+' statt "+"
        printf ("Ergebnis: %d", zahl1 + zahl2);
    else if (eingabe == '-')//<- kein überflüssigen klammern 
        printf ("Ergebnis: %d", zahl1 - zahl2);
    else if (eingabe == '*')
        printf ("Ergebnis: %d", zahl1 * zahl2);
    else if (eingabe == ':')
        printf ("Ergebnis: %d", zahl1 / zahl2);
    else
        printf ("Ungültige Eingabe");
    return 0;
}
06/08/2010 20:20 xXFunyXx#6
Vielen Dank für eure Hilfe.
Ich glaube ich muss da doch noch etwas Theorie machen. :(

Wenn mir jemand ein gutes TUT empfehlen kann, immer her damit. ^^
06/08/2010 20:35 Mark-#7
lesen hilft...
[Only registered and activated users can see links. Click Here To Register...]
06/08/2010 20:43 xXFunyXx#8
Quote:
Originally Posted by Spacii View Post
lesen hilft...
[Only registered and activated users can see links. Click Here To Register...]
Schon klar, aber vielleicht hat ja jemand ein anderes TUT, das er/sie mir empfehlen kann.
06/08/2010 20:48 Mark-#9
wenn jemand hier ein zu empfehlendes tut hätte würde er es dort posten oder? ;)
ansonsten empfehle ich dir Bücher(die man im Laden kauft)
06/08/2010 21:33 nkkk#10
Quote:
Originally Posted by phrenesis View Post
fuck yeah :/
Code:
int*_;scanf("%d%c%d", &_[0], &_[1], &_[2]);printf("=%d",(_[1]=='+')?_[0]+_[2]:(_[1]=='-')?_[0]-_[2]:(_[1]=='*')?_[0]*_[2]:_[0]/_[2]);
so sollte man es lieber nicht machen, wennman will das man(oder irgendwer anders) den code am nächsten tag noch versteht:P

ausserdem is er ziemlich unsicher, da die variable _ igrendwohin im speicher zeigt.
06/08/2010 21:40 Akorn#11
Ein tutorial für C was ich für die grundlagen recht gut fand ist das [Only registered and activated users can see links. Click Here To Register...].
06/08/2010 22:37 xXFunyXx#12
Quote:
Originally Posted by phrenesis View Post
fuck yeah :/
Code:
int*_;scanf("%d%c%d", &_[0], &_[1], &_[2]);printf("=%d",(_[1]=='+')?_[0]+_[2]:(_[1]=='-')?_[0]-_[2]:(_[1]=='*')?_[0]*_[2]:_[0]/_[2]);
Nicht unbedingt für Anfänger geeignet ...

@Akorn Danke dir :)