Programiranje u C-u - od svega pomalo izdvojena tema

poruka: 1.661
|
čitano: 388.465
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
captain_soap_McTawish kaže...
royalhero kaže...

return 0; govori da je sve uredno odrađeno, bez run-time grešaka, ako vratiš neki drugi broj u opsegu int-a, OS-u javljaš da je došlo do run-time greške.

Ma to sam ubrzini napisao. Malo gledam onu knjigu c++ za apsolutne početnike pa mi je to ostalo u glavi.

 

Inače koliko znam to sa povratnom vrijednosti kao indikatorom run-time errora se ne koristi toliko puno danas?

 

Koristi se, ali na jednom višem nivou. Npr. kada aplikacija A (neka igra) instalira aplikaciju B (DirectX). Aplikacija A mora znati da li je DX uspješno instaliran ili ne a to gleda preko statusa aplikacije B. Za takvo što obično se koristi kombinacija CreateProcess i WaitForSingleObject funkcije.

Poruka je uređivana zadnji put sub 19.11.2011 22:46 (TracerCPP).
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Sve vise problema sa podesavanjem CB za rad sa odredenim compilerom, valjda tvorcima nije palo na pamet da ce netko tko se bavi programiranjem imati problema sa podesavanjem IDE-a. {#}

 

Mozda bi netko trebao napraviti tutorial kako se pravilno podesava GCC compiler unutar Code Blocksa?

My computer once beat me at chess, but we got even after a round of boxing.
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
rustweaver kaže...
Mozda bi netko trebao napraviti tutorial kako se pravilno podesava GCC compiler unutar Code Blocksa?

Što se tu ima pokazivati, Settings-Compiler and Debugger-Selected compiler:GNU/GCC compiler-Toolchain executables-C compiler:mingw32-gcc.exe-

C++ Compiler:mingw32-g++.exe.

Programming is understanding. – Kristen Nygaard
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
1domagoj1 kaže...
captain_soap_McTawish kaže...

Ma to sam ubrzini napisao. Malo gledam onu knjigu c++ za apsolutne početnike pa mi je to ostalo u glavi.

 

Inače koliko znam to sa povratnom vrijednosti kao indikatorom run-time errora se ne koristi toliko puno danas?

U C-u moras sam handleati errore jer ne postoji podrska od samog jezika za tako nesto.

Na što točno misliš? Na hendlanje povratne vrijednosti samog main-a ili nešto tipa exception?

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

Na što točno misliš? Na hendlanje povratne vrijednosti samog main-a ili nešto tipa exception?

I jedno i drugo. Ja bar ne znam da postoji neki mehanizam tipa try...catch recimo.

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

Na što točno misliš? Na hendlanje povratne vrijednosti samog main-a ili nešto tipa exception?

I jedno i drugo. Ja bar ne znam da postoji neki mehanizam tipa try...catch recimo.

U C-u je to dosta nezgodno. Jedino mi na pamet pada fork-wait kombinacija, ali opet, to je specifičan slučaj i to još samo pod linuxom (postoje neke emulacije za windowse ali o-tom-po-tom). A umjesto try-catch u C++u postoji još i GetLastError (mislim da je winapi), a za C se baš i ne sjećam. No, zaista nema niti previše smisla takve stvari raditi pod C-om kad tu C++ nudi puno više.

Poruka je uređivana zadnji put sub 19.11.2011 23:06 (TracerCPP).
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
TracerCPP kaže...

U C-u je to dosta nezgodno. Jedino mi na pamet pada fork-wait kombinacija, ali opet, to je specifičan slučaj i to još samo pod linuxom (postoje neke emulacije za windowse ali o-tom-po-tom). A umjesto try-catch u C++u postoji još i GetLastError (mislim da je winapi), a za C se baš i ne sjećam. No, zaista nema niti previše smisla takve stvari raditi pod C-om kad tu C++ nudi puno više.

Jep. Samo mali ispravak. To ce raditi na POSIX compliant sustavima, ne samo na Linuxu (koji i nije 100% POSIX compliant).

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

A umjesto try-catch u C++u postoji još i GetLastError (mislim da je winapi), a za C se baš i ne sjećam.

je winapi je, i nije vezan za C++ nego se moze koristiti iz bilo kojeg jezika koji moze raditi winapi pozive

My computer once beat me at chess, but we got even after a round of boxing.
17 godina
moderator
online
Re: Programiranje u C-u - od svega pomalo
rustweaver kaže...
TracerCPP kaže...

A umjesto try-catch u C++u postoji još i GetLastError (mislim da je winapi), a za C se baš i ne sjećam.

je winapi je, i nije vezan za C++ nego se moze koristiti iz bilo kojeg jezika koji moze raditi winapi pozive

Ako se ne varam, WinApi dolazi u obliku headera za jezik C i onda su ljudi prilagodili te headere za razne programske jezike - tj. "prepisali" su ih u Pascal/Delphi, VisualBasic...

13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
mbaksa kaže...
Ako se ne varam, WinApi dolazi u obliku headera za jezik C i onda su ljudi prilagodili te headere za razne programske jezike - tj. "prepisali" su ih u Pascal/Delphi, VisualBasic...

Da za C i C++ dolazi u windows.h headeru, a za ostale neznam.

Programming is understanding. – Kristen Nygaard
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
rustweaver kaže...
TracerCPP kaže...

A umjesto try-catch u C++u postoji još i GetLastError (mislim da je winapi), a za C se baš i ne sjećam.

je winapi je, i nije vezan za C++ nego se moze koristiti iz bilo kojeg jezika koji moze raditi winapi pozive

Ako je nešto winapi onda se i podrazumjeva da nije samo za jedan programski jezik. Riječ je o pozivima sistemskih dll funkcija pa gotovo svaki programski jezik danas (barem ovi novije generacije) je sposoban to koristiti.

Poruka je uređivana zadnji put ned 20.11.2011 11:22 (TracerCPP).
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
mbaksa kaže...

Ako se ne varam, WinApi dolazi u obliku headera za jezik C i onda su ljudi prilagodili te headere za razne programske jezike - tj. "prepisali" su ih u Pascal/Delphi, VisualBasic...

U biti je C-ov ABI osnova za WinApi. Svaki program koji moze pozivati funkcije u stdcall/cdecl standardu moze raditi sa WinApi-jem (i vise manje svim ostalim bibliotekama, jer je stdcall/cdecl nepisani standard za staticke i dinamicke biblioteke). Nadolazeci WinRT ce biti drukcija zvijerka, kako je zasnovan na objektno orjentiranim principima, bit ce prilagoden C++ i ostalim OOP jezicima.

 

TracerCPP kaže...

Ako je nešto winapi onda se i podrazumjeva da nije samo za jedan programski jezik.

U potpunosti se slazem. Komentirao sam samo zato sto je iz tvog posta ispalo da je GetLastError nesto vezano uz C++.

My computer once beat me at chess, but we got even after a round of boxing.
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

#include<stdio.h>
int main() {
int brsam=0,brostalih=0;
char znak=1;
while (znak!='0') {
scanf("%c", &znak);
switch (znak){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':brsam++;break;
default:brostalih++;
}
}
printf("Broj samoglasnika je %d a ostalih %d", brsam, brostalih);
 return 0;
}

 

hoce mi tko objasnit zas ovo ne radi (sredio sam da radi), al me zanima logicno objasnjenje zasto je ovo neispravno 

 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Killa Cam kaže...

#include<stdio.h>
int main() {
int brsam=0,brostalih=0;
char znak=1;
while (znak!='0') {
scanf("%c", &znak);
switch (znak){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':brsam++;break;
default:brostalih++;
}
}
printf("Broj samoglasnika je %d a ostalih %d", brsam, brostalih);
 return 0;
}

hoce mi tko objasnit zas ovo ne radi (sredio sam da radi), al me zanima logicno objasnjenje zasto je ovo neispravno 

??, znaš li ASCII abecedu?

Programming is understanding. – Kristen Nygaard
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
kakve sad to veze ima, samo je bitno da je razlicito od nule, ako ti je draze napisi 77 ili 45 ili 123 ili 84
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Samoglasnike računa dobro, a suglasnike ne?

Programming is understanding. – Kristen Nygaard
Poruka je uređivana zadnji put ned 20.11.2011 19:00 (royalhero).
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Malo sam razmatrao i iz znatiželje u elseif stavim sve suglasnike, i radi.{#}
#include<stdio.h>int main()

{    int brsam=0,brostalih=0;    char znak;    while (znak!='0') {       scanf("%c", &znak);       if(znak=='a'||znak=='e'||znak=='i'||znak=='o'||znak=='u')       {             brsam++;       }

       else

       {

            if(znak!=q||znak!=w ||...)//staviš sve suglasnike!               

       {             brostalih++;       }       }   printf("Broj samoglasnika je %d a ostalih %d", brsam, brostalih);   return 0;}

Programming is understanding. – Kristen Nygaard
Poruka je uređivana zadnji put ned 20.11.2011 19:08 (royalhero).
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
jep, izgleda kao da on shvaca enter kao znak (mislim, on je isto znak, ali sam specificirao format upisa pa ne kuzim kak racuna i enter)
program radi ako stavim switch u if petlju (if znak!=10) ali zasto??
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
royalhero kaže...

Malo sam razmatrao i iz znatiželje u elseif stavim sve suglasnike, i radi.{#}
#include<stdio.h>int main() {int brsam=0,brostalih=0;char znak;while (znak!='0') {scanf("%c", &znak);if(znak=='a'||znak=='e'||znak=='i'||znak=='o'||znak=='u'){    brsam++;}else if(znak=='q'||znak=='w'||znak=='r'||znak=='t'||znak=='z'||znak=='p'||znak=='s'||znak=='d'||znak=='f'||znak=='g'||znak=='h'||znak=='j'||znak=='k'||znak=='l'||

znak=='y'||znak=='x'||znak=='c'||znak=='v'||znak=='b'||znak=='n'||znak=='m')  //ovo sve stavi u jedan red, meni nije htio prikazati.{    brostalih++;}}printf("Broj samoglasnika je %d a ostalih %d", brsam, brostalih); return 0;}

 znam znam, ali zasto mi sluzi onda break u  petlji?

17 godina
moderator
online
Re: Programiranje u C-u - od svega pomalo
Killa Cam kaže...
hoce mi tko objasnit zas ovo ne radi (sredio sam da radi), al me zanima logicno objasnjenje zasto je ovo neispravno 

Prvo - indentacija? WTF? Razmaci s lijeve strane i razmaci prije i poslije petlji - gdje su?

 

Ključnu stvar si i sam skužio - znak 10 iliti Enter.

 

Nadalje, kakva je to fora s while petljom? Nisi čuo za do-while? Koja je razlika između njih? Kad se koja koristi? Koja tebi treba?

 

Na kraju - zašto je bitno je li znak != 10? Zar ne bi trebalo bitno je li znak među slovima? Ili barem je li u dijelu od slova A nadalje? Jesu razmaci suglasnici? Jesu specijalni znakovi suglasnici?

 

#include<stdio.h>

int main() {
    int brsam=0,brostalih=0;
    char znak;

    do {
        scanf("%c", &znak);
        switch (znak){
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':brsam++;break;
            default: if (znak >= 'A' && znak <= 'z') brostalih++;
        }
        // printf("[%d]", znak);
    } while (znak!='0');

    printf("Broj samoglasnika je %d a ostalih %d", brsam, brostalih);
    return 0;
}

 

17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
gle gle nisam trazio da komentiras umjetnicki dojam, vec da mi objasnis (ne samo ti) zasto on smatra enter unešenim znakom, odnosno, ako ja upisem slovo a i stisnem enter, a unutar scanf-a (pise %c, a ne %c%c), zasto on uzima i taj enter?
17 godina
moderator
online
Re: Programiranje u C-u - od svega pomalo
Killa Cam kaže...
gle gle nisam trazio da komentiras umjetnicki dojam, vec da mi objasnis (ne samo ti)

Ako ne misliš brinuti o "umjetničkom dojmu" možeš jednostavno otpiriti s ovog foruma, OK? Iz izuzetne je važnosti kako se indentira kod, dakle kako se stavljaju razmaci, jer to jako utječe na čitljivost i minimalizira mogućnost pogreške. Od ljudi na ovom forumu tražiš pomoć - onda im daj korektno oblikovan kod, a ne te svoje ispljuvke. Ako ne znaš sam indentirati kod, imaš on-line beautifiere, poput: http://jsbeautifier.org/

 

Ako ne misliš davati korektno oblikovan kod, samo reci - ekspresno dobiš crni i možeš nastaviti na nekom drugom forumu.

 

Da, još jedna stvar što se tiče "umjetničkog dojma" - petlje while i do-while postoje s razlogom - ako koristiš pogrešnu petlju, netko ti za to treba prigovoriti. Naime, primarna namjena ovog podforuma je edukacija vezana uz programiranje - ako korištenje pogrešne petlje prolazi nezapaženo, ljudi se mogu dezinformirati.

 

Također ono što si pitao "kakve sad to veze ima, samo je bitno da je razlicito od nule, ako ti je draze napisi 77 ili 45 ili 123 ili 84 " - ima veze - uspoređuješ broj i znak. Ili uspoređuj dva znaka ili uspoređuj dva broja. Što kad netko drugi manje upućen pogleda tvoj kod?

 

Killa Cam kaže...
vec da mi objasnis (ne samo ti) zasto on smatra enter unešenim znakom

Zato. Zadovljan odgovorom?

 

 

BTW zapravo je trebalo switchati tolower(znak), jer ovako kako je sad, ne broji "velike samoglasnike".

Poruka je uređivana zadnji put ned 20.11.2011 17:08 (mbaksa).
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

sori šefe, odgovor ti je stvarno na razini. sad mi je sve mnogo jasnije

Poruka je uređivana zadnji put ned 20.11.2011 17:15 (Killa Cam).
17 godina
offline
Re: Programiranje u C-u - od svega pomalo
Killa Cam kaže...
jep, izgleda kao da on shvaca enter kao znak (mislim, on je isto znak, ali sam specificirao format upisa pa ne kuzim kak racuna i enter)
program radi ako stavim switch u if petlju (if znak!=10) ali zasto??

Na taj način si iz switch grananja eliminrao brojanje enter znaka kojeg lupiš za unos

program ti nije pogrešan, on radi baš ono što si napisao, brojanje unosa samoglasnika i brojanje unosa svih ostalih znakova- a enter je isto znak.

međutim, switch grananje nisi dobro napisao - iza svakog case mora doći naredba break.

e, sad, ako misliš dobiti brojanje samo suglasnika i samoglsnika - to je onda drugi par postola

drugi umjetnički dojam, reklo bi se.

Poruka je uređivana zadnji put ned 20.11.2011 17:30 (Floki).
17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

ne mora doci break, switch "propada" do prvog breaka, ne mora se stavit break nakon svakog casea, mene zanima kako ja onda mogu napravit da on cita samo jedan znak, odnosno kako da on ne deketira taj enter

 

preciznije, ne razumijem kako on detektira enter ako sam ja u formatskoj specifikaciji naveo citanje samo 1 karaktera (scanf("%c",&znak);)

Poruka je uređivana zadnji put ned 20.11.2011 17:37 (Killa Cam).
17 godina
offline
Re: Programiranje u C-u - od svega pomalo
Killa Cam kaže...
ne mora doci break, switch "propada" do prvog breaka, ne mora se stavit break nakon svakog casea, mene zanima kako ja onda mogu napravit da on cita samo jedan znak, odnosno kako da on ne deketira taj enter

radiš egzibicije switchom, ali nek ti bude, pravilo jest da ide break iza svakog case-a

a koje znakove ti hoćeš unositi u varijablu?

@mbaksa ti je pokazao kako se unose samo slova

 

znak za unos je specjalni znak, njime unosiš sa konzole u scanf naredbu, ali i njega program čita, u scanf si naveo unos jednog znaka, dakle znak + enter - program čita dva znaka

Poruka je uređivana zadnji put ned 20.11.2011 17:50 (Floki).
17 godina
moderator
online
Re: Programiranje u C-u - od svega pomalo
Floki kaže...
Killa Cam kaže...
ne mora doci break, switch "propada" do prvog breaka, ne mora se stavit break nakon svakog casea, mene zanima kako ja onda mogu napravit da on cita samo jedan znak, odnosno kako da on ne deketira taj enter

radiš egzibicije switchom, ali nek ti bude, pravilo jest da ide break iza svakog case-a

To je dopušteno raditi sa switchom, to je nešto sasvim normalno. {#}

 

Killa Cam kaže...
mene zanima kako ja onda mogu napravit da on cita samo jedan znak, odnosno kako da on ne deketira taj enter

Postavljaš krivo pitanje. On čita sve unešene znakove uključujući Enter. Sad je na tebi da isfiltriraš znakove koji ti odgovaraju. U biti sam ti to i pokazao u svom kôdu. Nije mi baš jasno što sad kompliciraš jednostavnu situaciju. Iako ti zapravo tražiš samo jedan znak, ti si sa scanf zapravo zatražio čitavu rečenicu (uključujući i Enter).

 

Postoji inače i funkcija getchar, koja zaista hvata znak po znak.

17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
e pa to me zanimalo, puno hvala na odgovoru, sad mi je stvarno jasnije.
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

I enter ima svoj ASCII kod, 13, možda je Enter nesretan{#}.

Programming is understanding. – Kristen Nygaard
17 godina
moderator
online
Re: Programiranje u C-u - od svega pomalo
royalhero kaže...

I enter ima svoj ASCII kod, 13, možda je Enter nesretan{#}.

Tipka Enter ima svoj konkretni kod (virtual key code ili kako se to već zove). A sad koje ASCII znakove će ona izbaciti - ovisi. O čemu? Moguće o operacijskom sustav, o driveru za tipkovnicu, o programskom jeziku. U spornom programu izbacuje znak 10, u Pascalu mislim da je u pravilu 13, kod nekih će možda izbaciti i dva znaka. Ako se ispisuje u datoteku, onda bi trebala oba znaka jer je to standard pod Windowsima CR+LF. Malo više informacija: http://en.wikipedia.org/wiki/Newline

Nova poruka
E-mail:
Lozinka:
 
vrh stranice