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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2005-09-22 20:26:56

  anonimek - Członek DUG

anonimek
Członek DUG
Skąd: Alwernia
Zarejestrowany: 2005-06-13

Jak to poprawic

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

 

#2  2005-09-22 20:39:18

  voti - Votisław Naczelnik

voti
Votisław Naczelnik
Zarejestrowany: 2004-04-18
Serwis

Re: Jak to poprawic

Napisz to od nowa ;)


Registered Linux User #383763
[url=http://dug.net.pl/][img]http://voti.dug.net.pl/dug_mini.png[/img][/url]
[url=http://www.upr.org.pl/][img]http://www.upr.org.pl/main/grafika/mala_flaga.png[/img][/url]

Offline

 

#3  2005-09-23 03:36:09

  rk_ - Użytkownik

rk_
Użytkownik
Zarejestrowany: 2005-09-01

Re: Jak to poprawic

* pierwsze uno:

Kod:

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

Kod:

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

Kod:

if(n==4) break;

i musialbys wywalic exit(1) z case 4;

* piate uno
jakos dziwnie wyglada stosowanie continue w switchu :/

Kod:

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:

Kod:

print("n za petla n");

powinno byc:

Kod:

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:

Kod:

#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:

Kod:

#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

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.006 seconds, 9 queries executed ]

Informacje debugowania

Time (s) Query
0.00011 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00101 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='18.188.152.162' WHERE u.id=1
0.00064 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.188.152.162', 1714947544)
0.00053 SELECT * FROM punbb_online WHERE logged<1714947244
0.00064 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.00127 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.00062 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=1648
Total query time: 0.00493 s