system
(system)
14 Czerwiec 2010 13:07
#1
Witam piszę program i chciałbym aby po wykonaniu obliczeń program nie wyłączał się ale wrócił do początku. Jak mam to zrobić. Pod spodem załączam kod
#include
int main()
{
printf(“Jak chcesz wykonac program \n 1.for\n 2.while \n 3 do while”);
int ile;
scanf("%d", &ile);
printf(“Podaj x, xk oraz dx \n”);
int x, xk, dx;
scanf("%d", &x);
scanf("%d", &xk);
scanf("%d", &dx);
switch(ile)
{case 1:
for(x; x
{
int x1, x2;
x1=x*x;
x2=x*x*x;
printf("%d, %d, %d \n", x, x1, x2 );
return 0;
}
case 2:
while(x<=xk)
{
int x1, x2;
x1=x*x;
x2=x*x*x;
printf("%d, %d, %d \n", x, x1, x2 );
x=x+dx;
}
case 3:
do{
int x1, x2;
x1=x*x;
x2=x*x*x;
printf("%d, %d, %d \n", x, x1, x2 );
x=x+dx;
return 0;
}while(x
}
}
_alex
([alex])
14 Czerwiec 2010 13:15
#2
Wziąć to wszystko w pętle:
while(true) { ... } [/code]
No i powywalać return 0; zamiast tego break; na końcu każdego case.
scripter1
(scripter1)
14 Czerwiec 2010 13:27
#3
A czy przypadkiem użycie break na końcu każdego case nie spowoduje przerwania wykonywania dalszej części kodu po przetworzeniu danego case i zakończenia działania całego programu?
system
(system)
14 Czerwiec 2010 13:29
#4
Na końcu dałem return main(); i podziałało. Jest jeszcze jakaś możliwość?
_alex
([alex])
14 Czerwiec 2010 16:03
#5
To co zrobiłeś jest bez sensu, rekurencyjnie wywołujesz main(), będzie działać kilka razy dopóki stos się nie przepełni.
Opisałem wyżej jedyną sensowną możliwość, jak nie pasują ci sensowne to kombinuj w kierunku bezsensownych, np goto
scripter1 , break w ramach case oznacza zakończenie działania tego case.
bl3
(bl3)
14 Czerwiec 2010 16:18
#6
int main()
{
do{
...
cout<<"Kontynuowac? [T/n] ";
}while(toupper(getch())!='N');
return0;
}
i w case zamiast return 0 powinno byc break…
Jak coś toupper jest w bibliotece ctype.h
system
(system)
14 Czerwiec 2010 17:40
#7
No z while(true) działa poprawnie
A dlaczego goto bezsensu?
_alex
([alex])
14 Czerwiec 2010 20:18
#8
Dla tego że to samo można zrobić w sposób czytelny.