PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (https://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   c++ string podatak i scanf ... (https://forum.pcekspert.com/showthread.php?t=86607)

xx77aBs 07.11.2007. 22:32

c++ string podatak i scanf ...
 
pozdrav ljudi ... evo pokusavam ovdje nest isprogramirati u c++u i sve super ide ... i sad trebam ucitati par stringova ... bas bih htio koristiti string tip podatka ... a ne char array ... al zbog nekog razloga ovaj dolje kod mi ne radi :

Citiraj:

#include
#include

using namespace std;

string r1;

int main(void)
{
scanf("%s",&r1);

cout<
system("pause");
return 0;
}
iz nekog razloga program mi se rusi ... da li uopce funkcija scanf moze raditi s string klasom ?? ako ne moze da li postoji neki nacin na ju natjeram ? za sada sam uspio to ovako napraviti ...


Citiraj:

#include
#include


using namespace std;

string r1;
char temp[256];


int main(void)
{
scanf("%s",temp);

r1=temp;
cout<

system("pause");
return 0;
}

na taj nacin sve radi ... ali imam varijablu viska ... tj. opet koristim char array koji pokusavam zamjeniti string klasom ... da li itko ima ideje kako to napraviti ? treba mi bas taj formatirani unos ... znam da radi s cin i s getline ...

NiGHTSEEkER 11.11.2007. 10:07

hm.. ja radim u c-u, a ne u c++ ali su idensticni programi, s minimalnim razlikama.
pa zasto ne probas #include ubaciti gore? po meni bi ovaj tvoj prvi trebao raditi...

xx77aBs 11.11.2007. 17:55

isto je ... ne radi ... citao sam malo ... scanf ne moze radit s stringom ... samo s char arrayom ...

bracco 26.11.2007. 11:42

Mozda sam malo zakasnio sa odgovorom, ali svejedno, mislim da bi trebalo vako ici:

#include
#include

using namespace std;

int main()
{
cout << "Unesi r1: " << endl;

string r1;

cin >> r1;

cout << r1 << endl;

system("pause");

return 0;
}

socox11 23.01.2008. 11:53

mislim da nemozes koristiti cout i scanf nego cout i cin odnosno printf i scanf

mc_fish 14.02.2008. 03:04

Citiraj:

Autor NiGHTSEEkER (Post 866277)
hm.. ja radim u c-u, a ne u c++ ali su idensticni programi, s minimalnim razlikama.
pa zasto ne probas #include ubaciti gore? po meni bi ovaj tvoj prvi trebao raditi...

string.h je header kao i isotream kao i math kao i stdio...nadalje netreba uopce srting.h jer je on samo za rad sa stringovima ilitiga strlen,strcpy,strncpy,strcmp itd...

Citiraj:

Autor xx77aBs (Post 866644)
isto je ... ne radi ... citao sam malo ... scanf ne moze radit s stringom ... samo s char arrayom ...

kako nemoze? scanf("%s",&string); ne radi?
nauci raditi sa (f)scanfom i (f)prinfom...nije on samo %d,%f i %c

Citiraj:

Autor bracco (Post 879888)
Mozda sam malo zakasnio sa odgovorom, ali svejedno, mislim da bi trebalo vako ici:

#include
#include

using namespace std;

int main()
{
cout << "Unesi r1: " << endl;

string r1;

cin >> r1;

cout << r1 << endl;

system("pause");

return 0;
}

tako nekako...mada mislim(ja osobno) da je kvalitetnije koristiti void main() kada se vec nista s njim ne radi, nadalje #include i getch(); mi je drazi od system pause...cisto zati sto system "bas i nije" c-ova funkcije

Citiraj:

Autor socox11 (Post 933373)
mislim da nemozes koristiti cout i scanf nego cout i cin odnosno printf i scanf

mozes ali uz uvijet da uvrstis odgovarajucu bibliotekicu... nadalje zasto koristiti cin/cout ako ne radis s objektima tj c++,c#?!

munst0r 25.02.2008. 01:16

Citiraj:

Autor mc_fish (Post 951626)
kako nemoze? scanf("%s",&string); ne radi?
nauci raditi sa (f)scanfom i (f)prinfom...nije on samo %d,%f i %c

scanf("%s", ...) ocekuje varijablu tipa char*, a ne String. scanf je izvorno funkcija Ca, a u njemu niti ne postoji String tip podataka. Umjesto toga koristi se char array.

Sama funkcija scanf je dosta "agresivna" i sarat ce po memoriji kolko god treba. Sto se nje tice mozes ti zapisat %s i u varijablu tipa int (ako to kompajler dozvoli). No, to ne znaci da radis ispravnu stvar. Dakle, scanf se ne moze koristiti za zapisivanje u string, nego samo u char array.


Citiraj:

Autor mc_fish (Post 951626)
tako nekako...mada mislim(ja osobno) da je kvalitetnije koristiti void main() kada se vec nista s njim ne radi

void main() nikako i nikada nije dobra stvar. To u nekim (relativno rijetkim) situacijama moze dovesti do nekih zlih i nedobrih stvari. Cak se ni prema ANSI standardu void main() ne bi nikada trebao koristiti. Net je prepun clanaka u kojima je objasnjeno zasto je void main() nepozeljan.

Ako nista drugo, trebalo bi iz ciste pristojnosti vratiti nekakav status operativnom sustavu nakon sto se tvoj program zavrsi. A ne da jadni OS ostane zbunjen, pitajuci se sto se, dovraga, desilo tvome programu... :)

Citiraj:

Autor mc_fish (Post 951626)
mozes ali uz uvijet da uvrstis odgovarajucu bibliotekicu... nadalje zasto koristiti cin/cout ako ne radis s objektima tj c++,c#?!

cin i cout bas i nemaju neke veze s objektima, ali imaju veze sa stringovima. Dakle, ako se koristi tip podataka String, onda se trebaju koristiti i cin i cout.

mc_fish 26.02.2008. 00:28

Citiraj:

scanf("%s", ...) ocekuje varijablu tipa char*, a ne String. scanf je izvorno funkcija Ca, a u njemu niti ne postoji String tip podataka. Umjesto toga koristi se char array.

Sama funkcija scanf je dosta "agresivna" i sarat ce po memoriji kolko god treba. Sto se nje tice mozes ti zapisat %s i u varijablu tipa int (ako to kompajler dozvoli). No, to ne znaci da radis ispravnu stvar. Dakle, scanf se ne moze koristiti za zapisivanje u string, nego samo u char array.
stoji no %s znaci da uzima niz...pa je pogodan za stringove...zato imamo puts i gets...no opet sami scanf je jako pogodan za strukturiranje upisa/citanja itd




Citiraj:

void main() nikako i nikada nije dobra stvar. To u nekim (relativno rijetkim) situacijama moze dovesti do nekih zlih i nedobrih stvari. Cak se ni prema ANSI standardu void main() ne bi nikada trebao koristiti. Net je prepun clanaka u kojima je objasnjeno zasto je void main() nepozeljan.

Ako nista drugo, trebalo bi iz ciste pristojnosti vratiti nekakav status operativnom sustavu nakon sto se tvoj program zavrsi. A ne da jadni OS ostane zbunjen, pitajuci se sto se, dovraga, desilo tvome programu... :)
u skolskim primjerima se rijetko nesto vraca mainu...stoga je nepotreban int main()...a kad se prica o pristojnosti OS-a...onda bi se trebao ukljucivati critical sectione semafore dretve procese itd...no to se ne radi u ovakvim primjerima


Citiraj:

cin i cout bas i nemaju neke veze s objektima, ali imaju veze sa stringovima. Dakle, ako se koristi tip podataka String, onda se trebaju koristiti i cin i cout.
[/quote]

cin i cout dosli sa...dakle imaju veze s objektima;)

Bubba 26.02.2008. 08:40

Citiraj:

Autor mc_fish (Post 951626)
nadalje #include i getch(); mi je drazi od system pause...cisto zati sto system "bas i nije" c-ova funkcijet

A jesi naso primjer; ako je ijedna "popularna" funkcija "neCovska", onda je to definitivno getch() i citav conio.h, koji ne da nema veze s C standardom, nego ne podlijeze niti jednom drugom standardu i iskljucivo je DOS related. Slazem se da system() mozda nije portabilna funkcija, ali je u svakom slucaju dio standardne bibilioteke i podlijeze nekim dokumentiranim pravilima.

mc_fish 26.02.2008. 13:23

Citiraj:

Autor Bubba (Post 960968)
A jesi naso primjer; ako je ijedna "popularna" funkcija "neCovska", onda je to definitivno getch() i citav conio.h, koji ne da nema veze s C standardom, nego ne podlijeze niti jednom drugom standardu i iskljucivo je DOS related. Slazem se da system() mozda nije portabilna funkcija, ali je u svakom slucaju dio standardne bibilioteke i podlijeze nekim dokumentiranim pravilima.


skolski primjeri...dos...get me?

Bubba 26.02.2008. 15:29

Citiraj:

Autor mc_fish (Post 961144)
skolski primjeri...dos...get me?

Kakve veze ima "DOS" sa skolskim primjerom? Ne bi vjerovao, ali danas se gotovo svi "skolski primjeri" izvode pod Windows/Linux platformom gdje nema ni "D" od DOS-a, tako da...

Dule 26.02.2008. 16:32

Citiraj:

Autor Bubba (Post 961247)
Kakve veze ima "DOS" sa skolskim primjerom? Ne bi vjerovao, ali danas se gotovo svi "skolski primjeri" izvode pod Windows/Linux platformom gdje nema ni "D" od DOS-a, tako da...

jer "pause" je DOS (command prompt) naredba i ne radi u linux terminalu...

Bubba 26.02.2008. 18:32

Citiraj:

Autor Dule (Post 961292)
jer "pause" je DOS (command prompt) naredba i ne radi u linux terminalu...

Ali *tko prica o DOS-u*?

Razgovor ide u smjeru da je system() neportabilan (sto nije istina, do na parametra), ili da budem precizniji - neportabilniji od conio.h biblioteke.

Uostalom, http://www.imagesforme.com/out.php/i29682_pause.png.

mc_fish 26.02.2008. 19:22

Citiraj:

Autor Bubba (Post 961247)
Kakve veze ima "DOS" sa skolskim primjerom? Ne bi vjerovao, ali danas se gotovo svi "skolski primjeri" izvode pod Windows/Linux platformom gdje nema ni "D" od DOS-a, tako da...


neznam ja sam u svom "skolovanju" imao dos i 3/486ice:)
doduse sad na faxu radimo pod win32 okruzenjima...

mfolnovic 24.03.2008. 23:00

ajoj ljudi ...
string se ucitava s %s, ali gore si stavio referencu, znaci &r1, sto ne radi, da si stavio samo scanf("%s", r1), radilo bi, scanf sam overload-a r1 u *char, pa kad se ucita, spremi se normalno u string r1 ...

munst0r 25.03.2008. 01:09

Citiraj:

Autor mfolnovic (Post 983685)
ajoj ljudi ...
string se ucitava s %s, ali gore si stavio referencu, znaci &r1, sto ne radi, da si stavio samo scanf("%s", r1), radilo bi, scanf sam overload-a r1 u *char, pa kad se ucita, spremi se normalno u string r1 ...

Ma ajde ne pricaj bedastoce... Samo ces jos zbuniti nekoga...

1) Kao sto rekoh, string tip se ne ucitava sa scanf...
2) Ovo tvoje (bez &) je jos veca glupost od originala...


Sva vremena su GMT +2. Sada je 19:50.

Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger