Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Einfaches Programm funktioniert nicht!

  1. #1
    Registrierter Benutzer
    Registriert seit
    31.01.2005
    Beiträge
    15

    Einfaches Programm funktioniert nicht!

    Hallo,
    Ich versuche gerade C zu lernen, und habe ein kleines test Programm geschrieben, um die funktionsweise von "if" zu testen.
    Code:
    /*  bsp10012.c  */
    #include <stdio.h>
    main() {
            int wahl;
    	float betrag;
    	printf("\nE U R O R E C H N E R\n");
    	printf("\n1 DM	--> EURO\n2 EURO --> DM");
    	printf("\n\nIhre Wahl: ");
    	scanf("%i",&wahl);
    	if (wahl == 1) {
    		printf("Bitte DM-Betrag eingeben: ");
    		scanf("%f",&betrag);
    		printf("\n%.2f DM sind %.2f EURO",betrag,betrag*0.51129);
    	}
    	if (wahl == 2) {
    		printf("Bitte EURO-Betrag angeben: ");
    		scanf("%f",&betrag);
    		printf("\n%.2f EURO sind %.2f DM",betrag,betrag*1.95583);
    	}
    }
    Wenn ich dieses Programm ausführe, bricht es an folgender Stelle nach dem Bestätigen der Eingabe ab:
    Code:
    E U R O R E C H N E R
    
    1 DM    --> EURO
    2 EURO --> DM
    
    Ihre Wahl: 1
    Bitte DM-Betrag eingeben: 100
    Woran kann das liegen?

    Vielen Dank,

    @|<0

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Du liest wahrscheinlich einen String ein und versuchst den mit nem int zu vergleichen...

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Code:
    /* 10012.c  */
    #include <stdio.h>
    int main(int argc, char *argv[]) {
            int wahl;
    	float betrag;
    	printf("\nE U R O R E C H N E R\n");
    	printf("\n1 DM	--> EURO\n2 EURO --> DM");
    	printf("\n\nIhre Wahl: ");
    	scanf("%i",&wahl);
    	if (wahl == 1) {
    		printf("Bitte DM-Betrag eingeben: ");
    		scanf("%f",&betrag);
    		printf("\n%.2f DM sind %.2f EURO\n",betrag,betrag*0.51129);
    	}
    	if (wahl == 2) {
    		printf("Bitte EURO-Betrag angeben: ");
    		scanf("%f",&betrag);
    		printf("\n%.2f EURO sind %.2f DM\n",betrag,betrag*1.95583);
    	}
    
    	return 0;
    }
    Bei mir funktioniert allerdings auch deine Version ohne jegliche Änderungen... evtl hast du die Schlussausgabe nur nicht gesehen, weil du den letzten Zeilenumbruch (blau & fett) vergessen hast. Ich rate dir aber deine Programme immer mit den restlichen oben rot hervorgehobenen Änderungen zu schreiben, da diese zum guten Stil von C-Programmen gehören.

    MfG jeebee
    Geändert von jeebee (14-05-2005 um 19:20 Uhr)

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von @|<0
    Woran kann das liegen?
    Stdout-Ausgaben sind gepuffert. Der Puffer wird nur auf den Bildschirm geschrieben wenn er
    a) voll ist
    b) deine Ausgabe ein Endzeilenzeichen \n enthält

    Was ich weiss ist dass es sein kann - wenn das Programm abstürzt - dass die letzte Ausgabe es zwar bis in den Buffer aber nicht auf den Bildschirm geschafft hat. Möglicherweise gilt das auch für das normale Programmende - also dein Programm schreibt in den Buffer und beendet sich - und der Buffer wird gar nie auf den Bilschirm geschrieben.

    Also - wie von jeebee schon erwähnt - am besten der Ausgabe ein \n anhängen. (Ich vergess das übrigens auch immer, bin etwas Java-System.out.println() gewöhnt )

    Mal jetzt abgesehen von der Frage:
    Dein Programm ist überhaupt nicht geschützt gegen Fehlereingaben von Benutzern. Das würde ich noch machen (Rückgabewert von Scanf prüfen, Buffer leeren und neu einlesen, etc).
    Es sei denn du bist dir dessen bewusst und lässt das einfach weg um das Beispielprogramm erst mal etwas übersichtlicher zu gestalten. Das darf man auch

    @bischi: scanf("%i",&wahl); liest die Zahl und speichert sie im Int dessen Adresse übergeben wurde. Das haut schon hin

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Registrierter Benutzer
    Registriert seit
    31.01.2005
    Beiträge
    15
    Zitat Zitat von jeebee
    Code:
    /* 10012.c  */
    #include <stdio.h>
    int main(int argc, char *argv[]) {
            int wahl;
    	float betrag;
    	printf("\nE U R O R E C H N E R\n");
    	printf("\n1 DM	--> EURO\n2 EURO --> DM");
    	printf("\n\nIhre Wahl: ");
    	scanf("%i",&wahl);
    	if (wahl == 1) {
    		printf("Bitte DM-Betrag eingeben: ");
    		scanf("%f",&betrag);
    		printf("\n%.2f DM sind %.2f EURO\n",betrag,betrag*0.51129);
    	}
    	if (wahl == 2) {
    		printf("Bitte EURO-Betrag angeben: ");
    		scanf("%f",&betrag);
    		printf("\n%.2f EURO sind %.2f DM\n",betrag,betrag*1.95583);
    	}
    
    	return 0;
    }
    da diese zum guten Stil von C-Programmen gehören.
    Das Problem ist das ich als Anfänger die Bedeutung des "guten Stils" nicht kenne.
    Kannst du mir diese Änderungen vielleicht erklären?
    EDIT: Mit den \n gehts... Big THX

    Danke.
    Geändert von @|<0 (14-05-2005 um 21:27 Uhr)

  6. #6
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Naja, "void main" geht nur deshalb weil soviel ich weiss per Default void-Funktionen von C eigentlich als Funktionen die int zurückgeben verwendet werden. Das ist eher noch so ein Überbleibsel aus 30 Jahren C-Geschichte. Korrekt ist "int main".

    Das return 0 ist halt weils eine Funktion ist die ints zurückgibt - 0 heisst hier "kein Fehler bei Ausführung des Programms"

    http://www.eskimo.com/~scs/C-faq/q11.12.html

    Ob (int argc, char *argv[]) oder () ist eigentlich eher egal - ersteres ermöglicht dir halt noch den Zugriff auf die Argumente die deinem Programm auf der Kommandozeile übergeben wurden. Erlaubt ist aber beides.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  7. #7
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Wenn du den gcc mit dem Schalter -Wall (alle Warnungen) benutzt, sagt er dir sogar das main() eine Funktion vom Typ int sein sollte. Wenn ich void main() benutze erhalte ich die Meldung "program terminated with errcode 12", wenn ich int main() und return 0 benutze erhalte ich die Meldung "programm terminated with errcode 0".

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •