C - ispis ovisan u unosu slova ili broja

poruka: 33
|
čitano: 12.203
|
moderatori: XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
Pomoć sa programčićem u c-u(win 32 console)

Želim napraviti programčić

koji bi primao unos broja ili slova od nekog od moja 3 prijatelja(svaki prijatelj ima točno određeno šta mora unesti) i onda on nakon unosa svakom mom prijatelju da različit tekst.

 

Ja sam to pokušao ovako:

#include<stdio.h>

int main(){

char a, a1, i, h; a1=2; i=4;h=1;printf("upiši svoj broj \n");scanf("%c", &a); if(a=a1){  printf("E,andrija kako ide?");} else(a==h); { printf("Dali je ovo helvetica?");} if(a=1) { if(a=i) printf("Kez,izgubio si kapu"); } else{printf("Krivo si upisao,stavi naočale i pokušaj ponovo"); } return 0;}
Možda su kod kopiranja nastale neke sintaksne greška...Ali program mi izbaci ovo bilošta da upišem:

upiÜi svoj broj
4
E,andrija kako ide?Dali je ovo helvetica?Kez,izgubio si kapuPress any key to continue . . .


Kako da to popravim?Želim da ispiše samo jednu od tih poruka i to onu koja je bila namijenjena za tog prijatelja.
U visual studiu 2010.

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)

Stavi to u switch case statment i problem riješen .

 

Private
15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
Private kaže...

Stavi to u switch case statment i problem riješen .

 

  Možeš li malo detaljnije,inače ja sam tek početnik u c-u i prvi puta čujem za switch case statement

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
16 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)

Evo prouči , nije mi se dalo prevoditi a imaš i na forumu negdje a netko će ti i kod napisati ,bar dio i onda češ valjda skužiti   ....

 

Switch case statements are a substitute for long if statements that compare a variable to several "integral" values ("integral" values are simply values that can be expressed as an integer, such as the value of a char). The basic format for using switch case is outlined below. The value of the variable given into switch is compared to the value following each of the cases, and when one value matches the value of the variable, the computer continues executing the program from that point.
 
switch ( <variable> ) {
case this-value:
  Code to execute if <variable> == this-value
  break;
case that-value:
  Code to execute if <variable> == that-value
  break;
...
default:
  Code to execute if <variable> does not equal the value following any of the cases
  break;
}

 

 

Private
15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
g12356 kaže...

Ajoj koliko gresaka. Ne znam odakle bih krenuo... :P

 

Gledaj kako bi to trebalo izgledati (tvoja verzija sa IF, ali preuredena tako da radi kako spada):

#include <stdio.h>

int main()
{
    char a;
   
    printf("upiši svoj broj \n");
    scanf("%d", &a);

    if (a==1)
    { 
       printf("E,andrija kako ide?");
    }
    else if(a==2)
    {
         printf("Dali je ovo helvetica?");
    }
    else if (a==3)
    {
          printf("Kez,izgubio si kapu");
    }
    else
    {
        printf("Krivo si upisao,stavi naočale i pokušaj ponovo");
    }
   
    return 0;
}

 

A ovako to izgleda kada koristis switch blok:

#include <stdio.h>

int main()
{
    char a;
   
    printf("upiši svoj broj \n");
    scanf("%d", &a);
   
    switch (a)
    {
           case 1:
                printf("E,andrija kako ide?");
                break;
               
           case 2:
                printf("Dali je ovo helvetica?");
                break;
          
           case 3:
                printf("Kez,izgubio si kapu");
                break;
               
           default:
                printf("Krivo si upisao,stavi naočale i pokušaj ponovo");
                break;      
    }
       
    return 0;
}

 

Kao sto vidis switch puno bolje izgleda kada imas cijelu trakavicu testiranja vrijednosti pojedine varijable (iako ce i IF blokovi napraviti jednako dobar posao, samo sto ce biti puno ruzniji za gledati)

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put ned 6.11.2011 15:43 (rustweaver).
15 godina
neaktivan
offline
Pomoć sa programčićem u c-u(win 32 console)

E hvala,a kako bi bilo kada bi dodao goto naredbu prije kraja koja bi se vraćala prije switch-a?tako nekako bih to htio da mi bude u kompletu,mislim bi to radilo?ja ću sam taj dio sa go to naredbom napraviti.

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)

Naredbu goto zaboravi da postoji. Ona narušava sve ispravne principe programiranja. To ako ćeš na faksu koristiti odmah dobivaš 0 bodova.

15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
TracerCPP kaže...

Naredbu goto zaboravi da postoji. Ona narušava sve ispravne principe programiranja. To ako ćeš na faksu koristiti odmah dobivaš 0 bodova.

  Znam za tu priču,ali paradoks je taj da mi je baš profa sa faksa preporučio tu naredbu.

 

Ipak neću ju koristit na vježbama ili ičemu takvome.

 

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
14 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)

Koji profa?

15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
g12356 kaže...

E hvala,a kako bi bilo kada bi dodao goto naredbu prije kraja koja bi se vraćala prije switch-a?tako nekako bih to htio da mi bude u kompletu,mislim bi to radilo?ja ću sam taj dio sa go to naredbom napraviti.

Ako bas pod svaku cijenu zelis ici sa goto (pretpostavljam da zelis sklepati nekakvu petlju da se kod ponavlja dok se ne upise ispravan broj), tada bi goto dodao u defaultni case koji procesira nevazece upise, a labelu bi stavio prije upisa broja. Tako bi te svaki puta goto vracao na ponovni upis ako ne upises ocekivanu vrijednost (pravilno rijesenje za takvo nesto je konstruirati pravu petlju, a ne nekakvu goto improvizaciju).

 

Implikacijama (i komplikacijama) koristenja goto naredbe se necu baviti, tracer se vec time pozabavio.

 

Uglavnom, to bi ti ovako nekako izgledalo:

#include <stdio.h>

int main()
{
    char a;
  
    pocetak:
    printf("upiši svoj broj \n");
    scanf("%d", &a);
  
    switch (a)
    {
           case 1:
                printf("E,andrija kako ide?");
                break;
              
           case 2:
                printf("Dali je ovo helvetica?");
                break;
         
           case 3:
                printf("Kez,izgubio si kapu");
                break;
              
           default:
                printf("Krivo si upisao,stavi naočale i pokušaj ponovo\n");
                goto pocetak;
                break;     
    }
      
    return 0;
}

My computer once beat me at chess, but we got even after a round of boxing.
15 godina
neaktivan
offline
Pomoć sa programčićem u c-u(win 32 console)

ALi kada ću naučit bolje onda ću prestati koristit goto naredbu.

 

Ne,želim da nakon bilokojeg unosa se vrati na početak,tako da frendovi mogu jedan za drugim upisivati.

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Pomoć sa programčićem u c-u(win 32 console)

Onda koristi while ili do-while petlju, ili ako znaš koliko puta će se unos ponavljati for petlju.

Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
g12356 kaže...

 Ne,želim da nakon bilokojeg unosa se vrati na početak,tako da frendovi mogu jedan za drugim upisivati.

Ok, ista fora. Samo dodaj "goto pocetak;" prije breaka u svakom caseu.

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put ned 6.11.2011 23:00 (rustweaver).
14 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
rustweaver kaže...
g12356 kaže...

 Ne,želim da nakon bilokojeg unosa se vrati na početak,tako da frendovi mogu jedan za drugim upisivati.

Ok, ista fora. Samo dodaj "goto pocetak;" prije breaka u svakom caseu.

...i onda je program beskonačna petlja.

 

Opet ponavljam, zaboravite goto. Petlje i postoje za ovakve stvari i nije ih problem nikome savladati.

15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
TracerCPP kaže...

...i onda je program beskonačna petlja.

Pa makne iz poslijednjeg casea goto. To se valjda podrazumjeva...

Iz programa izlazi upisom nevazece vrijednosti.

My computer once beat me at chess, but we got even after a round of boxing.
14 godina
neaktivan
offline
Pomoć sa programčićem u c-u(win 32 console)

Umjesto davanja savjeta kako pogrešno raditi već ste do sada mogli dati primjer za recimo do-while petlju kojom se ovo rješi.

Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
TracerCPP kaže...

Onda koristi while ili do-while petlju, ili ako znaš koliko puta će se unos ponavljati for petlju.

  Još to nismo učili,ja inače ovo učim sasvim iz svog hobija.Profesor mi je rekao za goto naredbu,ali i da većina ljudi koristi do while naredbu i objasnio mi je zašto ne koristit goto naredbu.

 

Nadam se da sa učenjem malo pomalo ću nadmašiti gospodina Linusa i napravit bolji kernel.

 

Evo vam source kod:

#include<stdio.h>
int main(){
char a;
pocetak:
printf("\n upisi svoj broj \n\n");
scanf("%d", &a);

switch (a)
{
case 1:
printf("E,andrija kako ide?");
goto pocetak;
break;
case 2:
printf("Dali je ovo helvetica?");
goto pocetak;
break;
case 3:
printf("Kez izgubio si kapu!");
goto pocetak;
break;

default:
printf("Chuck Norris je htio da krivo upises,stavi naocale i pokušaj ponovo!");
goto pocetak;
break;
}
return 0;
}

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
TracerCPP kaže...

Umjesto davanja savjeta kako pogrešno raditi već ste do sada mogli dati primjer za recimo do-while petlju kojom se ovo rješi.

Pa ne moras se odmah ljutiti. Kad me netko nesto pita ja mu odgovorim.

 

#include <stdio.h>

int main()
{
    char a, kraj=0;
 
    do
    {
        printf("upiši svoj broj \n");
        scanf("%d", &a);
   
        switch (a)
        {
               case 1:
                    printf("E,andrija kako ide?\n");
                    break;
                 
               case 2:
                    printf("Dali je ovo helvetica?\n");
                    break;
            
               case 3:
                    printf("Kez,izgubio si kapu\n");
                    break;
                 
               default:
                    printf("Krivo si upisao,stavi naočale i pokušaj ponovo\n");
                    kraj=1;
                    break;    
        }
    }
    while (!kraj);
     
    return 0;
}

My computer once beat me at chess, but we got even after a round of boxing.
15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
g12356 kaže...
...

Ako si htio napraviti beskonacnu petlju, onda nisi morao koristiti goto ^^

 

dovoljno je da napravis:

 

while (1)
{
     //neki kod ovdje koji ce se beskonacno ponavljati
}

My computer once beat me at chess, but we got even after a round of boxing.
15 godina
neaktivan
offline
Pomoć sa programčićem u c-u(win 32 console)

eh,hvala,idem sada verziju 1.1 programčića napravit.

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
rustweaver kaže...
TracerCPP kaže...

Umjesto davanja savjeta kako pogrešno raditi već ste do sada mogli dati primjer za recimo do-while petlju kojom se ovo rješi.

Pa ne moras se odmah ljutiti. Kad me netko nesto pita ja mu odgovorim.

 

Nemam se ja što ljutiti, no ljude treba pravilno i usmjeriti u odgovorima. Ako netko pita kako da skoči s mosta jasno da mu nećeš to objašnjavati već ćeš mu savjetovati kako da drukčije riješi svoj problem.

15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)

Evo da i napisem nekakvo svoje pojasnjenje zasto ne koristiti goto (kao ispriku traceru buduci da sam ga zivcirao pisanjem kako koristiti goto).

 

Goto je direktna preslika assembly komande "jump". Na najnizoj (assembly) razini jump se koristi za konstruiranje uvjetnog grananja, petlji, i manjih kvazi-procedura. Kako C ima podrsku za sve te koncepte, nije potrebno konstruirati petlje i grananje pomocu goto skokova. Goto je u C uveden uglavnom iz razloga sto je, u vrijeme kada je C nastao, bilo puno assembly i BASIC programera koji su se obilato sluzili takvim nacinom kontrole toka programa. Zasto je goto omrazen? Zato sto obilatim koristenjem stvara veoma zamrsenu mrezu skokova (to se naziva spaghetti kôdom, zato sto djeluje zapetljano i tesko je pratiti tok izvrsavanja programa), sto znatno povecava napor programera u odrzavanju zeljenog toka programa.

 

Koliko je stvarno goto potreban? Pa evo, ja ga niti jednom nisam koristio (doslovce).

 

TracerCPP kaže...

Ako netko pita kako da skoči s mosta jasno da mu nećeš to objašnjavati već ćeš mu savjetovati kako da drukčije riješi svoj problem.

Jesi siguran? {#}

Sorry ako sam ispao naporan. Zakljucio sam da si mu ti vec dao pravilno usmjerenje, pa sam mislio da bih mu ja barem onda mogao objasniti kako se goto u biti koristi. Evo posipavam se pepelom ;)

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put pon 7.11.2011 0:08 (rustweaver).
14 godina
neaktivan
offline
Pomoć sa programčićem u c-u(win 32 console)

Nema potrebe za isprikom ;) Sve 5.

Moj PC  
0 0 hvala 0
16 godina
offline
Pomoć sa programčićem u c-u(win 32 console)

-.. ako je profesor tražio GOTO, možda treba tako napraviti? Ponekad je (namjerno) i loš primjer 'dobar' primjer.

-špageti kod, da ali u zadatcima od desetak linija je nevažan kriterij-održavanje.

Važno je naučiti-razumjeti skokove ili grananje. Ponekad je važno napraviti točno traženo, možda i istovremeno ponuditi bolje rješenje. Nije li to smisao laganih školskih primjera?

-kao prijedlog, napravi obje verzije, profesor bi to trebao priznati kao zalaganje...

 

edit:

pošto profesor nije tražio (vjerojatnije suprotno, hvala Tracer), preostaje..

GOTO 2>&1 ...

{#}

C64/TurboModul-OpenSourceProject.org.cn.部分作品为网上收集整理,供开源爱好者学习使用
Poruka je uređivana zadnji put pon 7.11.2011 0:36 (ihush).
 
1 0 hvala 0
14 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)

Profesor sigurno nije tražio goto naredbu. Politika kolegija je takva da se ti zadaci koji imaju goto uopće ne priznaju.

15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)

Imate li savjeta koje još bi naredbe i operacije mogle biti zanimljive da ih učim?

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
14 godina
neaktivan
offline
Pomoć sa programčićem u c-u(win 32 console)

Uzmi knjigu i idi redom.

Moj PC  
1 0 hvala 0
13 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)
g12356 kaže...

Imate li savjeta koje još bi naredbe i operacije mogle biti zanimljive da ih učim?

Ove osnovne moraš znati, a funkcija ima...
Pogledaj na Googleu, recimo Sleep function,...

Programming is understanding. – Kristen Nygaard
15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)

Ne znam kako bih ovaj zadatak riješio:

U istom main() programu deklariraj nove varijable x,y, mask i rez kao unsigned short int podaci (16 bitni podaci).
Zadaj vrijednosti x, y i mask kao oktalne vrijednosti.
x=0x000F (0000 0000 0000 1111)
y=0xFF00 (1111 1111 0000 0000)
mask=0xF00F (1111 0000 0000 1111)
Ispišite zadane varijable u dekadskom i heksadekadskom formatu.
Izračunajte sljedeće izraze i ispišite u programu rezultate u dekadskom i heksadekadskom formatu:
rez = x & mask;
rez = (x & mask) << 12;
rez = y & mask;
rez = ( y & mask) >> 12;
Izračunajte sljedeće izraze i ispišite u programu rezultate u dekadskom i heksadekadskom formatu:
rez = x | mask;
rez = (x | mask) << 12;
rez = y | mask;
rez = ( y | mask) >> 12;

-Ono šta najmanje znam bi bilo to kako da ispišem u dekadskom i heksadekadskom formatu.

Uz zadatak smo dobili ovaj predložak main funkcije:

#include <stdio.h>
int main()
{
int i;
unsigned char a,b;
a=10;
b=8;
// demonstracija operacija and, or i not nad bitovima
a=a & b;
printf("%d\n",a);
//
a=a | b;
printf("%d\n",a);
//
a=~a;
printf("%d\n",a);
//demonstracija operacije and sa konstantom
a=a&b;
b=a&16;
printf("%d %d\n",a,b);
// demonstracija operacije shift u lijevo i desno
a=12;
a=a << 2;
b=64;
b=b >> 3;
printf("%d %d\n",a,b);
// shift desno negativnog broja
a=17;
a=a >> 2;
b=-65;
b=b >> 2;
printf("%d %d\n",a,b);
// demonstracija postavljanja bita, brisanja bita i citanja bita a=10;
a=17;
a=a | (1 << 3); /* postavi 3-ći bit */
printf("%d\n",a);
a=a & (~(1<<4)); /* obriši 4-ti bit */
printf("%d\n",a);
i=4; // za i=4 citamo 5 bit
printf("%d ",(a&(1<<i)) >> i); /* procitaj 5 bit */
i=0;
printf("%d ",(a&(1<<i)) >> i); /* procitaj 1 bit */
printf("\n");
return 0; /* izlazak nakon uspjesnog izvodjenja */
}

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
15 godina
neaktivan
offline
Re: Pomoć sa programčićem u c-u(win 32 console)

hehe pomicanje i maskiranje bitova... nista tesko

 

za ispis u dekadskom ili heksadekadskom formatu si pogledaj referencu za printf:

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

 

konkretno da bi nesto ispisao u heksadekadskom formatu koristis:

printf("%x", nekibroj);

My computer once beat me at chess, but we got even after a round of boxing.
Nova poruka
E-mail:
Lozinka:
 
vrh stranice