Seite 1 von 1

Aufgabenstellung C. Dauerschleife?

Verfasst: Mi Nov 18, 2015 2:11 pm
von greecly
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");
}

Re: Aufgabenstellung C. Dauerschleife?

Verfasst: Mi Nov 18, 2015 4:14 pm
von Nemo
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.

Re: Aufgabenstellung C. Dauerschleife?

Verfasst: Mi Nov 18, 2015 4:29 pm
von Xin
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... ^^

Re: Aufgabenstellung C. Dauerschleife?

Verfasst: Mi Nov 18, 2015 4:30 pm
von greecly
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