cin >> ws против cin.ignore (numeric_limits <streamsize>:: max (), '\ n')? - PullRequest
0 голосов
/ 05 ноября 2019

Из чтения https://en.cppreference.com/w/cpp/io/manip/ws, кажется, что выполнение cin >> ws выполняет то, что предполагалось сделать cin.ignore(numeric_limits<streamsize>::max(), '\n') (отбрасывать начальные пробелы и символ новой строки).

Есть ли другие различия, которые я не учел? Мне любопытно, почему cin >> ws не так часто используется и не так популярен, как гораздо более сложные cin.ignore(numeric_limits<streamsize>::max(), '\n'), которым также требуется #include <limits>.

Единственный другой вопрос, который я нашел, задающий этот вопросis: cin, getline, ведущий пробел: игнорируйте vs ws , и он не привлек большого внимания.

1 Ответ

1 голос
/ 05 ноября 2019

Прежде всего, ignore отбрасывает все символов до разделителя, а не только пробел.

Во-вторых, ignore сбрасывает досимвол разделителя спецификатора, который может быть любым символом (не только символом новой строки), в то время как ws игнорирует начальный пробел, пока не будет непробельный символ.

ТретийВ конце концов, символ новой строки '\n' - это пробел, поэтому он будет отброшен манипулятором ws.

...