Problem mit einem C-Programm (11. Klasse)



  • Ich kenn mich noch nicht wirklich in C aus und kann auch nur daher das verwenden, was wir im Unterricht gemacht haben. Uns wurde vieles nicht genau erklärt, daher solch ein Code der für euch recht komisch erscheinen wird. ^^
    Ich kann bloß auf das zurückgreifen was wir in unserem Unterricht verwendet wurde.

    Das einzige was wir bis jetzt programmiert hatten war ein Basisrechner, der auf diesen Codes basiert.

    Gibt es Wege die Fehler mit kleinen Änderungen auszubessern?

    Danke schonmal für alle Antworten und sorry das ich's in das falsche Forum gepostet habe.

    Grüße,
    allied



  • Lies die mehrwertsteuer mit scanf ein. Dazu ist es da.

    Die Zeichenliterale musst du dann noch in Zahlenliterale umändern. ('7' zu 7)



  • Hab die "Literale" schon weggenommen, dann erkennt er es nichtmehr und die 7 geht auch nichtmehr. 😕



  • allied schrieb:

    Hab die "Literale" schon weggenommen, dann erkennt er es nichtmehr und die 7 geht auch nichtmehr. 😕

    Das etwas lockere "umändern" bedeutet nicht "weglassen" sondern eher eine Funktion aufrufen, die sowas macht. Hier käme z.B. atoi() infrage.



  • merano schrieb:

    Hier käme z.B. atoi() infrage.

    Aber nicht, wenn er die Zeichen mit getchar einliest.
    @allied
    getchar liest einzelne Zeichen ein. Und das Zeichen das die 7 darstellt ('7') hat einen anderen Wert als 7.

    Daher ist getchar die falsche Funktion dafür. Vor allem, weil die 19 auch aus zwei Zeichen besteht.

    DirkB schrieb:

    Lies die mehrwertsteuer mit scanf ein.

    Sonst zeig nochmal deinen aktuellen Code.



  • scanf("%d",&mehrwertsteuer);fflush(stdin);
    

    jetzt greift aber der switch nichtmehr ein und es nimmt jeden prozentsatz

    und ausrechnen tut es mir das ergebnis immer noch nicht



  • Das wird nur noch ein rumgerate.

    DirkB schrieb:

    Sonst zeig nochmal deinen aktuellen Code.



  • Also er nimmt jetzt die 7 und die 19. (:

    Wenn ich <iostream> rausnehme geht das system("Pause") aber nichtmehr

    #include "targetver.h"
    #include <stdio.h>
    #include <tchar.h>
    #include <conio.h>
    #include <iostream>
    
    int main(void)
    {
    							//lokale Variablen definieren
    	int mehrwertsteuer;	//Festkommazahl bzw. Ganzzahldatentyp
    	float ergebnismehrwertsteuer;
    	float ergebnisnettowert;
    	float bruttowert;			//Gleitkommazahlen bzw. Fließkommadatentypen
    	unsigned char weiter;	//Zeichendatentyp für Tastencodes
    	int fehler;				//0:kein Fehler, 1:Fehler 1, 2:Fehler 2
    
    	//BS <- Überschrift, Beschreibung //BS...Bildschirm
    	printf("\nB R U T T O   Z U   N E T T O   R E C H N E R   Version 1.0 von J.-P. Meinert\n");
    	printf("\n\rDer Rechner verarbeitet zwei Flie%ckommazahlen mit",225);
    	printf("\n\rden Mehrwertsteuers%ctzen 7%c und 19%c.",132,37,37);
    	printf("\n\rAls Erstes geben Sie den Bruttowert ein, danach den gew%cnschten Prozentsatz.",129);
    	printf("\n\rAnschlie%cend wird das Ergebnis angezeigt.",225);
    	printf("\n\rAlle Eingaben sind mit ENTER zu best%ctigen.",132);
    	printf("\n\rAnsonsten wird das Programm beendet.\n");
    
    	do
    	{
    								// BS <- "Bruttowert: "
    		printf("\n\tBruttowert: ");
    								//operand1 <- TASTATUR
    		scanf("%d",&bruttowert);fflush(stdin);	//Einlesen und Tastaturpuffer löschen
    								//BS <- "Mehrwertsteuersatz 7% oder 19%: "
    		printf("\t\nMehrwertsteuersatz 7%c oder 19%c: ",37,37);
    		do
    		{
    								//mehrwertsteuer <- TASTATUR //!!!Fehleingaben abfangen
    		scanf("%d",&mehrwertsteuer);fflush(stdin);
    			}while(!((mehrwertsteuer==7) || (mehrwertsteuer==19)));
    
    								//Mehrfachauswahl zur Verarbeitung der Rechenoperation
    		switch(mehrwertsteuer)
    		{
    			case 7: //Mehrwertsteuer 7%
    					  ergebnismehrwertsteuer=(float)bruttowert / (int)107 * (int)7;
    					  ergebnisnettowert=(float)bruttowert / (int)107 * (int)100;
    					  break;
    			case 19: //Mehrwertsteuer 19%
    					  ergebnismehrwertsteuer=(float)bruttowert / (int)119 * (int)19;
    					  ergebnisnettowert=(float)bruttowert / (int)119 * (int)100;
    					  break;
    		}
    
    		printf("\n\tErgebnis Mehrwertsteuer: %.2f",ergebnismehrwertsteuer);
    		printf("\n\tErgebnis Nettowert: %.2f",ergebnisnettowert);
    
    		//BS-Ausgabe
    	printf("\n\n\tUm eine neue Rechnung zu starten, Taste ENTER dr%ccken, sonst beenden.\n",129);
    	//weiter <- Tastatur
    	weiter=getch();fflush(stdin); //Tastaturpuffer löschen
    	printf("\n\t---------------------------------------------------------------------\n");
    
    	}while(weiter==13);
    
    	system("PAUSE");
    	return 0;
    }
    


  • Die Mehrwertsteuer hast du jetzt als Zahlenwert. Da brauchst du das switch gar nicht.

    ergebnismehrwertsteuer = bruttowert / (100+mehrwertsteuer) * mehrwertsteuer;
                          ergebnisnettowert      = bruttowert / (100+mehrwertsteuer) * 100;
    

    Die casts brauchst du da auch nicht, da sie nichts verändert haben.
    (und bruttowert auch schon ein Fleißkommatyp ist)

    iostream ist übrigens C++. Du programmierst aber C.

    Und system brauchst du nicht. Führe das Programm in der Konsole (CMD-Fenster) aus und es geht.
    Für C ist system in der stdlib.h



  • Das macht auf jedenfall Sinn 😃

    Aber ausrechnen tut es immer noch nicht 😕

    #include "targetver.h"
    #include <stdio.h>
    #include <tchar.h>
    #include <conio.h>
    
    int main(void)
    {
    							//lokale Variablen definieren
    	int mehrwertsteuer;	//Festkommazahl bzw. Ganzzahldatentyp
    	float ergebnismehrwertsteuer;
    	float ergebnisnettowert;
    	float bruttowert;			//Gleitkommazahlen bzw. Fließkommadatentypen
    	unsigned char weiter;	//Zeichendatentyp für Tastencodes
    	int fehler;				//0:kein Fehler, 1:Fehler 1, 2:Fehler 2
    
    	//BS <- Überschrift, Beschreibung //BS...Bildschirm
    	printf("\nB R U T T O   Z U   N E T T O   R E C H N E R   Version 1.0 von J.-P. Meinert\n");
    	printf("\n\rDer Rechner verarbeitet zwei Flie%ckommazahlen mit",225);
    	printf("\n\rden Mehrwertsteuers%ctzen 7%c und 19%c.",132,37,37);
    	printf("\n\rAls Erstes geben Sie den Bruttowert ein, danach den gew%cnschten Prozentsatz.",129);
    	printf("\n\rAnschlie%cend wird das Ergebnis angezeigt.",225);
    	printf("\n\rAlle Eingaben sind mit ENTER zu best%ctigen.",132);
    	printf("\n\rAnsonsten wird das Programm beendet.\n");
    
    	do
    	{
    								// BS <- "Bruttowert: "
    		printf("\n\tBruttowert: ");
    								//operand1 <- TASTATUR
    		scanf("%d",&bruttowert);fflush(stdin);	//Einlesen und Tastaturpuffer löschen
    								//BS <- "Mehrwertsteuersatz 7% oder 19%: "
    		printf("\t\nMehrwertsteuersatz 7%c oder 19%c: ",37,37);
    
    		do
    		{
    								//mehrwertsteuer <- TASTATUR //!!!Fehleingaben abfangen
    		scanf("%d",&mehrwertsteuer);fflush(stdin);
    			}while(!((mehrwertsteuer==7) || (mehrwertsteuer==19)));
    
    		ergebnismehrwertsteuer = bruttowert / (100+mehrwertsteuer) * mehrwertsteuer; 
            ergebnisnettowert = bruttowert / (100+mehrwertsteuer) * 100;
    
    		printf("\n\tErgebnis Mehrwertsteuer: %.2f",ergebnismehrwertsteuer);
    		printf("\n\tErgebnis Nettowert: %.2f",ergebnisnettowert);
    
    		//BS-Ausgabe
    	printf("\n\n\tUm eine neue Rechnung zu starten, Taste ENTER dr%ccken, sonst beenden.\n",129);
    	//weiter <- Tastatur
    	weiter=getch();fflush(stdin); //Tastaturpuffer löschen
    	printf("\n\t---------------------------------------------------------------------\n");
    
    	}while(weiter==13);
    
    	return 0;
    }
    


  • Du bist ein unbelehrbarer Noob.
    Dein Code ist genauso Schrott wie zu Beginn.
    Du hast alle hier gegebenen Hinweise nicht beachtet und wunderst dich, dass dein Schrottprogramm nach wie vor nicht läuft.
    Ich empfehle allen Hilfestellern hier aus dem Grund, dir nicht weiter zu helfen.



  • Wutz schrieb:

    Ich empfehle allen Hilfestellern hier aus dem Grund, dir nicht weiter zu helfen.

    Einen noch: Zweite Antwort, dritte Zeile.


Anmelden zum Antworten