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
Time (s) | Query |
---|---|
0.00015 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00104 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.147.82.252' WHERE u.id=1 |
0.00085 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.147.82.252', 1732399467) |
0.00042 | SELECT * FROM punbb_online WHERE logged<1732399167 |
0.00069 | SELECT topic_id FROM punbb_posts WHERE id=13933 |
0.00004 | SELECT id FROM punbb_posts WHERE topic_id=1648 ORDER BY posted |
0.00088 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=1648 AND t.moved_to IS NULL |
0.00007 | SELECT search_for, replace_with FROM punbb_censoring |
0.00128 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=1648 ORDER BY p.id LIMIT 0,25 |
0.00077 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=1648 |
Total query time: 0.00624 s |