Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Oto moj progamik (bardzo prosty)
#include <stdio.h>
# define N 10
void wypisz (int *t)
{ int k;
for(k=0;k<N;k++)
printf(" %d ,",t[k]);
puts("");
}
void fill(int *t,int z)
{ int k;
for(k=0;k<N;k++)
*(t+k)=k*z;
}
main()
{ int i,j;
int t[N],s[N];
int n;
while(1)
{
printf("n 1 -wypisz t n 2 wypisz s n 3 inny n 4 koniec n" );
scanf("%d",&n);
switch(n)
{ case 1 :
fill(t,1);
wypisz(t);
break;
case 2 :
{ fill(s,-1);
wypisz(s);
continue;
}
case 3: puts("dalej");
continue ;
case 4: puts("koniec");
exit(1);
}
}
print("n za petla n");
}
///
Problem :
Czemu po break nie jest opuszcza petla i nie nie wyswietli sie napis "za petla" . po exit(1) wyjde z progrmu , po continue powinienem wrocic do petli , a po break powinna sie wykonywac nastepna instrukacja za petla while(1)
Jak to poprawic ,nie chce uzywac go to
Offline
Napisz to od nowa ;)
Offline
* pierwsze uno:
Czemu po break nie jest opuszcza petla i nie nie wyswietli sie napis "za petla"
break w switch'u powoduje przerwanie switcha, a nie przerwanie petli, tzn napotykajac instrucje break konczysz wykonywanie operacji zawartych w danym case'ie i powracasz, w tym wypadku do swojego "scanf("%d",&n)" i znowu idziesz do switcha.
* drugie uno
po exit(1) wyjde z progrmu , po continue powinienem wrocic do petli , a po break powinna sie wykonywac nastepna instrukacja za petla while(1)
exit(1) powoduje natychmiastowe opuszczenie programu bez wykonywania instrukcji nastepujacych po nim, a continue oznacza jak sama nazwa wskazuje, ze chcesz cos kontunuowac, w naszym przypadku chcesz kontynuowac wykonywania whila i scanfa. a co do break'a j/w.
* trzecie uno
Lepszym rozwiazaniem byloby tutaj uzycie petli do-while, z okreslonym warunkiem n!=4, i wtedy gdy n==4, wyonasz instrukcje zawarte w case 4, oraz zakonczysz dzialanie petli i wyswietlisz to co znajduje sie poza petla.
* czwarte uno
while(1) oznacza petle nieskonczona i jesli chcesz ja przerwac to po switchu powinienes dodac jeszcze
if(n==4) break;
i musialbys wywalic exit(1) z case 4;
* piate uno
jakos dziwnie wyglada stosowanie continue w switchu :/
switch(zmienna) { case 1: cout<<"zm==1"; break; case 2: cout<<"zm==2"; break; case 3: cout<<"zm==3"; case 4: cout<<"zm==4";break; default: cout<<"zm!=1 && zm!=2 && zm!=3 && zm!=4 " }
celowo pominale break przy case 3. po wczytaniu zmiennaj zachodzi taki warunek, iz jesli zm==1,2 lub 4 to wyswietli sie komunikat przy danym case, lecz jesli zm==3 to wyswietli sie nam "zm==3zm==4" a to dlatego ze nie przerwalismy ~instrukcji.
*szoste uno
jest:
print("n za petla n");
powinno byc:
printf("n za petla n");
*siodme uno
w sumie uzywanie {} w switchu nie jest bledem, ale nie jest potrzebne
*osme uno
przeczytaj jeszcze jakis kurs ;) (nie to, zebym cos mowil, ale na wskaznikach umiesz operowac, to dlaczego takie glupie byki robisz ;-))
*dziewiate uno
troche pozno jest wiec moge mamrotac, jak sa bledy to z gory przepraszam
*dziesiate uno-bonus
kod 1 z breake w while:
#include <stdio.h> # define N 10 void wypisz (int *t) { int k; for(k=0;k<N;k++) printf(" %d ,",t[k]); puts(""); } void fill (int *t,int z) { int k; for(k=0;k<N;k++) *(t+k)=k*z; } main () { int n,i,j; int t[N],s[N]; while (1) { printf("n 1 -wypisz t n 2 wypisz s n 3 inny n 4 koniec n" ); scanf("%d",&n); switch(n) { case 1 : fill(t,1); wypisz (t); break; case 2 : fill(s,-1); wypisz (s); break; case 3: puts("dalej"); break; case 4: puts("koniec"); break; default: puts("uzywaj klawiszy [ 1 2 3 4 ] "); } if (n==4) break; else continue; //tutaj continue jest zbedne, ale uzylem dla zobazowania jak dziala } printf("n za petla n"); }
kod 2 z petla do-while:
#include <stdio.h> # define N 10 void wypisz (int *t) { int k; for(k=0;k<N;k++) printf(" %d ,",t[k]); puts(""); } void fill (int *t,int z) { int k; for(k=0;k<N;k++) *(t+k)=k*z; } main () { int n,i,j; int t[N],s[N]; do{ printf("n 1 -wypisz t n 2 wypisz s n 3 inny n 4 koniec n" ); scanf("%d",&n); switch(n) { case 1 : fill(t,1); wypisz (t); break; case 2 : fill(s,-1); wypisz (s); break; case 3: puts("dalej"); break; case 4: puts("koniec"); break; default: puts("uzywaj klawiszy [ 1 2 3 4 ] "); } } while (n!=4); printf("n za petla n"); }
ps. sorry ;)
Offline