Aufgabenstellung C. Dauerschleife?

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
greecly
Beiträge: 2
Registriert: Mi Nov 18, 2015 2:01 pm

Aufgabenstellung C. Dauerschleife?

Beitrag von greecly » Mi Nov 18, 2015 2:11 pm

Hey Leute, bin neu hier und nicht gerade ein experte in Sachen programmieren und werde das Forum vermutlich noch öfters nutzen da ich in der Zukunft wahrscheinlich noch mehr Probleme haben werde was das angeht :?

Also mein Problem:
Im Folgenden Code habe ich mit meiner for-schleife ein Problem denke ich. Wenn ich das Programm mit dem Debugger durchgehe bleibt dieser in der schleife endlos hängen und wiederholt diese von neuem auch nach Ablauf der Abbruchbedingung. Vll sieht jemand den Fehler :-/. Die beiden else Bedingungen am Ende funktionieren :geek:

Code: Alles auswählen

int main()

{
	int eingabe, zvst, i, zvst2;
	double p, steuer = 0.0, steuersumme = 0.0;

	printf("\t\tSTEUERRECHNER\n\n");
	printf("Bitte Geben Sie Ihren Betrag in ganzen Euros ein: ");
	scanf_s("%d", &eingabe);

	if (eingabe > 10000) {

		zvst = eingabe - 10000;
		zvst2 = zvst % 200;
		zvst = zvst / 200;


		if (zvst > 0) {
			for (i = 1; i < zvst + 1; i++){

				for (p = 0.05; p < 0, 50; p = p + 0, 002) {

					steuer = 200 *p;
					steuersumme = steuersumme + steuer;
				}
			}
			steuersumme = steuersumme + (zvst2*(0.05 + ((zvst + 1)*0.002)));
			printf("Fuer den Betrag %d Euro muessen Sie %.f Euro an Steuern zahlen.\n\n", eingabe,steuersumme);

		}
		else

		printf("Fuer den Betrag %d Euro muessen Sie %.0f Euro an Steuern zahlen.\n\n", eingabe, zvst2*0.05);
	}
	else
		printf("Ihr Betrag ist Steuerfrei.\n\n");


	system("pause");
}

Nemo
Beiträge: 37
Registriert: Sa Mär 02, 2013 3:18 pm

Re: Aufgabenstellung C. Dauerschleife?

Beitrag von Nemo » Mi Nov 18, 2015 4:14 pm

greecly hat geschrieben:Hey Leute, bin neu hier und nicht gerade ein experte in Sachen programmieren und werde das Forum vermutlich noch öfters nutzen da ich in der Zukunft wahrscheinlich noch mehr Probleme haben werde was das angeht :?
Dafür ist das Forum doch da ;)

Code: Alles auswählen

for (p = 0.05; p < 0.50; p = p + 0.002)
Man muss Dezimalzahlen immer mit Punkt angeben.

Ich würde mir aber den Algorithmus trotzdem noch mal ansehen. Die Ergebnisse, die ich bekommen habe, sind nicht sehr vertrauenserweckend.

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

Re: Aufgabenstellung C. Dauerschleife?

Beitrag von Xin » Mi Nov 18, 2015 4:29 pm

Nemo hat ja schon erklärt, wo der Fehler ist:
greecly hat geschrieben:

Code: Alles auswählen

				for (p = 0.05; p < 0, 50; p = p + 0, 002) {
Nur der Vollständigkeit halber: Was passiert hier eigentlich?

p < 0,50 bedeutet, dass der Wert nach dem Komma-Operator genommen wird. p < 0 ist false, also 0 und 50 ist 50. Der rechte Operand vom Komma wird genommen (p<0,50) ist also 50. 50 ist nicht 0, also true: Endlosschleife.
p selbst verändert wich auch nicht, weil p ist p+0, gefolgt von einem Komma-Operator, der als rechtes Argument 2 hat, also 2 zurückliefert, was an der Stelle aber auch keinen interessiert, da mit dem 3. Parameter von for nichts gesteuert wird.

Ich weiß, dass Du das scanf nicht hier gelernt hast... ^^
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.

greecly
Beiträge: 2
Registriert: Mi Nov 18, 2015 2:01 pm

Re: Aufgabenstellung C. Dauerschleife?

Beitrag von greecly » Mi Nov 18, 2015 4:30 pm

erstmal danke :) hätte es wohl nach weitern 1000 mal durchschauen nicht gesehen :idea:

und du hast recht, hab jetzt die zwei schleifen zusammen geworfen und die i <zvst in i<=zvst geändert :)
jetzt passen die Werte :geek:

danke nochmal :D

@xin: dir auch danke, Erklärungen höre ich mir immer gerne an. Mann soll ja auch lernen WIE etwas funktioniert und nicht nur wie :)
danke dir

Antworten