Jump to content
GSForum - Segélyvonal

Programozás C/C++-ban


csutomi

Recommended Posts

csutomi

Nekem egy olyan kérdésem volna, hogy lehet olyat csinálni, hogy például:

char proba="Hello\nvilag";

Ha ezt kiíratom valamivel, pl: MessageBox vagy printf, akkor ugyebár két sorban jelenik meg így:

Hello
vilag

A kérdésem az lenne, hogy azt, hogy a szöveg két sorba jelenjen meg maguk a függvények végzik el, vagy pedig a fordító futtatás elõtt eleve behelyettesíti a megfelelõ karaktert a \n helyére?

Link to comment
Share on other sites

arpsoft

Belefordul a kódba a sortörés.

Link to comment
Share on other sites

Kovács Dávid ( Davs )

A megfelelõ karakter a \n helyére egy white space, egy szóköz ;)

Link to comment
Share on other sites

arpsoft

Persze, ha egy sorba akarja írni. De nem ez volt a kérdés, hanem az, hogy a fordító lefordítja-e a kódba, vagy az oprendszer tudja, hogy két sor. ;)

Link to comment
Share on other sites

csutomi

Pontosabban az, hogy a fordító saját magától tudja, hogy a "\n" entert jelent vagy például a printf függvényt írták meg úgy, hogy ha a stringben "\" jelet talál és "n" van utána, akkor ezeket szedje ki a stringbõl és a két karakter helyett tegye be az enter kódját.

 

Akkor, ha jól értem arpsoft válaszát, az elõbbi verzió az igaz.

Link to comment
Share on other sites

arpsoft

Így van, iletve mindkettõ igaz. A C alapú nyelvekben (pl PHP) a \-es kódok vezérlõkarakterek. A \t például a tabulátor.

Az ezeket feldolgozó függvények vannak úgy kitalálva, hogy a kiírást ennek megfelelõen formázzák, viszont ezeket a függvényeket meg a fordító (most mindegy, hogy compiler vagy interpreter) a proci számára hetõ utasításokká alakítja. Tehát, a fordító is és a függvény is benne van a dologban.

Link to comment
Share on other sites

Lex

A fordító a \n-bõl 10-es (0x0A) kódot készít, amit a printf újsorként hajt végre.

Link to comment
Share on other sites

Gereby

Sziasztok!

Olyan kérdésem lenne, hogy:

Suliban mostantól majd C-t fogunk tanulni... és, hogy most a PCW segítségével belekezdtem a C#-ba fölmerült bennem az, hogy nehogy összekavarjam magam. Tehát kérdésem a következõ: A síma C és a C# között mi a külömbség? Van valami átfedés, vagy netán # az egy bõvített C vagy hogy van ez?

 

Elõrre is köszi!

Link to comment
Share on other sites

csutomi

Talán a legnagyobb különbség, hogy míg a C# objektum orientált, addig a C nem. Én ugyan a C#-ot nem ismerem annyira, de ha jól tudom, akkor annak is a C az alapja hasonlóan a C++-hoz. A C és a C# két különbözõ programozási nyelv.

Link to comment
Share on other sites

Gereby

Holnap lesz az elsõ órám, és akkor ott megkérdezem a tanárt. Az lesz a biztosabb.

Azért köszi!

Link to comment
Share on other sites

horukk

Sziasztok.

C-ben szeretném megírni a saját my_strcpy() függvényt. ( strcpy(c,"string") a függvény az elsõ paraméterként megadott tömbbe másolja a második paraméterként megadott karakterláncot) Azon a ponton elakadtam, hogy a paraméterként megadott sztringet nem tudom átadni a függvénynek. Egy darab karakter átadása megy, de string átadása nem.

Kérem segítsen valaki. Köszi.

Link to comment
Share on other sites

Lex

Talán írd le ide, amit eddig csináltál, hogy ki tudjuk javítani, mert akár mi is megírhatjuk a progit (pár sor), de abból nem tanulsz.

Egyébként valahol a char, char * -nál lesz a hiba (így látatlanban).

Link to comment
Share on other sites

horukk

Kösz a gyors reagálást.

Elsõ nekifutásra a stringet ('52') szeretném berakni a c[] tömbbe. Nem igazán akar összejönni. Ha a paraméterként megadott string helyett változót használnék, úgy talán menne a dolog. A változónak van címe, azt át tudnám adni. De a stringnek nincs. És a feladat a string átadásról szól.

 

 

#include<stdio.h>

#include<conio.h>

#include<string.h>

 

 

char c[10];

char *sp;

sp=c; //sp pointer c[0] elemére mutat.

 

int my_strcpy(char sp){

 

printf("\n%c",c[0]);

 

 

return 1;

}

 

 

int main(){

 

 

/*printf("\n%c",c[3]);

*(sp+3)='5';

printf("\n%c",c[3]);*/

 

my_strcpy('52');

 

return 1;

 

}

Link to comment
Share on other sites

horukk

Itt van a változó átadás, az mûködik.

#include<stdio.h>

#include<conio.h>

#include<string.h>

 

 

char c[3]={'A','2','3'};

char *sp;

 

 

int my_strcpy(char *_e){

 

printf("\n%c",*_e);

 

 

return 1;

}

 

 

int main(){

sp=c;

 

/*printf("\n%c",c[3]);

*(sp+3)='5';

printf("\n%c",c[3]);*/

 

my_strcpy(sp);

 

return 1;

 

}

Link to comment
Share on other sites

Lex

Már bocs, de itt sehol se látok string másolást. És az elõbb, még kétparaméteres fv-t írtál.

Maradj az eredeti elképzelésnél. Átadsz egy stringre mutató pointert és egy konstans stringet (string literált). Ezt dolgozd fel. Ügyelj a típusokra.

Tipp: stringet csak karakterenként lehet másolni!

Link to comment
Share on other sites

horukk

A feladat valóban 2 paraméteres, de elõbb a sztring átadást szeretném megérteni. Azt szeretném elérni elsõ nekifutásra, hogy pl: my_strcpy('abc') paramétere kerüljön át egy tömbbe a függvény törzsébe. Ha nem az 'abc' szrtinget szeretném átadni, hanem mondjuk egy változót, karaktertömböt, az megy. De a multi character az nem.

Link to comment
Share on other sites

Lex

Így mûködik neked?

 

int my_strcpy(char *str){

printf("\n%c",*str);

return 1;

}

 

int main(){

my_strcpy("alma");

return 1;

}

 

Milyen fejlesztõ környezetben dolgozol?

 

Ja, bocs csak most látom: ' - aposztróf közé, csak karaktert (értsd: 1 karaktert) lehet írni. Ha string konstanst akarsz megadni, akkor "- idézõjelek közé kell tenni, mert így a stringet lezárja egy '\0' karakterrel.

Link to comment
Share on other sites

horukk

MinGW a környezet.

Igen, mûködik. Így már el tudom tárolni a stringet a függvény törzsében egy tömbbe. A mutatót növelem 1-gyel.

Köszönöm, nagy segítség volt.

Link to comment
Share on other sites

Lex

Szívesen.

A MingW-t a DEV C++-szal használod?

Link to comment
Share on other sites

horukk

Csak a MinGW Developer Studio-t. Miért kéne együtt használni?

Link to comment
Share on other sites

csutomi
char c[3]={'A','2','3'};

@horukk:

Ne haragudj a beleszólásért, csak volna két észrevételem a programoddal kapcsolatban.

 

A fenti értékadást C-ben egyszerûbben is meg lehet tenni, így:

char c[3] = "A23";

vagy így is:

char c[] = "A23";

Másrészt ez azért sem célszerû megadási mód, mert a sztringet C-ben le kell zárni a '\0' karakterrel. Vagyis ha ragaszkodsz az eredeti megadási formához, amit írtál, akkor így jobb:

char c[4] = {'A', '2', '3', '\0'};

 

A másik, hogy a main függvénynek soha ne adj 1-es visszatérési értéket, mert ez azt jelenti (elvileg), hogy a programod valamilyen hiba miatt állt le. Lást az exit(1) függvényt. A helyes érték a nulla. ;):)

Link to comment
Share on other sites

Gereby

Vao! Az elsõ C órám után értem, hogy mit magyaráztok :) Ez tetszik!

Link to comment
Share on other sites

horukk

Lex, frankón mûködik a my_strcpy() függvényem. Ezen felbuzdulva megcsináltam a my_strlen() függvényt is. Ezekbõl adódott egy kérdésem, ami a következõ lenne:

Hogyan tudok készíteni fejlécfájlt a saját függvényekhez? Ha lenne mondjuk egy my_file.h fejlécfájlom, amiben szerepelne a fentebb említett két függvény, akkor elég lenne incude-olni, és már mûködnének is a függvényeim. Nem kellene minden programban megírni õket.

Eme problémához is várom a segítõkész hozzászólásokat.

Link to comment
Share on other sites

horukk

csutomi, kösz az észrevételt, ebbõl is tanultam.

Ha jól sejtem, ez csak karaktertömbnél van így, mármint az értékadás.

Link to comment
Share on other sites

Lex

string=karaktertömb

char *alma="1234567890";

char alma[]="1234567890";

a két sor ekvivalens. A tömb neve, mindig egy, a tömb elemeire mutató, elem típusú,pointer.

 

Fejlécfájlt a legegyszerûbb, de ronda módszer, ha magát a függvényt rakod bele. Ennek az a hibája, hogy egy progiban csak egyszer hívhatod be, mert kétszer nem definiálhatsz egy fv-t. A másik hiba, hogy a fordítónak mindig be kell fordítania, így nagyobb proginál sokáig tart. A szebb megoldás, hogy csak a fv. deklarációját helyezed el benne, ami a fv. elsõ sora (a fv. típusa, neve, paraméterei) és a kapcsos zárójel helyett ;-vel lezárod a deklarációt. Ekkor be #include-olhatod minden programodba, ügyelve arra, hogy az elkészült .obj tágymodulhoz hozzálinkeld a fv. lefordított tárgymodulját.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...