Programiranje u C-u - od svega pomalo izdvojena tema

poruka: 1.661
|
čitano: 387.217
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Pokazuje mi gresku negdje kod int main :(

 

13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Strukturu završi sa ;

 

struct st

{

    ---

};

17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
royalhero kaže...

Ajd bar ti nešto radiš, kod nije loš, malo još popravi intendanciju.
  printf("%s; %s ;%d\n", a[i].prezime, a[i].imena, a[i].br );

Ovo nije dobro!

Formate upisa ne odvajaš sa ; !, pišeš jednostavno:
"%s %s %d\n"

Kakve to ima veze, zasto to ne bi bilo dobro?

Pa ispisat ce mu:

 

ime; prezime; 213

 

Kakve veze ima, mozda on bas zeli odvajati to s tockom-zarez.

Mogao je napisati i:

 

printf("%s printaj printaj %s wtf iz tiz shieeet derp herp. %d\n", a[i].prezime, a[i].imena, a[i].br );

 

Totalno nebitno.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Ali zašto bi ime i prezime odvajao tačkom-zarez?

Enivej, hvala, mislio sam ako je ne odvojeno od formata da nije uredu.

17 godina
offline
Programiranje u C-u - od svega pomalo

Kad se dečko trudi, što ga davi nebitnim , a ne pomogne mu ono bitno

 

Ne radi ti jer na kraju strukture nisi stavio semicolon, a za upis char niza u funkciji scanf ne treba ti adresa.

Ovako:

 

 

#include<stdio.h>
struct adresa


{

   char prezime [20];

   char imena [20];

   int br;

};

 

   int main()

 

{

 

   int i;

   struct adresa a[3];

   for(i=0; i<3; i++)

 

   {

 

     scanf("%s", a[i].prezime);

     scanf("%s", a[i].imena);

     scanf("%d", &a[i].br);

   }

 

 

   for (i=0; i<3; i++)

   if  (a[i].br%2==0)

   printf("%s; %s ;%d\n", a[i].prezime, a[i].imena, a[i].br );

   else

   printf("Greska");

 

   return 0;

}

 
2 0 hvala 1
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
royalhero kaže...

Ali zašto bi ime i prezime odvajao tačkom-zarez?

Enivej, hvala, mislio sam ako je ne odvojeno od formata da nije uredu.

Pa svejedno je zasto, ima covjek valjda svoje razloge, to je uopce nebitno.

 

Bitno je da ono nije sintaksno krivo jer iz tvog posta moze zakljuciti da to nije moguce i da mu je to krivo, a nije. Kompajleru je jedino bitno da kad naide na string formatting operator, dakle na %s, %d itd., da budu tako oznaceni, znaci modulo_nesto (%s recimo). Cak mu nije ni bitno da se podatak koji mu dajes da zamjeni sa tim operatorom matcha s njim. Jer ako recimo stavis %d, a das mu char, recimo slovo 'a' ispisat ce ti 97, a ne 'a' zato sto si char 'a' matchal s %d formatom i nece se buniti glede toga. Sve ostalo sto se nalazi izmedu, na pocetku, na kraju tog printf-a jednostavno ce ispisati.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
13 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Hvala vam, ali ste me sada malo zbunili. NIsam bas najbolje skontala, ali cu pokusati...{#} 

Imam jos par zadataka koje sam pokusala ali ne idu...:( 

 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Cvetić kaže...

Hvala vam, ali ste me sada malo zbunili. NIsam bas najbolje skontala, ali cu pokusati...{#} 

Imam jos par zadataka koje sam pokusala ali ne idu...:( 

Ma samo pogledaj ovo sto je Floki napisao. Dakle, fali ti znak ';' kod deklaracije strukture. Kad to probas kompajlirati kompajler ti to i kaze, meni evo izbaci:

 

error: expected ‘;’, identifier or ‘(’ before ‘int'

Sam kompajler ti napise da ocekuje ';' ili '(' prije inta, malo kripticno, da, ali znas gdje je greska pa prozujis po kodu.

 

Drugo, kod scanf-ova stringova ti nije potreban '&' zato sto su to polja i kad napises polje[0] to je kao da si napisala *(polje + 0), zato ti ne treba & kod ta dva polja. Kod integera ti treba.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

SKONTALAAA! HVALA ! AKO MI ZAPNE DRUGI DOLAZIM OPET KOD VAS DA MI OBJASNITE.....

13 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Je l zna neko da mi uradi zadatak? Bila bih mu zahvala...

Napisati funkciju koja od datog realnog broja pravi niz karaktera koji ga predstavlja...Npr niz od 1234567 pravi niz "1234567".{#}

 

 

 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Pa kreni!

13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
royalhero kaže...

Pa kreni!

Pa ne znam!

13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Imaš funkciju ftoa().

13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Da i...ako zelis uradi ako ne ne moras....Ako znas!

16 godina
offline
Programiranje u C-u - od svega pomalo

Pozdrav!

 

Pisem neki konzolni program u cistom C-u. Program cita parametre iz komandne linije i kako mi main izlgeda ovako:

int main(int argc, char* argv[])

 

argv[0] mi u debug modu pise fullpath do mog exe-a (d:\project1\test.exe)

argv[0] mi u release modu pise samo naziv mog exe-a (test.exe)

 

Sad, kako dobiti folder u kojem se nalazi moj exe?

Ako imam fullpath, isparsiram i to je ok.

 

Medjutim, ako imam samo naziv exe-a (Release), koristio sam ovo:

 

 char strFolder[512];

_getcwd(strFolder, 512);

 

I ovo mi radi, ali nisam siguran je li to najbolji nacin, jer u debugu dobijem taj working folder, koji uopce ne mora biti taj gdje je exe.

 

Htio bih kod koji cita path u kojem se nalazi moj exe, a da radi i na unixu i na windowsu, bez obzira na debug/release i sl.

 

Hvala!

Lack of money is the root of all evil. George Bernard Shaw
 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

@Cvetić

Da ti uradim?, taman posla, nemam pametnijih stvari, kao ni drugi forumaši, shvati, niko ti neće uraditi zadatak bez malo tvoga truda, i dao sam ti uputu.
http://www.dreamincode.net/code/snippet545.htm

Poruka je uređivana zadnji put uto 17.1.2012 20:40 (royalhero).
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Ne moras! Hvala u svakom slucaju!

15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
CalvinRi kaže...

Pozdrav!

 

Pisem neki konzolni program u cistom C-u. Program cita parametre iz komandne linije i kako mi main izlgeda ovako:

int main(int argc, char* argv[])

 

argv[0] mi u debug modu pise fullpath do mog exe-a (d:\project1\test.exe)

argv[0] mi u release modu pise samo naziv mog exe-a (test.exe)

K&R Knjiga kaze da argv[0] sadrzi komandu koja je pokrenula program. To znaci ako si ti pokrenuo program pomocu "c:\program\program.exe" argv[0] ce sadrzavati taj kompletan string, a ako si ga pokrenuo pomocu "program.exe" arv[0] ce sadrzavati samo ime programa.

 

Probaj ovaj program:

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("KOMANDA: %s\n", argv[0]);
    return 0;
}

 

kompajliraj ga, stavi ga u neki folder (recimo c:\program\), otvori cmd, kucaj:

 

c:

cd program

program

program.exe

c:\program\program.exe

 

ispis bi trebao biti:

KOMANDA: program

KOMANDA: program.exe

KOMANDA: c:\program\program.exe

 

Dakle to se slaze sa onime sto pise u knjizi. Treba naci nekakav drugi nacin za dolazenja do putanje programa.

 

CalvinRi kaže...
I ovo mi radi, ali nisam siguran je li to najbolji nacin, jer u debugu dobijem taj working folder, koji uopce ne mora biti taj gdje je exe.

 

Htio bih kod koji cita path u kojem se nalazi moj exe, a da radi i na unixu i na windowsu, bez obzira na debug/release i sl.

 

Hvala!

MSDN za _getcwd kaze da ta funkcija uzme trenutni radni direktorij. To samo po sebi nije lose, radni direktorij izvrsne datoteke pokrenute bez nekakvih posebnih kompliciranja i opcija je u biti direktorij u kojoj se ta izvrsna datoteka nalazi. ALI pri pokretanju moguce je imati drukcije postavljeni radni direktorij od onoga u kojem se nalazi sama programska datoteka (recimo to mozes promjeniti putem shortcuta). Sto znaci da u konacnici radni direktorij nije pouzdan izvor informacija za saznavanje putanje same izvrsne datoteke, jer se moze mijenjati po zelji korisnika:

Na srecu, postoji WinAPI funkcija pomocu koje mozes dobiti punu putanju izvrsne datoteke. Zove se GetModuleFileName(), toj funkciji kao jedan od argumenata treba i handle do trenutnog procesa (tvog programa koji se izvrsava) . Taj handle mozes dobiti pozivom na GetModuleHandle() kojem kao argument proslijedis NULL, i tako dobijes handle procesa koji je pozvao tu funkciju (handle do tvog programa). 

 

#include <stdio.h>
#include <windows.h>

int main(int argc, char **argv)
{
    char buffer[512];
    GetModuleFileName(GetModuleHandle(NULL), buffer, 512);
    printf("PUTANJA: %s\n", buffer);

    return 0;
}

 

Problem je sto osim putanje dobijes i ime datoteke u istom stringu. To mozes sâm rucno ukloniti bez nekih problema, ili mozes koristiti funkciju PathRemoveFileSpec() koja ce to uciniti za tebe:

 

#include <stdio.h>
#include <windows.h>
#include <shlwapi.h>

int main(int argc, char **argv)
{
    char buffer[512];
    GetModuleFileName(GetModuleHandle(NULL), buffer, 512);
    PathRemoveFileSpec(buffer);
    printf("PUTANJA: %s\n", buffer);

    return 0;
}

 

No, da bi koristio tu funkciju moras dodati header shlwapi.h i linkati sa bibliotekom shlwapi.lib ako koristis microsoftov compiler, odnosno libshlwapi.a ako koristis mingw compiler.

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put čet 19.1.2012 15:45 (rustweaver).
14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Vježbam malo nešto, za par dana natjecanje.

Zapeo sam.

http://pastebin.com/nyfmqyA3

Ovo je zadatak.

(tl;dr; treba upisat jedan 5-znamenkasti broj, zatim 5 charova, ako je char = 'D' onda se znamenka koja je ista po redu kao i char zbraja sumi, npr. 74210, D, K, K, D, K, ispis će biti: 8, jer je 7 prva znamenka a i prvi je char bio D isto tako i za 4.)

Moje rješenje:
#include <stdio.h>
#include <stdlib.h>

int main ()
{
        char broj[4];
        char bar[4];
        int bro[4];
        int zbroj=0;

        scanf ("%s", broj);
        scanf ("%c", &bar[0]);
        scanf ("%c", &bar[1]);
        scanf ("%c", &bar[2]);
        scanf ("%c", &bar[3]);
        scanf ("%c", &bar[4]);

        for (int x=0; x<4; x++)
        {
            bro[x]=atoi(broj[x]);
        }

        for (int i=0; i<4; i++)
        {
            if (bar[i] == 'D') zbroj=zbroj+bro[i];
        }

        printf("ZBROJ JE: %d", zbroj);

}
Kad pokrenem program, i upišem 2. char, dobijem Segmentation fault.

Ima li itko kakvu ideju?
Hvala najljepša!

Vrijeme je za promjene...
 
0 0 hvala 0
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Makni iz scanf-a '&'.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
Poruka je uređivana zadnji put čet 19.1.2012 19:03 (1domagoj1).
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
1domagoj1 kaže...

Makni iz scanf-a '&'.

warning: format ‘%c’ expects type ‘char *’, but argument 2 has type ‘int’

Znači sad stavim char *bar[4] ?

 

^ Ovo s *bar[4] nevermind, odma dobim segmentation fault lol

 

Vrijeme je za promjene...
Poruka je uređivana zadnji put čet 19.1.2012 19:05 (BenjamiX).
17 godina
moderator
offline
Re: Programiranje u C-u - od svega pomalo

Imaš ti tu hrpu čudnih stvari. Jesi to uopće probao kompajlirati? Meni Code::Blox to ne želi kompajlirati! I lijepo izbaci hrpu grešaka - o čemu ti radiš, a da ti ne ispiše gdje imaš greške?

 

Napisao si da ti bar ima 4 elementa - a koliko ti elemenata scanf-aš? 5!

 

Na liniji bro[x]=atoi(broj[x]); mi ispiše grešku invalid conversion from char to const char*. Koja je svrha te linije?

14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
mbaksa kaže...

Imaš ti tu hrpu čudnih stvari. Jesi to uopće probao kompajlirati? Meni Code::Blox to ne želi kompajlirati! I lijepo izbaci hrpu grešaka - o čemu ti radiš, a da ti ne ispiše gdje imaš greške?

 

Napisao si da ti bar ima 4 elementa - a koliko ti elemenata scanf-aš? 5!

 

Na liniji bro[x]=atoi(broj[x]); mi ispiše grešku invalid conversion from char to const char*. Koja je svrha te linije?

Kompajlam s gcc -std=c99. (inače Code::Blocks za edit koda)

 

Pa nije li 0 isto element?
Mislim u bar, nejde li 0, 1, 2, 3, 4?

 

U toj se liniji iz stringa brojeva, jedna po jedna znamenka sprema u bro.

 

 

Vrijeme je za promjene...
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Joj, sry, zajeba*l sam se, treba ici '&' kod ovih scanfova. Krivo sam gledal.

 

Da, 0 je indeks prvog elementa, ali ti kad definiras to polje, kazes mu KOLIKO ima elemenata, a kad ides brojiti kreces OD 0. indeksa. Dakle, char broj[4] znaci da su unutra elementi 0, 1, 2, 3.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
Poruka je uređivana zadnji put čet 19.1.2012 19:20 (1domagoj1).
 
0 0 hvala 0
17 godina
moderator
offline
Re: Programiranje u C-u - od svega pomalo
BenjamiX kaže...
Pa nije li 0 isto element?

Mislim u bar, nejde li 0, 1, 2, 3, 4?

Pa je. Upravo zato. Kako si deklarirao varijalu bar? Kao: char broj[4];

 

To znači da ona ima 4 elementa, a ne da elementi idu od 0 do 4 (jer je to 5 elemenata)!

 

BenjamiX kaže...
U toj se liniji iz stringa brojeva, jedna po jedna znamenka sprema u bro.

Znamenke si mogao dobiti i tako da oduzmeš nulu od njih! Pa misli da sam baš na ovoj temi na prošloj stranici dao jedan takav kod. Dakle, umjesto atoi(char_varijabla) mogao si koristiti char_varijabla-'0';

 

Nadalje, kad unosišbroj - koliko ti je dugačak taj string? 4 elementa. Međutim, ti želiš koristiti sva četiri elementa, zar ne? Jer ga kod unosa koristiš kao string, a ne kao niz znakova. Od čega se sastoji string? Od znakova koji na kraju zaršavaju nul-znakom. To znači da ako u polje od četiri znaka uneseš string od četiri znaka, da će nul-znak prebrisati mjesto u memoriji iza toga gdje se nalazio taj niz znakova! Dakle, polje broj deklariraj s barem pet elemenata.

 

BTW nazivi vaijabli su ti fakat umjetnički - ne zna se što bi koja trebala značiti.

 

Također, zašto elemente polja bar ne učitavaš u petlji?

17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Prvo, u main() nemas return 0;, tako da kompajler ispisuje -Wreturn-type warning, tj. 'control reaches end of non-void function'. Popravi to.

 

Drugo, kao sto je mbaska pitao, zasto ne koristis for petlju za ucitavanje?

Trece, scanf() je dosta sjeba*na f-ja, erm, trebat ces flushati buffer ako zelis da ti scanf() to sve ucita. Dakle, ovako to bi izgledalo:

 

// code omitted  

    char ch;

    scanf ("%s", broj);
   
    for (i = 0; i < 4; ++i)
    {
        scanf ("%c", &bar[i]);
        while ((ch = getchar()) != '\n' && ch != EOF); // flushanje buffera
    }

// code omitted

 

Cetvrto, negdje je isto neka greska u liniji s atoi funkcijom, to mi se nije dalo gledati, probaj sam skuziti.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
 
0 0 hvala 0
17 godina
moderator
offline
Re: Programiranje u C-u - od svega pomalo
1domagoj1 kaže...

    for (i = 0; i < 4; ++i)
    {
        scanf ("%c", &bar[i]);
        while ((ch = getchar()) != '\n' && ch != EOF); // flushanje buffera
    }

Zapravo mu je za flushanje buffera dovoljno getchar(); - samo se isto mora sjetiti napisati i odmah iza scanf ("%s", broj);

14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

#include <stdio.h>

int main ()
{
        char broj[5];
        char bar[5];
        int bro[5];
        int zbroj=0;

       gets(broj);
       for (int i=0; i<4; i++)
       {
           scanf ("%c", &bar[i]);
       }

       for (int x=0; x<4; x++)
       {
           bro[x] = broj[x] - '0';
       }

       for (int y=0; y<4; y++)
       {
           if (bar[y] == 'D') zbroj = zbroj + bro[y];
       }

       printf ("ZBROJ JE: %d", zbroj);
       return 0;
}

Evo update koda.

Bolje?

Vrijeme je za promjene...
 
0 0 hvala 0
17 godina
moderator
offline
Re: Programiranje u C-u - od svega pomalo
BenjamiX kaže...

#include <stdio.h>

int main ()
{
        char broj[5];
        char bar[5];
        int bro[5];
        int zbroj=0;

       gets(broj);
       for (int i=0; i<4; i++)
       {
           scanf ("%c", &bar[i]);
       }

       for (int x=0; x<4; x++)
       {
           bro[x] = broj[x] - '0';
       }

       for (int y=0; y<4; y++)
       {
           if (bar[y] == 'D') zbroj = zbroj + bro[y];
       }

       printf ("ZBROJ JE: %d", zbroj);
       return 0;
}

Evo update koda.

Bolje?

Zašto nas pitaš jel je bolje? Radi li ti program? Vidim da nigdje nisi koristio getchar - možeš upisati sve brojeve?

 

BTW čemu ovo?

bro[x] = broj[x] - '0';

 

Zar se to ne može napisati kao:

bro[x] -= '0';

 

 

Čemu ovo?

if (bar[y] == 'D') zbroj = zbroj + bro[y];

 

Zar se to ne može napisati kao:

if (bar[y] == 'D') zbroj += bro[y];

 

 

BTW zašto koristiš tri različita identifikartora za brojač? i, x, y? Razumiješ da varijable koje deklariraš unutar for (...), da te varijable ne postoje izvan petlje? Dakle, u svim tim slučajevima možeš koristiti isti identifikator - preporučjivo i. Drugu varijablu za petlju uvodiš ako imaš petlju unutar petlje, pa onda imaš i, j ili x, y. To je programerska praksa.

13 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Zdravo. Mozete li mi pomoci...Sa tastature se ucitava broj n i niz od n brojeva, a zatim se ucitava broj k. odstampati sve elemente niza manje od k...

int i, n, k;

 

   printf("Učitati broj elemenata");

   scanf("%d", &n);

   int*niz=(int*)malloc(sizeof(int)*n);

   for (i=0; i<n; i++)

   scanf("%d", &niz[i]);

   scanf("%d", &k);

   for(i=0; i<n; i++)

   if(niz[i]<k)

   printf("Brojevi manji od k su %d\n, niz[i]");

 

   return 0;

}

 

Ali na zalost nece...{#}{#}

 
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice