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)
Fórum › C / C++
Problém s mezerou mezi znaky
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ěží. :)
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. :)
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
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.
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...
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))
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Výběr textu mezi znaky * a - — založil jirka
Problém se znaky v Dev-C++ 4.9.9.0 a první program — založil paul27
Hezké URL - problém s některými znaky — založil Pavel Straka
Jméno třídy s mezerou — založil geon
C# + registry - prlblém s mezerou v nazvu klíče — založil Mugsat
Moderátoři diskuze