Forum » Programiranje » [C] switch (case) stavek
[C] switch (case) stavek
TheCyborg ::
Pozdravljeni!
Tukaj pri tem stavku se je pojavila napaka. Dva programa sem združil, ter da s pomočjo switch stavka preklapljam med njima. Problem se pojavi, kadar grem iz prvega programa (z 0) ven, ter želim vstopiti v drugi program, ter sploh ne zagrabi. Če pa na začetku stopim v 2. program ga pa nekaj zmeša..., programi samostojno delujejo. Spodaj je pa source.
Tukaj pri tem stavku se je pojavila napaka. Dva programa sem združil, ter da s pomočjo switch stavka preklapljam med njima. Problem se pojavi, kadar grem iz prvega programa (z 0) ven, ter želim vstopiti v drugi program, ter sploh ne zagrabi. Če pa na začetku stopim v 2. program ga pa nekaj zmeša..., programi samostojno delujejo. Spodaj je pa source.
#include <stdio.h> #include <stdlib.h> int main(void) { /* int main */ double p; int x; int s; int poz; int v; int izbira; s=v=poz=0; for(;;) { /* for neskoncni */ printf("1.Program1\n2.Program2\n"); scanf("%d",&izbira); switch(izbira) { /* switch */ case 1: { /* case1 */ while(1) { /* while */ printf("\nVnesi stevilo: "); scanf("%d",&x); s++; if(!x) break; if(x<0) continue; v=v+x; poz++; p=(double)v / poz; printf("\nDosedaj prebranih %d stevil, pozitivnih %d\n",s,poz); printf("Njihovo povprecje je %0.2lf",p); } /* while */ } /* case1 */ case 2: { /* case2 */ while(x!=0) { /* while */ printf("\nVnesi stevilo: "); scanf("%d",&x); s++; if(x<=0) { } if(x>0) { /* if */ v=v+x; poz++; p=(double)v / poz; printf("\nDosedaj prebranih %d stevil, pozitivnih %d\n",s,poz); printf("Njihovo povprecje je %0.2lf",p); break; } /* if */ }/*while */ } /* case2 */ } /* switch */ } /* for neskoncni */ system("pause"); return 0; } /*int main */
kihc ::
Tako na hitro pogledano ti manjka v switchu default izjava (kaj se zgodi, če nobeden od pogojev ne ustreza).
x
zerox ::
V 2. program vstopiš normalno ...vendar se ne zgodi nič, ker si x v 1. programu nastavil na 0 ... vrjetno je tu napaka ;)
case 2:
{ /* case2 */
while(x!=0)
{ /* while */
... daj recimo pred while(x!=0) x=1; or whatever :)
lp
case 2:
{ /* case2 */
while(x!=0)
{ /* while */
... daj recimo pred while(x!=0) x=1; or whatever :)
lp
TheCyborg ::
@JACK1: Tvoj odgovor mi ni nič pomagal (se morš poglobit), tako da prosim naslednjič se takšnih postov izogibaj.
@zerox: Hvala ti, tisti x=1; me sedaj pošlje v 2 program, ampak se pojavijo nove napake. Iz prvega programa, grem ven samo tako, da 2x vnesem "0", iz drugega pa tako da samo enkrat vnesem "0" (kar je prav). In pa "poz", mi steje od obeh. Se pravi, v prvem programu vnese 3 stevila, pa grem v drugega, bo štelo da sem vnesel, ne prvo stevilo, ampak 4 (četrto), ter tako naprej. Tisti poz, bi mora samostojno stati za vsak program posebej. Sm poskusil že deklarirati "int poz1", vendar ni delovalo, ali pa sm kej zamešal.
lp, Cyborg
@zerox: Hvala ti, tisti x=1; me sedaj pošlje v 2 program, ampak se pojavijo nove napake. Iz prvega programa, grem ven samo tako, da 2x vnesem "0", iz drugega pa tako da samo enkrat vnesem "0" (kar je prav). In pa "poz", mi steje od obeh. Se pravi, v prvem programu vnese 3 stevila, pa grem v drugega, bo štelo da sem vnesel, ne prvo stevilo, ampak 4 (četrto), ter tako naprej. Tisti poz, bi mora samostojno stati za vsak program posebej. Sm poskusil že deklarirati "int poz1", vendar ni delovalo, ali pa sm kej zamešal.
lp, Cyborg
Zgodovina sprememb…
- spremenil: TheCyborg ()
TheCyborg ::
Joj, pa se mi je zdelo da rabm break, sam ga nism postavil na pravo mesto. Js sm ga dal v while zanki, pa mi je potem takoj zaključilo program. Tako sm ga pa dal izven while zanke, se pravi predno sm zaključil case stavek.
Thnx, Quikee
Ampak, "poz", mi pa se vseeno steje od obeh. Ne steje mi posamezno. Ampak bom ze pogruntal, vendar ce kdo ve, lahko napise
lp, Cyborg
Thnx, Quikee
Ampak, "poz", mi pa se vseeno steje od obeh. Ne steje mi posamezno. Ampak bom ze pogruntal, vendar ce kdo ve, lahko napise
lp, Cyborg
Zgodovina sprememb…
- spremenil: TheCyborg ()
zerox ::
Čisto logično je, da ti "šteje poz od obeh", saj imaš tako sprogramirano (na začetku inicializiraš spremenljivko potem pa jo ves čas samo povečuješ v obeh primerih)
Zato pa nastavi poz v vsakem case stavku na 0 ali pa imej za 2. primer drugo spremenljivko (če hočeš ves čas hraniti poz. za vsakega).
Mislim da bo treba vzet v roke kakšno knjigo o osnovah programiranja in si malo stvari prebrat od začetka .
Zato pa nastavi poz v vsakem case stavku na 0 ali pa imej za 2. primer drugo spremenljivko (če hočeš ves čas hraniti poz. za vsakega).
Mislim da bo treba vzet v roke kakšno knjigo o osnovah programiranja in si malo stvari prebrat od začetka .
Zgodovina sprememb…
- spremenil: zerox ()
rokpok ::
Sicer offtopic, ampak vseeno: Ni treba uporabljat komentarje samo zato, da jih uporabljaš...
Rad bi bil pingvin.
TheCyborg ::
@Zerox: Takoj zatem ko sm napisal odgovor, sm si prišel gor, da je treba ponovno ga nastavit na nič. Pa še to, ni fora v knjigi, sicer si bom vzel kakšno, da bom več znal, tukaj sem moral samo malce pomisliti. Nisem tak osnovi začetnik, nekaj že vem.
@sleepy_net: Komentarje sm si pisal za to, ker je veliko oklepajev. Sicer pa kaj tebe briga, zakaj jih uporabljam, saj za to so, da se
@sleepy_net: Komentarje sm si pisal za to, ker je veliko oklepajev. Sicer pa kaj tebe briga, zakaj jih uporabljam, saj za to so, da se
Gundolf ::
Jst bi sam tok komentiru, če bi iz vsebine posameznega case stavka naredil svojo funkcijo in bi v switchu tako le klical dve funkciji bi imel veliko lažje življenje in manj napak.
TheCyborg ::
V bistvu, smo program naredili z funkcijo break continue, potem smo ga morali narediti še po svoji izbiri, brez le teh funkcij, na koncu pa oba združit v switch stavek, in to je to :)
lp, Cyborg
lp, Cyborg
rokpok ::
Samo glede na to, kakšna navodila si ti zdaj napisal, bi pomojem nasvet Gundolf-a vseeno prišel prav
Rad bi bil pingvin.
Gundolf ::
Lej samo tole sm ti zelel povedat - naloga ni da je celoten program (zdruzena dva programa) znotraj switch stavka ampak da s switch stavkom izbiras med dvema programoma. Ta dva sta se vedno lahko vsak v svoji funkciji.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Neznan problem #2 [C]Oddelek: Programiranje | 1688 (1478) | videc |
» | naloga ne funkcioniraOddelek: Programiranje | 1446 (1355) | FX6300B |
» | c napaka .c:4:1: error: expected identifier or '(' before '{' tokenOddelek: Programiranje | 1946 (1519) | MrStein |
» | [c++] problem: pretvorba iz malih v velike crkeOddelek: Programiranje | 2137 (1784) | Makina |
» | [C] čuden izpis iz txt dat. na zaslonOddelek: Programiranje | 1680 (1417) | l0g1t3ch |