C++ do while schleife, bitte um kleine Hilfe

***XXX***

Banned
Registriert
Sep. 2008
Beiträge
603
Hallo
Ich habe n kleines Verstnändnisproblem bei do while schleife. Wie die schleife funktioniert weiss ich aber in der praxis habe ich noch schwierigkeiten umzusetzen.
hier die aufgabestellung im Seminar

/* 1. In einem Geschäft wurden an einem Tag von mehreren Artikeln 'anz' Stück bei einem
Preis von 'p' EUR verkauft, beides ist jeweils einzulesen. Bei Eingabe negativer Werte
ist die Eingabe zu wiederholen! Die Eingabe wird beendet, wenn als Preis 0 eingegeben
wird! Es sind zu ermitteln: der Gesamtumsatz des Geschäftes an diesem Tag, die Anzahl
der verschiedenen Artikel, die Anzahl der verkauften Artikel, die im Mittel verkaufte
Stückzahl sowie der billigste Artikel und sein Preis. */

Lösung:

#include <stdlib.h>
#include <stdio.h>
#pragma warning(disable:4996)

int main()
{
int n=0,anz,i_min,summe=0;
float p,anz_mittel,p_ges=0,p_min;

BIS DAHIN KEIN PROBLEM

ich verstehe nur nicht was diese while (1) auf sich hat, vielleicht kann jemand mir auf die Sprünge helfen. Außerdem ist es mir völlig räselhaft warum bei while(anz<0) und while(p<0) die variablen um 1 erhöht werden :(


do
{
do
{
printf(" Anzahl der verkauften Artikel vom Typ %i : ",n+1);
scanf("%i",&anz);
}
while(anz<0);

do
{
printf(" Preis von Artikeltyp %i : ",n+1);
scanf("%f",&p);
}
while(p<0);

if(p==0)
{
break;
}

p_ges+=anz*p;
summe+=anz;

if((n==0)||(p<p_min))
{
i_min = n;
p_min = p;
}
n++;
}
while(1);

anz_mittel=(float) summe/n;

printf(" Insgesamt wurde heute ein Umsatz von %.2f Euro erzielt\n",p_ges);
printf(" Es wurden %i Artikel in %i Artikelgruppen verkauft\n",summe,n);
printf(" Im Mittel waren es %.2f pro Artikelgruppe\n",anz_mittel);
printf(" Der guenstigste Artikel war %i mit %.2f Euro\n\n ",i_min+1,p_min);

system("PAUSE");
return 0;
}
 
Zuletzt bearbeitet:
Ich habe zwar kein C++ gelernt, aber:

Der Code in einer While-Schleife wird solange ausgeführt bis die Bedingung dafür nichtmehr erfüllt ist. Und wenn die Bedingung ein Variablenwert ist, dann muss sich dieser in der Schleife ändern, sonst bleibt das Programm stehen.
 
das ist mir klar, nur in der Umsetzung happert's, hier hat man do while schleifen in einer do while schleife, das macht die sache für nen anfänger für mich nicht gerade leichter

ich warte hier auf experten meinung :D
 
Dann hau mal Einrückungen rein, hab´ mich schon gewundert wieso mir das so unübersichtlich vorkommt. oO
 
ähm ich kann dir das als autoit scripten. Ist das ne übung oder en Projekt, bei dem es nur auf das "funktionen" ankommt?
 
Hi,

eine do-while-Schleife unterscheidet sich von einer while-Schleife darin, dass erstere immer mindestens einmal ausgeführt wird, d.h. die Bedingung wird erst nach dem Durchlauf überprüft.

Bei while(1) steht die 1 für den Wahrheitswert true, d.h. es ist eine Endlosschleife. In deinem Programm wird sie durch den Befehl

if(p==0)
{
break;
}

beendet. Die Bedingung für den Abbruch wird also explizit im Schleifenrumpf angegeben.
 
ja es läuft
 
@Zonk!

Grundsätzlich ja, aber in diesem Beispiel würde dann (mit dem Weglassen des break) der Teil des Schleifenrumpfes nach der break-Anweisung noch ausgeführt, was hier nicht erwünscht ist.

Mit dem break wird der Schleifenrumpf vorzeitig beendet, ohne alle Anweisungen auszuführen.
 
Zurück
Oben