Ticketautomat



  • zwei


  • Mod



  • du musst den preis ja auch irgendwie zusammenzählen, also was im sinne von

    while(bedingung)
    //welches ticket?
    //gesamtsumme=gesamtsumme+ticketpreis;
    //möchten sie noch ein ticket haben?
    
    //wenn nein
    //bedingung=0;
    //ende whileschleife
    
    //ausgabe: bitte bezahlen sie gesamtsumme euro!
    


  • andy_f schrieb:

    Ansi C

    andy_f schrieb:

    void main(void)
    ...
    zahl1 = _getch();

    Fängt ja schon mal gut an.

    andy_f schrieb:

    fflush(stdin);

    Nimms mir nicht übel, aber sag bitte nicht, dass man das euch beigebracht hat.
    Dein ganzer Code ist Müll (wieder nicht böse gemeint, aber anders kann man das nicht ausdrücken)
    Kauf dir ein gutes Buch (nicht C von A-Z) oder lese ein Tutorial (z.B. https://de.wikibooks.org/wiki/C-Programmierung ),
    auf den "Ansi-C Kurs" kannst du getrost verzichten.

    Um etwas sachlicher zu werden:
    getch ist kein Bestandteil von Ansi-C und fflush(stdin) ist undefiniert.
    Eine Alternative zu fflush(stdin) findest du in den faq.
    statt void main heißt es int main.



  • drei


  • Mod

    Bitmapper schrieb:

    C von A-C

    😃
    Unter dem Titel könnte man es sogar ganz ehrlich verkaufen



  • andy_f schrieb:

    Arbeite gerade schon einige Tutorials durch und zwar von Beginn an.

    Die meisten deutschen C-Tutorials sind zu nichts zu gebrauchen.
    Aber am schlimmsten ist eindeutig: http://www.c-programmieren.com/
    Dort werden auch so nette Sachen wie fflush(stdin) oder system("cls") gezeigt.
    Ich hoffe es ist noch nicht zu spät dir das zu sagen 🙂



  • achja und ganz wichtig: Zeichen oberhalb des 7-bit-Satzes (also inbsbesondere ä,ö,ü,Ä,Ö,Ü,ß) unterliegen auch nicht der Normung, weshalb es auf ganz bestimmten Rechnern möglicherweise nicht so funktionieren könnte, wie du es dir gedacht hast. 🤡



  • Rechne in Cent und Ganzzahlen (int), damit vermeidest du Rundungsfehler

    Verzichte auf die Umlaute. Die sind für die Funktion des Programms nicht wichtig.

    Benutze eigene Funktionen.

    atoi erwarten als Argument einen C-String (Adresse eines Nullterminierte Zeichenfolge)
    Die hast du nicht (oder nur durch Zufall)
    Zum einlesen von Zahlen nimmt man i.A scanf

    andy_f schrieb:

    Will mir Schritt für Schritt C aneignen und mir dann C++ geben.

    Der Weg ist nicht gut. C behindert dich bei C++.
    C++ hat zwar (sehr) ähnlich Anweisungen wie C, in C++ wird aber anders "gedacht".



  • So, fertig...

    #include <stdio.h>
    #include <math.h>
    
    void main(void)
    {
    	int anzahl_fahrkarten;
    	double forderung;
    	double fahrkarten_preis = 1.60;
    	char neuauswahl;
    	double eingabe;
    
    	do{
    
    		printf("Wieviele Fahrkarten wuenschen Sie: \n\n");
    		scanf_s("%i", &anzahl_fahrkarten);
    		fflush(stdin);
    
    		forderung = anzahl_fahrkarten * fahrkarten_preis;
    
    		do{
    
    			printf("Moechten Sie wirklich: %i kaufen fuer zusammen %.2lf \n\n", anzahl_fahrkarten, forderung);
    
    			printf("Ticketanzahl aendern (j = ja, n = nein)?\n");
    
    			neuauswahl = getchar();
    			fflush(stdin);
    
    		} while (!(neuauswahl == 'j' || neuauswahl == 'n'));
    
    	} while (neuauswahl == 'j');
    	fflush(stdin);
    
    	do{
    
    		forderung = round((forderung * 100)) / 100;
    		printf("Bitte zahlen Sie nun %.2lf Euro\n", forderung);
    		scanf_s("%lf", &eingabe);
    		fflush(stdin);
    
    		forderung = forderung - eingabe;
    
    	} while (forderung > 0); 
    	fflush(stdin);
    
    	forderung = forderung * (-1); 
    
    	printf("Sie erhalten %lf Euro zurück\n", forderung);
    
    	if (forderung > 0);
    	{
    		printf("\n\n");
    
    		while (forderung >= 0.5)
    		{
    			printf("50 Cent\n", forderung);
    			forderung -= 0.5;
    			//printf("%lf\n", forderung);
    			forderung = round((forderung * 100)) / 100;
    		}
    
    		while (forderung >= 0.2)
    		{
    			printf("20 Cent\n", forderung);
    			forderung -= 0.2;
    			forderung = round((forderung * 100)) / 100;
    		}
    
    		while (forderung >= 0.05)
    		{
    			printf("5 Cent\n", forderung);
    			forderung -= 0.05;
    			forderung = round((forderung * 100)) / 100;
    		}
    
    		while (forderung >= 0.01)
    		{
    			printf("1 Cent\n", forderung);
    			forderung -= 0.01;
    			forderung = round((forderung * 100)) / 100;
    		}
    
    	}
    
    	printf("\n\nTicketausgabe:\n\n\n\n");
    
    	while (anzahl_fahrkarten > 0)
    
    	{
    		printf("\t\t\t-----------\n");
    		printf("\t\t\t|Fahrkarte|\n");
    		printf("\t\t\t|         |\n");
    		printf("\t\t\t|  O   O  |\n");
    		printf("\t\t\t|    |    |\n");
    		printf("\t\t\t|  x   x  |\n");
    		printf("\t\t\t|   xxx   |\n");
    		printf("\t\t\t|         |\n");
    		printf("\t\t\t-----------\n\n\n\n");
    		anzahl_fahrkarten--;
    	}
    }
    


  • Gewöhne dir mal an, die C-Codetags zu benutzen.
    Gewöhne dir mal an, die hier gegebenen Hinweise auch zu beachten d.h. dein Programm entsprechend anzupassen.
    Deine jetzige Version ist genauso Schrott wie vorher, da du die Hinweise nicht aufgenommen hast.


Anmelden zum Antworten