Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

U cemu gresim kod ovog programa pogadjanja imena

[es] :: C/C++ programiranje :: C/C++ za početnike :: U cemu gresim kod ovog programa pogadjanja imena

[ Pregleda: 4178 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Batleo
Beograd

Član broj: 335709
Poruke: 17
*.dynamic.isp.telekom.rs.



Profil

icon U cemu gresim kod ovog programa pogadjanja imena15.12.2016. u 22:02 - pre 89 meseci
Hteo sam da upotrebim petlju while, za jedan prost program oko pogadanja imena grada. NIje mi tesko da napravim za pogadjanje jednog slova ili broja, ali kada treba da napravim za pogadjanje STRING-a, ne znam u cemu gresim. Ostavicu primer mog programa, hvala unapred na pomoci.

#include <stdio.h>
#include <stdlib.h>

int main()
{
char naziv_grada[8]="Beograd";
char pogadjanje_naziva[8];

printf("Pogodi naziv grada:");
while (scanf("%s",pogadjanje_naziva)!="Beograd") /* ovde sam umesto "Beograd" stavljao naziv_grada i opet ne uspevam da napravim ono sto sam zamislio , pisao sam & i dalje nista*/
{
printf("Pogresan odgovor, pokusaj opet:");
scanf("%s",pogadjanje_naziva);
}
printf("Tacan odgovor!\n");

return 0;
}

I kada pogodim, petlja se nastavlja, kao da nisam uneo tacan odgovor.

[Ovu poruku je menjao Batleo dana 15.12.2016. u 23:15 GMT+1]

[Ovu poruku je menjao Batleo dana 15.12.2016. u 23:15 GMT+1]
 
Odgovor na temu

3way

Član broj: 241428
Poruke: 1425



+2403 Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena15.12.2016. u 22:05 - pre 89 meseci
Sta bude sa: char pogadjanje_naziva[7]; ?


Sedam sutlijasa,
za sedam samuraja,
za sedam tramvaja.
 
Odgovor na temu

Batleo
Beograd

Član broj: 335709
Poruke: 17
*.dynamic.isp.telekom.rs.



Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena15.12.2016. u 22:18 - pre 89 meseci
Opet isto... Kada se upise Beograd, ne dobijam tacan odgovor...
 
Odgovor na temu

Batleo
Beograd

Član broj: 335709
Poruke: 17
*.dynamic.isp.telekom.rs.



Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena15.12.2016. u 22:19 - pre 89 meseci
Citat:
3way:
Sta bude sa: char pogadjanje_naziva[7]; ?



Opet isto... Kada se upise Beograd, ne dobijam tacan odgovor...
 
Odgovor na temu

chupcko
Negde
Beograd

Član broj: 5560
Poruke: 1141

Sajt: www.google.com


+63 Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena15.12.2016. u 22:46 - pre 89 meseci
A sta bese vraca scanf ? po man strani ?
CHUPCKO
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p1-76.bvcom.net.



+1064 Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena16.12.2016. u 03:03 - pre 89 meseci
pogledaj dokumentaciju za scanf, tvoj program ima vise problema. Jedan od njih je sto tvoj niz bude pregazen ako je input predugacak drugi je da scanf vraca broj uspesno konertovanih parametara a treci da se string u C-u ne moze porediti sa == !=...
 
Odgovor na temu

Batleo
Beograd

Član broj: 335709
Poruke: 17
*.dynamic.isp.telekom.rs.



Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena17.12.2016. u 14:07 - pre 89 meseci
@Branimir Maksimovic

Hvala na ovom odgovoru ! Za prvi problem sam znao, ali sam hteo samo da probam da li program funkcionise, za drugi (scanf) sam napravio gresku. Kljucna je ova treca stvar koju nisam znao, da string ne moze da se poredi na taj nacin. Hvala jos jednom !
 
Odgovor na temu

VoltAmper..W

Član broj: 334071
Poruke: 28
87.116.180.*



+3 Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena17.12.2016. u 14:32 - pre 89 meseci
Za poredjenje koristi strcmp (string1 , string 2),
najlakse je da napravis do-while petlju u kojoj ces ucitavati string i proveravati da li je isti kao i zadati, ako jeste aktiviras fleg za izlazak iz petlje.
 
Odgovor na temu

Batleo
Beograd

Član broj: 335709
Poruke: 17
*.dynamic.isp.telekom.rs.



Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena17.12.2016. u 18:56 - pre 89 meseci
@VoltAmper..W

Ok hvala, upravo danas sam se vratio da proucavam string bolje. Definitivno nisam savladao kako treba.
 
Odgovor na temu

Batleo
Beograd

Član broj: 335709
Poruke: 17
*.dynamic.isp.telekom.rs.



Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena21.12.2016. u 22:31 - pre 89 meseci
Citat:
VoltAmper..W:
Za poredjenje koristi strcmp (string1 , string 2),
najlakse je da napravis do-while petlju u kojoj ces ucitavati string i proveravati da li je isti kao i zadati, ako jeste aktiviras fleg za izlazak iz petlje.


Evo upravao sam uradio, ovo je najprostije sto moze...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TACAN_ODGOVOR "Beograd"

int main()
{
char naziv_grada[100];
printf("Pogodi naziv grada: ");
scanf("%s",&naziv_grada);

while(strcmp(naziv_grada,TACAN_ODGOVOR)!=0)
{
printf("\nPogresan odgovor, pokusajte opet : ");
scanf("%s",&naziv_grada);
}
printf("\nPogodili ste! %s je tacan odgovor!\n",naziv_grada);


return 0;
}
 
Odgovor na temu

chupcko
Negde
Beograd

Član broj: 5560
Poruke: 1141

Sajt: www.google.com


+63 Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena22.12.2016. u 13:02 - pre 89 meseci
Ovo sto cu ti sada napisati shvati uslovno i kao temu za razmisljanje. Tvoj program radi, ali je los :)

Konkretno scanf("%s",&naziv_grada); je lose napisano, treba scanf("%s",naziv_grada);
Igrom slucaja naziv_grada je jednako &naziv_grada ali su razlicitog tipa.
Konkretno naziv_grada je tipa char*, dok je &naziv_grada tipa char (*)[100].

Deluje kao previse cepidlacenja, ali ako zelis da se bavis programiranjem kreni da cepidlacis.

Kako bi ovo sto sam ti ispricao iztestriao, probaj sledece, dodaj funkciju:

void test(char *p){}

Ne radi nista naravno, ali probaj u main: test(naziv_grada) i test(&naziv_grada), mozda ti bude jasnije.

A da, scanf ocekuje char*.

Tema za razmisljanje, kako da sprecis da neko unese vise od 99 karaktera ?
CHUPCKO
 
Odgovor na temu

Batleo
Beograd

Član broj: 335709
Poruke: 17
*.dynamic.isp.telekom.rs.



Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena22.12.2016. u 21:18 - pre 89 meseci
Citat:
chupcko: Ovo sto cu ti sada napisati shvati uslovno i kao temu za razmisljanje. Tvoj program radi, ali je los :)

Konkretno scanf("%s",&naziv_grada); je lose napisano, treba scanf("%s",naziv_grada);
Igrom slucaja naziv_grada je jednako &naziv_grada ali su razlicitog tipa.
Konkretno naziv_grada je tipa char*, dok je &naziv_grada tipa char (*)[100].

Deluje kao previse cepidlacenja, ali ako zelis da se bavis programiranjem kreni da cepidlacis.

Kako bi ovo sto sam ti ispricao iztestriao, probaj sledece, dodaj funkciju:

void test(char *p){}

Ne radi nista naravno, ali probaj u main: test(naziv_grada) i test(&naziv_grada), mozda ti bude jasnije.

A da, scanf ocekuje char*.

Tema za razmisljanje, kako da sprecis da neko unese vise od 99 karaktera ?



Apsolutno se slazem sa tobom da je program lose napisan, zato sam i napisao da je ovo najjednostavnije(najbrze).
Kod scanf je greska sto sam postavio &, uzrok, previse vezbe sa var int :) .
Hvala na savetu da je potrebno da ogranicim unos karaktera. Prosto kada vezbam preskocim da dodam neke takve stvari u brzini, kapiram da "sutra" mogu da napravim zbog toga program sa greskom.
Hvala na savetima, imacu ja jos pitanja sigurno :)) .
 
Odgovor na temu

VoltAmper..W

Član broj: 334071
Poruke: 28
87.116.180.*



+3 Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena22.12.2016. u 21:44 - pre 89 meseci
Evo i ja nesto da naucim :)
Nikad nisam razmisljao o toj situaciji ( nisu se javaljale greske ), sad sam pokusao da shvatim imam pitanje: kada napisemo &naziv_grada ako je naziv_grada pokazivac na adresu "nultog" elementa niza ( karaktera ) sta onda predstavlja &naziv_grada ?, adresu pokazivaca ali sta je to u ovom primeru ?



Sto se tice prekoracenja ja sam to "resavao"(profesor nije pravio problem zbog toga) sa getchar() pa ako je dobijeni karakter ' ' ili '\n' onda je uneto dozvoljeni broj karaktera a ako je bilo sta drugo uneti broj karaktera je veci od dozvoljenog.
 
Odgovor na temu

Batleo
Beograd

Član broj: 335709
Poruke: 17
*.dynamic.isp.telekom.rs.



Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena22.12.2016. u 22:50 - pre 89 meseci
#chupcko

Evo ovde sam napravio svoju funkciju za input s_gets. I prilikom njenog definisanja, sam dodao i mogucnost da ne dodje do greske ako se unese veci broj karaktera.


Code:
#include <stdio.h>
#include <string.h>
#define TACAN_ODGOVOR "Beograd"
#define SIZE 30
char * s_gets(char * st, int n);
int main(void)
{
char naziv_grada[SIZE];
puts("Koji je glavni grad Srbije?");
s_gets(naziv_grada, SIZE);
while (strcmp(naziv_grada,TACAN_ODGOVOR) != 0)
{
puts("Pogresan odgovor.Pokusaj opet:");
s_gets(naziv_grada, SIZE);
}
puts("Tacan odgovor!");
return 0;
}
char * s_gets(char * st, int n)
{
char * ret_val;
int i = 0;
ret_val = fgets(st, n, stdin);
if (ret_val)
{
    while (st[i] != '\n' && st[i] != '\0')
i++;
if (st[i] == '\n')
st[i] = '\0';
else 
while (getchar() != '\n')
continue;
}
return ret_val;
}


Pitanje za vas iskusnije u c programiranju. Da li pravite svoje funkcije sa input, ili koristite vise scanf, fgets, gets(naucio sam njene mane)?
Mozda je moje pitanje "glupo", ali uzmite u obzir da ucim sam iz literature koju nadjem na netu, bez mentora. Ucim c vec par meseci, ali jako aktivno, do sada nisam imao nekog dodira sa programiranjem.

[Ovu poruku je menjao X Files dana 23.12.2016. u 20:13 GMT+1]
 
Odgovor na temu

Batleo
Beograd

Član broj: 335709
Poruke: 17
*.dynamic.isp.telekom.rs.



Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena22.12.2016. u 23:00 - pre 89 meseci
Citat:
VoltAmper..W:
Evo i ja nesto da naucim :)
Nikad nisam razmisljao o toj situaciji ( nisu se javaljale greske ), sad sam pokusao da shvatim imam pitanje: kada napisemo &naziv_grada ako je naziv_grada pokazivac na adresu "nultog" elementa niza ( karaktera ) sta onda predstavlja &naziv_grada ?, adresu pokazivaca ali sta je to u ovom primeru ?



Sto se tice prekoracenja ja sam to "resavao"(profesor nije pravio problem zbog toga) sa getchar() pa ako je dobijeni karakter ' ' ili '\n' onda je uneto dozvoljeni broj karaktera a ako je bilo sta drugo uneti broj karaktera je veci od dozvoljenog.


Ja sam cesto znao da napravim greske kada uporedjujem svoj program sa primerima na kojiima sam ucio, kada kod funkcije za input (koju sam namenio za unos niza) ostavim &. Primetio sam da se greske ne javljaju ili ja nisam imao takav zadatak :) . Znaci ispada da je svejedno da se prilikom unosa niza ostavi &, nista se nije menjalo (bar kod mene). Ne baratam strucnim terminima, nadam se sam uspeo da objasnim sta sam imao na umu :)))))))) . U svakom slucaju nisam dao odgovor na tvoje pitanje :) .
 
Odgovor na temu

chupcko
Negde
Beograd

Član broj: 5560
Poruke: 1141

Sajt: www.google.com


+63 Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena23.12.2016. u 18:11 - pre 89 meseci
Za razliku izmedju naziv_grada i &naziv_grada pogledaj ovaj program.
Prilikom ispisa ce reci da su te dve vrednosti iste, ali njihovo znacenje je razlicito, jer prijavjuje upozorenja:

test2(s);
^
expected ‘char (*)[]’ but argument is of type ‘char *’

test1(&s);
^
expected ‘char *’ but argument is of type ‘char (*)[10]’

Code:

#include <stdio.h>

void test1(char *s)
{
}

void test2(char (*s)[])
{
}

int main(void)
{
  char s[10];

  printf("%p %p\n", s, &s);
  test1(s);
  test2(s);
  test1(&s);
  test2(&s);
  return 0;
}


Time smo valjda rascistili koja je razlika izmedju char * i char (*)[]

Koristi code tag da ne bi gledali italic delove koda :)

A nema posebnih pravila, koristi sta hoces, ali da radi :), ako mozes sa necim iz stdio iskoristi ...



CHUPCKO
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena23.12.2016. u 19:18 - pre 89 meseci
Citat:

Pitanje za vas iskusnije u c programiranju. Da li pravite svoje funkcije sa input, ili koristite vise scanf, fgets, gets(naucio sam njene mane)?
Mozda je moje pitanje "glupo", ali uzmite u obzir da ucim sam iz literature koju nadjem na netu, bez mentora. Ucim c vec par meseci, ali jako aktivno, do sada nisam imao nekog dodira sa programiranjem.

Kada kreneš u GUI progamiranje, pretpostavljam da praktično više nikada nećeš koristiti pomenute funkcije.

Takođe, pogledaj koja je razlika između strcmp() i stricmp().
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p1-76.bvcom.net.



+1064 Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena23.12.2016. u 19:57 - pre 89 meseci
Batleo scanf dozvoljava u specifikaciji formata maksimalan broj karaktera:
Code:

#include <stdio.h>
#include <string.h>

int main(void) {
        char line[11];
        scanf("%10s",line);
        printf("%s %d",line,strlen(line));
}
 
Odgovor na temu

Batleo
Beograd

Član broj: 335709
Poruke: 17
*.dynamic.isp.telekom.rs.



Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena23.12.2016. u 22:24 - pre 89 meseci
Prvo HVALA SVIMA NA POMOCI !

@chupcko iz tvog koda shvatam da imaju istu adresu... Nadam se da je to sve sto treba da shvatim ((((((:

@X FIles stricmp sam "guglao" i uradio par primera, nisam znao za stricmp().
A razmisljao sam o toj varijanti kada neko unese tacan odgovor, a na primer odgovori malim slovom da resim pomocu "if".
Ovo je bolja i jednostavnija varijanta sa "stricmp()"
Takodje sam video i strncmp, za pretragu neku moze da se iskoriti.

@Branimir Maksimovic Hvala na odgovoru. Za strlen() sam znao i imao sam u glavi kada mi je chupcko rekao da je kod los.
Malo sam se udubio bio pa sam uz neku literaturu pravio onu funkciju s_gets (znam da takva vec postoji u header stdio.h) i tu resio i to.
Kapiram da je jednostavnije uz strlen da se resi duzina unosa().
 
Odgovor na temu

Batleo
Beograd

Član broj: 335709
Poruke: 17
*.222.194.0



Profil

icon Re: U cemu gresim kod ovog programa pogadjanja imena14.01.2017. u 23:55 - pre 88 meseci
Danas onako malo vezbam jedan zadatak i uradim ga u 80 tak redova. Kad pogledam resenje, uradjen u 40 redova ... Htedoh da se ubijem.... ((((((:

Moje resenje
Code:

#include <stdio.h>
#include <stdlib.h>
#define MONTHS 12
#define YEARS 5

float godina_sve_ukupno(float n1[YEARS][MONTHS]);
float meseci_prosek(float n2[YEARS][MONTHS]);

int main()
{
     float rain[YEARS][MONTHS] =    {
                                    {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
                                    {8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
                                    {9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
                                    {7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
                                    {7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
                                    };

   godina_sve_ukupno(rain);
   meseci_prosek(rain);
}
float godina_sve_ukupno(float n1[YEARS][MONTHS])
{
    int i;
    float result_2010=0;
    float result_2011=0;
    float result_2012=0;
    float result_2013=0;
    float result_2014=0;

    for(i=0;i<MONTHS;i++)
    {
        result_2010 += n1[0][i];
        result_2011 += n1[1][i];
        result_2012 += n1[2][i];
        result_2013 += n1[3][i];
        result_2014 += n1[4][i];
    }
    printf(" Ukupno padavina 2010 = %.1f\n",result_2010);
    printf(" Ukupno padavina 2011 = %.1f\n",result_2011);
    printf(" Ukupno padavina 2012 = %.1f\n",result_2012);
    printf(" Ukupno padavina 2013 = %.1f\n",result_2013);
    printf(" Ukupno padavina 2014 = %.1f\n",result_2014);

    printf("Prosecno padavina za sve ove godine : %.1f\n",(result_2010+result_2011+result_2012+result_2013+result_2014)/5);

    return 0;

}
float meseci_prosek(float n2[YEARS][MONTHS])
{
    int j,c;

    float jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec;
    jan=feb=mar=apr=maj=jun=jul=avg=sep=okt=nov=dec=0;

    for(j=0;j<YEARS;j++)
    {
        jan += n2[j][0];
        feb += n2[j][1];
        mar += n2[j][2];
        apr += n2[j][3];
        maj += n2[j][4];
        jun += n2[j][5];
        jul += n2[j][6];
        avg += n2[j][7];
        sep += n2[j][8];
        okt += n2[j][9];
        nov += n2[j][10];
        dec += n2[j][11];
    }
    puts("jan  feb  mar  apr  maj  jun  jul  avg  sep  okt  nov  dec  ");
    printf("%.1f %2.1f   %2.1f   %2.1f  %2.1f %2.1f  %2.1f  %2.1f  %2.1f  %2.1f  %2.1f  %2.1f",
           jan/5,feb/5,mar/5,apr/5,maj/5,jun/5,jul/5,avg/5,sep/5,okt/5,nov/5,dec/5);

    return 0;
}


Pravo,"malo" lakse resenje i "malo" pametnije resenje (((((((:
Code:

#include <stdio.h>
#define MONTHS 12 // number of months in a year
#define YEARS 5 // number of years of data
int main(void)
{
// initializing rainfall data for 2010 - 2014
const float rain[YEARS][MONTHS] =
{
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
{9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
{7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
{7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
};
int year, month;
float subtot, total;
printf(" YEAR RAINFALL (inches)\n");
for (year = 0, total = 0; year < YEARS; year++)
{ // for each year, sum rainfall for each month
for (month = 0, subtot = 0; month < MONTHS; month++)
subtot += rain[year][month];
printf("%5d %15.1f\n", 2010 + year, subtot);
total += subtot; // total for all years
}
printf("\nThe yearly average is %.1f inches.\n\n",
total/YEARS);
printf("MONTHLY AVERAGES:\n\n");
printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct ");
printf(" Nov Dec\n");
for (month = 0; month < MONTHS; month++)
{ // for each month, sum rainfall over years
for (year = 0, subtot =0; year < YEARS; year++)
subtot += rain[year][month];
printf("%4.1f ", subtot/YEARS);
}
printf("\n");
return 0;
}

 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: U cemu gresim kod ovog programa pogadjanja imena

[ Pregleda: 4178 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.