Einlesen und Vergleichen von char.



  • Hallo bin Neuling in C und hab ein Prob mit nem Programmcode und ich komm einfach nicht drauf...

    /* Aufgabe4 */
    
    #include <stdio.h>
    
    void main()
    {
    	float preis = 0, endbetrag = 0;
    	char stam;
    
    	printf("\nBitte Preis eingeben: ");
    	scanf("%f",&preis);
    
    	if(preis >= 1000)
    	{
    		printf("\nStammkunde? (J/N) : ");
    		scanf("%c",stam);
    
    		if(stam == 'j')
    		{
    			endbetrag = preis - preis * 0.08;
    			printf("\n\nIhr Preis als Stammkunde: %f\n\n",endbetrag);
    		}
    		else
    		{
    			endbetrag = preis - preis * 0.05;
    			printf("\n\nIhr Preis: %f\n\n",endbetrag);
    		}
    	}
    	else
    	{
    		endbetrag = preis - preis * 0.03;
    		printf("\n\nIhr Preis: %f\n\n",endbetrag);
    	}
    }
    

    Nach Eingabe des Preises erhalte ich einen Laufzeitfehler.
    Hab die Eingabe Stammkunde? schon mit Zahlen probiert 1 für JA 2 für NEIN da hatts Problemlos funktioniert aber mit ner char J oder N gehts nicht.
    Kennt jemand meinen Fehler???



  • Zeile 16: scanf("%c",&stam);



  • crazychriz22 schrieb:

    Nach Eingabe des Preises erhalte ich einen Laufzeitfehler.

    Beim nächsten Mal postest du diesen Fehler bitte auch, ja (mindestens Fehlermeldung und Zeile)? Sonst muss man immer ausprobieren, den ganzen Code unnötigerweise durchgehen oder raten...



  • Das Programm wird auch mit korrektem scanf Parameter nicht laufen wie gewünscht. Die if Abfrage in Zeile 18 wird übersprungen werden, weil sich scanf in Zeile 16 quasi selbst ausführt und das Newline aus dem Eingabepuffer holt.

    Gruß,
    B.B.



  • @ BigBRother
    Wie könnt man sich in diesem Fall weiterhelfen?

    Habs jetzt mit

    stam=getch();
    

    gelöst.
    Würd mich aber trotzdem intressieren wie mans mit scanf lösen könnte???

    thx



  • ok bin selbst draufgekommen

    fflush(stdin);

    in zeile 16 vor scanf dann gehts.

    Danke nochmals an alle.



  • Zum Thema fflush(stdin) lies dir bitte mal Folgendes durch: http://www.c-plusplus.net/forum/viewtopic.php?t=39349

    Wenn du den MS-Compiler nutzt, darfst du das allerdings (machen solltest du es trotzdem nicht, wenn du den Code irgendwann mal portieren willst).



  • Danke für den Hinweis aber bin momentan noch nicht fit genug um das zu verstehen...
    weiß noch nicht mal an welcher Stelle oder was bei meinem Code im Puffer gespeichert wurde,geschweige denn was das mit dem \n zu tun haben soll.
    Aber ich hoff das mir das in ein paar Monaten etwas klarer wird.

    gruß
    cc <- fleißig am üben



  • Na ja, du musst es ja auch nicht direkt verstehen. Nimm einfach statt fflush(stdin) die dort gezeigte Alternative.



  • Nen Kumpel hat mich grad eben noch auf die meiner Meinung nach beste Lösung gebracht:

    scanf(" %c",stam);
    

    auf das Leerzeichen vor dem % kommts an.



  • crazychriz22 schrieb:

    Nen Kumpel hat mich grad eben noch auf die meiner Meinung nach beste Lösung gebracht:

    scanf(" %c",stam);
    

    auf das Leerzeichen vor dem % kommts an.

    Das ist die meiner Meinung nach schlechteste Lösung.


Log in to reply