» »

[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.

#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 */
 

JACK1 ::

SAS!
Ja se bo treba malo bolje poglobit ane....:D kr tako naprej...;)
Ajde serbus!8-)

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

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

Zgodovina sprememb…

Quikee ::

break; na koncu vsakega case ti fali...

Zgodovina sprememb…

  • spremenil: Quikee ()

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 8-)

lp, Cyborg

Zgodovina sprememb…

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 0:) .

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. 0:)

@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 8-)

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

Js si nism zmislil programa. Narejen je po želji.

Lp, Cyborg

Gundolf ::

Hehe, a želja je bila da je cel program v switch stavku? :D

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

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Neznan problem #2 [C]

Oddelek: Programiranje
91576 (1366) videc
»

naloga ne funkcionira

Oddelek: Programiranje
101374 (1283) FX6300B
»

c napaka .c:4:1: error: expected identifier or '(' before '{' token

Oddelek: Programiranje
141849 (1422) MrStein
»

[c++] problem: pretvorba iz malih v velike crke

Oddelek: Programiranje
142033 (1680) Makina
»

[C] čuden izpis iz txt dat. na zaslon

Oddelek: Programiranje
121625 (1362) l0g1t3ch

Več podobnih tem