Najlepsza odpowiedź
cin.getline () umożliwia wprowadzenie ciągu, który ma również spacje. Jego składnia jest następująca: cin.getline (nazwa łańcucha, rozmiar ciągu); Rozważmy następujący przykład: Załóżmy, że wprowadzam Hello World zarówno dla str, jak 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;
}
To jest podstawowa różnica. cin nie bierze pod uwagę białych spacji w ciągu, podczas gdy cin.getline bierze pod uwagę.
Odpowiedź
Jest to jeden z najczęstszych problemów, z jakimi spotykają się studenci podczas korzystania z getline () funkcji.
W czasie uruchamiania programu wpisujesz Delhi, a następnie naciskasz klawisz Enter. Ten klawisz Enter to nic innego jak znak nowej linii. Białe znaki, takie jak spacja tabulatora i „\ n”, są zwykle ignorowane (pomijane) podczas wprowadzania wartości za pomocą cin.
Zazwyczaj dodatkowe znaki pozostają w strumieniu wejściowym po wprowadzeniu danych wejściowych. rzekomo ukończone. Są one następnie przekazywane do następnej operacji wejściowej, nawet jeśli nie są do niej przeznaczone. Często jest to znak nowej linii, który pozostaje w tyle, ale czasami są też inne znaki.
W twoim programie ten znak nowej linii służy jako dane wejściowe dla funkcji getline (). Ponieważ ta funkcja ma swoje dane wejściowe, nie pozwala na wprowadzenie wartości. Musisz pozbyć się tego znaku, a program będzie działał absolutnie dobrze.
Aby pozbyć się tych obcych znaków, ignore (MAX, DELIM) jest używana funkcja składowa klasy istream. Odczytuje i odrzuca maksymalnie MAX znaków, w tym określony znak separatora. Użyj tej funkcji przed wywołaniem funkcji getline () jako:
cin.ignore (1, "\ n");
Ponieważ dodatkowe znaki mogą również zawierać spacje (na przykład po wpisaniu Delhi , należy wstawić trochę spacji, a następnie nacisnąć klawisz Enter), zamiast 1 bezpieczniej byłoby użyć 10.
cin.ignore (10, "\ n");
Nie martw się o klasę istream. Jest to zadeklarowane w pliku nagłówkowym IOSTREAM. Ponadto , getline () jest również funkcją składową samej klasy istream.