Najlepsza odpowiedź
Tutaj wyczyścisz więcej za pomocą Cin
Korzystanie , cin.get , cin.getline i cin. ignoruj
Korzystanie z operatora >> (z cin)
Operator> może być używany, gdy chcesz po prostu odczytać kolejne znaki niepuste wprowadzone przez użytkownika do tablicy znaków lub znaków. Wszelkie drukowalne znaki występujące po pierwszej spacji zostaną zignorowane i nie będą przechowywane w zmiennej. Nie użyj instrukcji typu,
cin >> UserExplanation;
jeśli, na przykład, chcesz aby uzyskać od użytkownika całe zdanie zawierające spacje. W takim przypadku lepiej byłoby skorzystać z funkcji składowych cin get lub getline .
Pytanie : Czy na końcu tablicy znaków UserExplanation zostanie automatycznie zapisany terminator zerowy?
Korzystanie z cin.get
Niesformatowana funkcja składowa get działa jak operator >> z dwoma wyjątkami. Po pierwsze, funkcja get zawiera znaki odstępu , podczas gdy ekstraktor wyklucza białe znaki, gdy ustawiona jest flaga ios :: skipws (ustawienie domyślne). Po drugie, istnieje mniejsze prawdopodobieństwo, że funkcja get spowoduje opróżnienie powiązanego strumienia wyjściowego (na przykład cout).
Odmiana funkcji get określa adres bufora i maksymalną liczbę znaków do odczytania. Jest to przydatne do ograniczania liczby znaków wysyłanych do określonej zmiennej, jak pokazano w poniższym przykładzie:
#include
void main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << " " << line;
}
W tym przykładzie możesz wpisać maksymalnie 24 znaki i znak kończący. Wszelkie pozostałe znaki można wyodrębnić później.
Korzystanie z cin.getline
Funkcja składowa getline jest podobna do pobierz funkcję. Obie funkcje pozwalają na trzeci argument, który określa znak kończący dane wejściowe. Wartością domyślną jest znak nowego wiersza. Obie funkcje rezerwują jeden znak na wymagany znak zakończenia . Jednak get pozostawia znak kończący w strumieniu, a getline usuwa znak kończący.
Poniższy przykład określa znak kończący dla wejścia strumień:
#include
void main()
{
char line[100];
cout << " Type a line terminated by "t"" << endl;
cin.getline( line, 100, "t" );
cout << line;
}
Korzystanie z cin.ignore
cin.ignore (int nCount = 1, int delim = EOF);
Parametry
nCount - Maksymalna liczba znaków do wyodrębnienia. delim - znak ogranicznika (domyślnie EOF).
Uwagi
Wyodrębnia i odrzuca do nCount znaków. Wyodrębnianie zostaje zatrzymane, jeśli zostanie wyodrębniony separator lub osiągnięty zostanie koniec pliku. Jeśli delim = EOF (wartość domyślna), tylko stan końca pliku powoduje zakończenie. Znak separatora jest wyodrębniany.
Answer
cin.ignore () to predefiniowana funkcja, która ignoruje / usuwa jeden lub więcej znaków z bufora wejściowego.
Wymagania wstępne: 1. cin traktuje białe znaki, tj. " ", " \ t ", " \ n „ jako separator.
2. Kiedy czytasz cokolwiek ze standardowego urządzenia wejściowego, tutaj klawiatury, najpierw trafia to do bufora wejściowego. Bufor wejściowy to lokalizacja, która przechowuje wszystkie przychodzące informacje. kontynuuje przetwarzanie do procesora.
Problem: 1. Załóżmy, że chcesz odczytać „ciąg znaków” od użytkownika. char moje imię [10];
2. W jakiś sposób kończysz używając cin, zamiast cin.getline () cin >> myname;
3. Wpisuję „ABC”, a następnie naciskam klawisz Enter. zajmuje ABC i traktuje następujące "\ n" jako separator.W rezultacie „\ n” nie jest odczytywane i pozostaje w buforze wejściowym .
4. Więc tutaj cin.ignore () zignoruje te nieprzeczytane znaki, które pozostały w buforze wejściowym.
Rozwiązanie: Jeśli chcesz unikaj sytuacji, pamiętaj tylko , aby nie używać cin do wprowadzania łańcuchów. i tada, problem rozwiązany !!