Nejlepší odpověď
cin.getline () umožňuje zadat řetězec, který má také mezery. Jeho syntaxe je následující: cin.getline (název řetězce, velikost řetězce); Zvažte následující příklad: Předpokládejme, že zadám Hello World pro str i strr. #include
int main()
{
char str[100]", strr[100];
cout<<"Enter the strings : ";
cin.getline( str, 100 ); //enter Hello World
cin>>strr; //enter Hello Word.
cout<
cout<
return 0;
}
Toto je základní rozdíl. cin nezohledňuje mezery v řetězci, zatímco cin.getline uvažuje.
Odpověď
Toto je jeden z nejčastějších problémů, kterým studenti při používání getline () obvykle čelí. funkce.
V době, kdy spouštíte program, zadejte Dillí a stiskněte klávesu Enter. Tento klíč Enter není nic jiného než znak nového řádku. Znaky mezer, jako je mezera na tabulátoru a znak „\ n“, jsou při zadávání hodnoty pomocí cin normálně ignorovány (přeskočeny).
Po vstupu jsou obvykle ve vstupním proudu ponechány další znaky. údajně dokončeno. Poté se předají další vstupní operaci, i když pro ni nejsou určeny. Často je to znak nového řádku, který zůstává pozadu, ale někdy zůstanou i jiné znaky.
Ve vašem programu slouží tento znak nového řádku jako vstup do funkce getline (). Protože tato funkce získala svůj vstup, neumožňuje vám zadat hodnotu. Musíte se tohoto znaku zbavit a poté bude váš program fungovat naprosto dobře.
Chcete-li se zbavit těchto cizích znaků, ignorovat (MAX, DELIM) je použita členská funkce třídy istream. Přečte a vyhodí až MAX znaků, včetně zadaného oddělovače. Tuto funkci použijte před voláním funkce getline () jako:
cin.ignore (1, "\ n");
Vzhledem k tomu, že další znaky mohou obsahovat i prázdné znaky (například po zadání Dillí vložíte mezeru a stisknete klávesu Enter), místo 1 by bylo bezpečnější použít 10.
cin.ignore (10, "\ n");
Nedělejte si starosti s istream třídou. Je deklarována v hlavičkovém souboru IOSTREAM. Navíc , getline () je také členská funkce samotné třídy istream.