» Poradna » Programy

[C++] začátečník - mezera v poli CHARu

 |   | 

Zdravim,
mam problem s C++.
Mám následující program chci aby se mi do proměnných načítali uživatelem zadaný data, ale problém je v tom, že když se zadá posloupnost znaku s nějakou mezerou (např. jmeno mezera příjmení) tak se do proměnné uloží jenom první slovo a to další se uloží rovnou do další proměnné (newEmail).
Omlouvám se za tak banální věc, ale vážně si s tím nevím rady...


char newJmeno[30], newEmail[30], newTel[15];
...
cout > newJmeno;
cout > newEmail;
cout > newTel;

Odpovědi na otázku

 |   | 

nevyznam sa do syntaxe C++ a som programatorom inych hlbsich jazykov (tasm) ale skus toto:

char newJmeno[];
char newEmail[];
char newTel[];

teda deklaruj s premenlivou srikou datove polia a pre istotu kazde zvlast, nesom si isty ci v definovani datovych poli nema ciarka nejaky vyznam syntaxe

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

a este ma napada jedna banalna vec... podla tohto: http://publications.gbdirect.co.uk/c_book/chapter5/character... ... sa v C++ pole typu string ("znakosled" resp. sled znakov po sebe iducich) ukoncuje kodom 0 (null, ascii kod = 00hex) a je mozne, ze "konzola" v ktorej zapisujes texty, chape medziznakove medzery ako nuly a nie ako ASCII kod 32dec (medzera)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Teda ty mu radis pekne bludy

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Predpokladam, ze je nacitas pres

cin >> promenna;

Tenhle operator ale cte vstup po slovech, pokud chces do promenne nacist celou radku, bezne reseni je:

#include
#include
...
using namespace std;
...
string radka;
getline(cin, radka);

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Koukam ze je tu filtr na HTML tagy, ktery vyhodil nazvy hlavicek u #include. Mely tam byt iostream a string.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

vravim, ze som assemblerista a ani mu neradim, ako skor ze snazim sa ho nasmerovat na spravnu cestu logickeho myslenia aj tak sa C jazyk nikdy nevyrovna Assembleru mno a jedine co, tak viem asi len zaklady stareho C-ecka

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

nuz a nic v zlom, ale mam dojem, ze si pleties C++ s nejakym inym jazykom, lebo C++ neobsahuje datovy typ STRING, alebo som slepy ? -> http://www.cppreference.com/wiki/data_types...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Dekuji za radu vsem! I tobe za snahu, vazne! =)
Ale ted si me dostal. Ja to cely teda predelal z Charu na String --> chyba? :(

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

aha, ale tady uz to je
http://www.cppreference.com/wiki/string/start...

on to totiz asi nebude datovej typ ale třída...? ;)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

tak mam dalsi dovod sa do toho C++ ani nepustit to je az tak sprosty jazyk ?! ze nedokaze pracovat s "retazcom znakov" ? co doteraz kazdy jeden prog.jazyk zvladal... dokonca assembler MS-DOSu a Windowsu laicky povedane zvlada pracu s textovym retazcom na urovni lenze C++ je stale zlozitejsi a zlozitejsi... hm... nevymysleli to Americania ? co z toho C urobili... az sa cloveku rozum zastavuje... ma to byt jazyk blizky assembleru, ale oni robia z toho pomaly, postupne casom, nieco ako je Basic od Microsoftu

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Nechapu..

1) C++ je nadmnozina C, co slo v nem, jde i tady
2) C++ neni jednoduche, je komplexni - pokud tomu nerozumis, neznamena to jeste, ze to je "tak sprosty jazyk"

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Diky, diky!
getline() funguje tak jak chci!

jeste mi vadi, ze kdyz nactu Volbu z navesti CASE, tak se mi tam nejspis nacte i ENTER a preskoci se tak zadavani jmena a skoci to rovnou na mail. Podle moji dedukce se nejspis nacte ENTER do promene newJmeno. Resim to neobratne pomoci cin.get(c);

...
cin > volba;
cin.get(c);
switch(volba)
{
case (1):
cout < endl;
cout < "VLOZENI KONTAKTU: " < endl;
cout < "Jmeno: " < endl;
getline(cin, s);
cout < "Email: " < endl;
...

A potom mam hned dalsi problem, Nechci to od vas naprogramovat, staci mi natuknout.
Tento cely kontakt pak ukladam do souboru. 1radek=1kontakt
Jak udelat kdyz bych pak chtel vyhledat urcite jmeno a vypsat prislusny radek s jeho kontaktem?
Je nejaka vyhledavaci funkce? Nebo si nacist kazdy radek postupne do nejake promenne a ...?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Presne tak, operator >> precte vsechno az do prvniho bileho znaku (na ten nakoukne, ale necha ho v tom streamu cin), takze dalsi getline uz vidi enter a tim hned skonci, vrati prazdny retezec.

Problem je proste kombinovat getline a >>, tim rozdilnym chovanim se tlucou (naopak getline precte radku i s enterem, ktery ale zataji). Pouzivej bud jedno, nebo druhe (prip. precteni toho jednoho charu, to je asi OK, ale trochu neobratne ).

K tomu souboru - nacitej postupne kazdy radek Jakykoliv jiny postup je na naprogramovani neumerne slozitejsi (a nema to ani cenu). Neco jako

string radka;
while (getline(soubor, radka)) {
if (radka.find("toCoHledas") != string::npos) {
// nalezeno
break; // dal uz necteme
}
}
soubor.close();

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Parada!
Sice jsem si s tim uz poradil jeste nez sem si to precetl, ale i tak moc moc diky, takovy lidi jako ty jsou k nezaplaceni. Divim se tomu ze ses tak ochotnej ;)
Jeste jednou diky.
Mej se... a programovani zdar! =)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows XP Firefox 3.6.13

použij cin.getline()

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Tak s tím vyhledáváním už si nějak poradím, objevil jsem zcela překvapivě se jmenující fci Find =)
Ale co mě ještě trápí je otvíraní souboru.
Když ho otevřu F.open() pak ho přečtu pomocí getline() a zavřu F.close(), tak při znovu otevření v jiné smyčce už se mi nic nepřečte, jakobyse při tom prvním čtení nastavil ukazatel na konec souboru a při dalším otevření už nic neviděl. Čím to? =)

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Mezera, Začátečník, První slovo, Posloupnost, Char


Určitě si přečtěte

Co přijde po Netflixu a Amazonu? Tohle jsou streamovací služby, na které v Česku čekáme

Co přijde po Netflixu a Amazonu? Tohle jsou streamovací služby, na které v Česku čekáme

** Rozhodujete se mezi Netflixem a HBO Go? Věřte, bude hůř ** Na trhu je mnohem víc ambicióznějších streamovacích služeb ** Některé by mohly do ČR zamířit ještě letos

Lukáš Václavík | 45

Porovnání deseti cloudových disků: kam a za kolik uložit 100 GB, 1 TB a 10 TB dat?

Porovnání deseti cloudových disků: kam a za kolik uložit 100 GB, 1 TB a 10 TB dat?

** Zjistili jsme, kam do cloudu nejvýhodněji uložíte data ** Vytvořili jsme žebříček cen deseti cloudových úložišť ** Ceny se liší - často i velice výrazně!

Karel Kilián | 102

Jak se žije s telefonem bez Googlu: Čerstvé zkušenosti s telefony Honor a Huawei

Jak se žije s telefonem bez Googlu: Čerstvé zkušenosti s telefony Honor a Huawei

** Honor u nás přichází s prvním telefonem bez Google Mobile Services ** Současný stav je lepší než na začátku, ideální ale není ** Zkusili jsme i hack s ručním přidáním služeb Googlu

Tomáš Holčík | 162

Otestovali jsme 8 mobilů do 8 000 Kč: rozdíly ve výkonu jsou ohromné

Otestovali jsme 8 mobilů do 8 000 Kč: rozdíly ve výkonu jsou ohromné

** Mobil za 8 000 Kč uspokojí většinu uživatelů ** Klasické foťáky stačí, širokáče ale zklamaly ** Zásadní jsou rozdíly ve výkonu

Časopis Computer | 3

Šmírování kamerami Googlu: Koukněte, co šíleného se objevilo na Street View

Šmírování kamerami Googlu: Koukněte, co šíleného se objevilo na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 4

Podívejte se, co dokáže vyrobit jedna z nejexotičtějších 3D tiskáren v Česku

Podívejte se, co dokáže vyrobit jedna z nejexotičtějších 3D tiskáren v Česku

** Na jaře tiskla unikátní české respirátory ** Používá ji třeba Škoda Auto, a.s. ** Zajeli jsme se podívat do pražského showroomu 3Dees

Jakub Čížek | 11

ATM jackpotting: Když hacker ovládne bankomat a stačí mu jen pár sekund

ATM jackpotting: Když hacker ovládne bankomat a stačí mu jen pár sekund

** Klasický malware pro PC už dnes nikoho nepřekvapí ** Bankomaty jsou ale také počítače ** Útočí se na ně dodnes

Jakub Čížek | 7


Aktuální číslo časopisu Computer

Megatest mobilů do 8 000 Kč

Test bezdrátových headsetů

Linux i pro začátečníky

Jak surfovat anonymně