tutorials.at: Frage zu einem Beispiel aus einem Tutorial

Schnelle objektorientierte, kompilierende Programmiersprache.
mettalqueen
Beiträge: 11
Registriert: Mi Okt 20, 2010 11:22 am

tutorials.at: Frage zu einem Beispiel aus einem Tutorial

Beitrag von mettalqueen » Mi Okt 20, 2010 11:33 am

Hallo Leute. Auf der Suche nach einer guten möglichkeit, das Programmieren zu lernen, bin ich auf euer Forum und auf die Seite gstoßen. Ich nutze dieses Tutorial http://www.tutorials.at/c/04-kommentare-operatoren.html und bin bei Kapitel 4. Bisher hat alles super geklappt auch ohne Fehler. Jedoch komme ich an folgender Stelle nicht weiter.
Falls Sie sich gefragt haben, ob es viele Operatoren in C gibt, wäre das damit auch beantwortet. ;-)
Bis Sie am Ende dieses Tutorials angelangt sind, werden Sie mit vielen Operatoren davon zu tun gehabt haben. Betrachten Sie einmal folgende Anweisung:

ergebnis = 3 + 3 * 3;

Was denken Sie, ist das Ergebnis? 18 oder 12? Schreiben Sie ein kleines C-Programm, das das Ergebnis ausgibt.


ich habe versucht, das folgendermaßen zu lösen.

Code: Alles auswählen

#include <stdio.h>

int main()
{
    int summand1, summand2, faktor;

    printf ("Geben sie 3 + 3 * 3 ein");
    scanf ("%d %d %d", &summand1, &summand2, &faktor);

    printf ("%d + %d *%d = %d\n", summand1, summand2, faktor, summand1 + summand2 * faktor);

    return 0;
}
Das Ergebnis sieht am Ende dann so aus, wenn ich es gestartet habe.
fehlermeldung.JPG
Edit by Xin: tutorials.at im Betreff hinzugefügt, Codetags hinzugefügt, Thread von Board "Tutorials" nach "C++" verschoben
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Frage zu einem Beispiel aus einem Tutorial

Beitrag von cloidnerux » Mi Okt 20, 2010 11:44 am

Was denken Sie, ist das Ergebnis? 18 oder 12? Schreiben Sie ein kleines C-Programm, das das Ergebnis ausgibt.

ich habe versucht, das folgendermaßen zu lösen.
Ok, ich verstehe DEIN Problem nicht.
Du hast ein Programm geschrieben, dass dem Nutzer eine Zahl X, Y, und Z eingeben lässt und das Ergebnis der Rechnung X + Y * Z auszugeben.
Ist doch ein Richtiger Ansatz für dein Problem, nur etwas zu Kompliziert für die Aufgabenstellung, aber nicht weiter schlimm.
Hast du es denn einfach mal Ausprobiert?

Da ansonsten meine Glaskugel gerade Kaputt ist: http://proggen.org/doku.php?id=faq:frageformulieren

P.S. Willkommen im Forum.
Redundanz macht wiederholen unnötig.
quod erat expectandum

mettalqueen
Beiträge: 11
Registriert: Mi Okt 20, 2010 11:22 am

Re: tutorials.at: Frage zu einem Beispiel aus einem Tutorial

Beitrag von mettalqueen » Mi Okt 20, 2010 11:49 am

Also ich habe während des Tutorials (siehe link oben) folgende aufgabenstellung bekommen

ergebnis = 3 + 3 * 3;

Was denken Sie, ist das Ergebnis? 18 oder 12? Schreiben Sie ein kleines C-Programm, das das Ergebnis ausgibt

Dies habe ich versucht. Habe oben meinen Lösungsweg aufgeschrieben. Jedoch wurde mir die Antwort nicht ausgegeben. Habe davon einmal ein Screen gemacht. Jetzt ist meine Frage: Was habe ich falsch gemacht?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: tutorials.at: Frage zu einem Beispiel aus einem Tutorial

Beitrag von Xin » Mi Okt 20, 2010 12:00 pm

mettalqueen hat geschrieben:Hallo Leute. Auf der Suche nach einer guten möglichkeit, das Programmieren zu lernen, bin ich auf euer Forum und auf die Seite gstoßen. Ich nutze dieses Tutorial http://www.tutorials.at/c/04-kommentare-operatoren.html und bin bei Kapitel 4.
Wenn Du weitere Fragen zum Tutorial von tut.at hast, schreibe bitte im Betreff "tutorial.at" davor, da wir hier eigene Tutorials haben, die wir anhand von Fragen verbessern und das dann schnell zu Verwechselungen führt. Auf die Seiten von tut.at haben wir keinen Einfluss.

Ansonsten willkommen auf proggen.org :-)
mettalqueen hat geschrieben:ergebnis = 3 + 3 * 3;

Was denken Sie, ist das Ergebnis? 18 oder 12? Schreiben Sie ein kleines C-Programm, das das Ergebnis ausgibt.[/b]

ich habe versucht, das folgendermaßen zu lösen.

Code: Alles auswählen

#include <stdio.h>

int main()
{
    int summand1, summand2, faktor;

    printf ("Geben sie 3 + 3 * 3 ein");
    scanf ("%d %d %d", &summand1, &summand2, &faktor);

    printf ("%d + %d *%d = %d\n", summand1, summand2, faktor, summand1 + summand2 * faktor);

    return 0;
}
Okay, mehrere Dinge sehe ich hier:
Zum einen: Wieso verwendest Du scanf - die Funktion ist vergleichsweise gefährlich, weil sie leicht falsch zu bedienen ist. Gib doch einfach die Rechenaufgabe direkt in den Quelltext ein:

Code: Alles auswählen

    int ergebnis = 3 + 3 * 3;
    printf ("%d + %d *%d = %d\n", 3, 3, 3, ergebnis );
Der Autor von tut.at möchte vermutlich damit zeigen, dass die Multiplikation vor der Addition ausgeführt wird und das sollte durch diese Zeilen auch herauskommen.

Zweitens: Du benutzt scanf. Die Funktion ist immernoch vergleichsweise gefährlich, weil sie leicht falsch zu bedienen ist und das passiert hier auch:

Code: Alles auswählen

    
    printf ("Geben sie 3 + 3 * 3 ein");
    scanf ("%d %d %d", &summand1, &summand2, &faktor);
scanf erwartet hier drei Integer, die mit Leerzeichen getrennt sind. Diese Integer werden in die Variablen summand1, summand2 und faktor gespeichert. Du gibst aber "3 + 3 * 3" ein und das scheint scanf zu verwirren. So bekommst Du in summand1 die "3", in summand2 die "+3" (plus ist hier das Vorzeichen!) und dann kommt "*3", was sich nicht als Integer ausdrücken lässt. Also wird die Variable faktor nicht initialisiert. Was immer vorher in Faktor drinstand bleibt unverändert - und vorher stand halt eine willkürliche, sehr große Zahl drin.

Und damit wissen wir nun 3 mal willkürliche große Zahl plus 3 ist 12600579. :-D

Gib in Dein Programm mal "3 3 3" ein, dann sollte es laufen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

mettalqueen
Beiträge: 11
Registriert: Mi Okt 20, 2010 11:22 am

Re: tutorials.at: Frage zu einem Beispiel aus einem Tutorial

Beitrag von mettalqueen » Mi Okt 20, 2010 12:10 pm

Gib in Dein Programm mal "3 3 3" ein, dann sollte es laufen.

An welcher Stelle soll ich das denn eingeben?

mettalqueen
Beiträge: 11
Registriert: Mi Okt 20, 2010 11:22 am

Re: tutorials.at: Frage zu einem Beispiel aus einem Tutorial

Beitrag von mettalqueen » Mi Okt 20, 2010 12:12 pm

Code: Alles auswählen

    int ergebnis = 3 + 3 * 3;
    printf ("%d + %d *%d = %d\n", 3, 3, 3, ergebnis );
Ok so funktioniert es schon einmal. Ich habe scanf benutzt, weil das hal in dem kapitel erklärt worden ist

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: tutorials.at: Frage zu einem Beispiel aus einem Tutorial

Beitrag von Xin » Mi Okt 20, 2010 12:29 pm

mettalqueen hat geschrieben:

Code: Alles auswählen

    int ergebnis = 3 + 3 * 3;
    printf ("%d + %d *%d = %d\n", 3, 3, 3, ergebnis );
Ok so funktioniert es schon einmal. Ich habe scanf benutzt, weil das hal in dem kapitel erklärt worden ist
Wenn Du deinem Programm eingaben machen möchtest, schau Dir folgendes mal an: Parameter für main().

Hier bekommst Du ein Array mit C-Strings übergeben, die Du z.B. mit printf( "%s\n", cstring ) ausgeben kannst. Wenn Du einen C-String in ein Integer umwandeln kannst, dann geht das mit der Funktion atoi().

Wenn Du mit Arrays und C-Strings noch nichts anfangen kannst, dann kümmere Dich erstmal nicht darum, sondern lerne einfach weiter, wie gehabt. Achte darauf, scanf() nach Möglichkeit nicht zu nutzen und wenn doch, darauf zu achten, dass scanf Dir bei den Eingaben keinen Spielraum lässt und bei falschen Daten auch keinen Hinweis für fehlerhafte Eingaben gibt.

Viel Spaß und Erfolg :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

mettalqueen
Beiträge: 11
Registriert: Mi Okt 20, 2010 11:22 am

Re: tutorials.at: Frage zu einem Beispiel aus einem Tutorial

Beitrag von mettalqueen » Mi Okt 20, 2010 1:07 pm

Ja ok werde ich mir merken. naja ich habe scanf benutzt weil es in dem Kapitel halt erklärt worden ist. Kann man die aufgabe auch mit scanf lösen?

mettalqueen
Beiträge: 11
Registriert: Mi Okt 20, 2010 11:22 am

Re: tutorials.at: Frage zu einem Beispiel aus einem Tutorial

Beitrag von mettalqueen » Mi Okt 20, 2010 1:20 pm

So habe es endlich gelöst bekommen und zwar wie folgt:

Code: Alles auswählen

#include <stdio.h>

int main()
{

    int i = 3, j = 3, k = 3;

    printf ("Geben sie: 3 + 3 * 3 ein");
    scanf ("%d %d %d", &i,  &j, &k);

    printf ("%d + %d *%d = %d\n", i, j, k, i + j * k);

    return 0;
}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: tutorials.at: Frage zu einem Beispiel aus einem Tutorial

Beitrag von Xin » Mi Okt 20, 2010 1:21 pm

mettalqueen hat geschrieben:Ja ok werde ich mir merken. naja ich habe scanf benutzt weil es in dem Kapitel halt erklärt worden ist. Kann man die aufgabe auch mit scanf lösen?
Öhm... die Aufgabe ist, 3 + 3 * 3 auszurechnen. Dafür braucht man kein scanf(), schließlich muss man eigentlich keine Werte eingeben.

Ansonsten hast Du die Aufgabe doch unter der Verwendung von scanf() gelöst - Du hast nur halt die Eingaben falsch gemacht. Wenn Du das Vereinfachen willst, dann könntest Du die Daten einzeln abfragen:

Code: Alles auswählen

int summand1, summand2, faktor;

printf( "Bitte ersten Summanden eingeben: " );  flush(); scanf("%d", &summand1 );
printf( "Bitte zweiten Summanden eingeben: " ); flush(); scanf("%d", &summand2 );
printf( "Bitte Faktor eingeben: " );            flush(); scanf("%d", &faktor );
(das ist nicht kompiliert worden... aber so läuft es im Prinzip)

Wenn Du nun als Antwort auf die Frage nach dem ersten Summanden "1 2 3" eingibst, hast Du bereits alles gesagt... wie gesagt... scanf eignet sich nicht dafür einen Menschen nach seiner Meinung zu fragen, denn Menschen haben auch ganz unterschiedliche Meinungen, was das Eingeben von Daten angeht...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten