Problém s mezerou mezi znaky – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s mezerou mezi znaky – C / C++ – Fórum – Programujte.comProblém s mezerou mezi znaky – C / C++ – Fórum – Programujte.com

 

Orcslayer0
Stálý člen
20. 11. 2007   #1
-
0
-

Ciao.
Mám takový "malý" problém v C++. V případě, že chci ze standardního vstupního proudu přijmout znaky, mezi kterými je mezera, program spadne. :/ "Normální" řetězec bez mezer to spolkne, ale s mezerou už ne. Neví někdo co s tím? Je to kompilerem (Dev-C++) nebo je chyba na opačné straně klávesnice (u špatného pochopení práce se znaky)? :)
Pokud to už někde je, tak se omlouvám, ale hledal jsem. :o)

Nahlásit jako SPAM
IP: 85.70.82.–
yaqwsx+9
Posthunter
20. 11. 2007   #2
-
0
-

NO mozna by se hodil kod....

Nahlásit jako SPAM
IP: 85.160.108.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Orcslayer0
Stálý člen
20. 11. 2007   #3
-
0
-

To yaqwsx :



#include <iostream>

using namespace std;

int main ()
{
char blabla[100];
cin >> blabla;

// cout << blabla << endl;

cin.get();
cin.get();

return 0;
}


,) Jak jsem popsal výše. Jinak je to jen u toho vstupu. Když si nadeklaruji řetězec s mezera, tak program norm. běží. :)

Nahlásit jako SPAM
IP: 85.70.82.–
Dodo0
Newbie
20. 11. 2007   #4
-
0
-

To Orcslayer : preco to mas u toho cout ako poznamku?

Nahlásit jako SPAM
IP: 87.244.222.–
Orcslayer0
Stálý člen
21. 11. 2007   #5
-
0
-

To Dodo :
Jo, sorry. :)) Testoval jsem, čím to asi bude... tzn jsem třeba cout zapoznámkoval, abych si byl jistý, že to spadne opravdu po cinu. ,)
Každopádně už jsem dostal echo, jak cca na to, takže to třeba pak pofachčí, až se k tomu dostanu. :)

Nahlásit jako SPAM
IP: 85.70.82.–
Jonyzz0
Návštěvník
21. 11. 2007   #6
-
0
-

To Orcslayer : Problém je v objektu cin, ten načítá znaky ve vstupní frontě dokud nenarazí na nějaký bílý znak (mezeru, konec řádky, tabulátor, ...) a poté nechá zbytek znaků ve vstupní frontě. To dělá přesně tvůj program, pokud zadáš dvě slova oddělená mezerou, načte do proměnné jenom to první a zbytek nechá ve vstupní frontě, řetězec se následně pomocí cout vypíše a zbývající 2 volání cin.get() načtou pouze zbylé znaky ze vstupní fronty, takže se program ukončí aniž by čekal na zadání klávesy enter.
Pro načítání řetězců používej cin.getline() :



char blabla[100];
cin.getline(blabla, 99); // Načte 99 znaků do blabla

Nahlásit jako SPAM
IP: 62.40.69.–
Jeyekomon0
Stálý člen
22. 11. 2007   #7
-
0
-

To Jonyzz :
Mohl bych k tomu pouzit i
cin.get(blabla, 99);
?? Rek bych, ze jo, nejak nevidim ten rozdil mezi obema funkcemi..

Nahlásit jako SPAM
IP: 195.113.31.–
jjk
yaqwsx+9
Posthunter
22. 11. 2007   #8
-
0
-

To Jeyekomon : NO getline precte cely radek vcetne mezer,cin pouze po prvni bily znak

Nahlásit jako SPAM
IP: 85.160.69.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Jeyekomon0
Stálý člen
22. 11. 2007   #9
-
0
-

yaqwsx napsal:
To Jeyekomon : NO getline precte cely radek vcetne mezer,cin pouze po prvni bily znak


To yaqwsx :
NO, ja bych tvrdil, ze funkce
cin >>blabla;

a
cin.get(blabla);

jsou ruzne minimalne v tom, ze ta prvni opravdu precte vse po prvni bily znak, ale ta druha se chova jako
cin.getline(blabla);

a precte tedy cely radek.
Pokud se mylim, pak se omlouvam za svou neznalost.

Nahlásit jako SPAM
IP: 195.113.33.–
jjk
yaqwsx+9
Posthunter
22. 11. 2007   #10
-
0
-

To Jeyekomon : NO ne.Ta druha ukonci vstup pri bilem znaku a nebo precteni daneho poctu naku

Nahlásit jako SPAM
IP: 85.160.69.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
tmi0
Věrný člen
23. 11. 2007   #11
-
0
-

To yaqwsx : skutecne? to je pro me novina. dosud jsem zil v domneni ze metoda getline(char* a, int b) precte bud b znaku, nebo cte do nejblizsiho znaku konce radku nebo souboru (parametr b nemusi byt zadan). mezery i tabulatory tedy precte bez problemu (ackoli to jsou bile znaky). ale pokud byla zmenena implementace standardni knihovny jazyka c++ a ja o tom nevim jsem rad ze jsem byl informovan...

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
yaqwsx+9
Posthunter
23. 11. 2007   #12
-
0
-

Tak ja ziji v tomto domeni - opsal jsem to z knihy rozumime C++

Nahlásit jako SPAM
IP: 85.160.66.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
tmi0
Věrný člen
23. 11. 2007   #13
-
0
-

To yaqwsx : a vyzkousel jsi si to? ja jsem si to ted pro jistotu napsal a pres vsechna ma ocekavani getline skutecne dela to ce jeho nazev evokuje, tedy nacte radek. bily znak je skutecne totiz i mezera nebo tabulator, takze tebou zadana definice neni spravna...
ta kniha ma tedy zajimavy nazev, je li v ni psano to co zde popisujes))

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
yaqwsx+9
Posthunter
24. 11. 2007   #14
-
0
-

TAk to cumim!Tady toto jsem si nikdy nezkousel...Ale je to tak jak pise tmi...opravdu vse co jsem napsal beru zpet.

Nahlásit jako SPAM
IP: 85.160.103.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 19 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý