Влияние noskipws на cin >>

Как я понимаю, оператор извлечения пропускает пробел в начале и останавливается при встрече с пробелом или концом потока. noskipws можно использовать, чтобы перестать игнорировать начальные пробелы.

У меня есть следующая программа, где я использовал noskipws.

#include <iostream>
using namespace std;

int main()
{
    char name[128];

    cout<<"Enter a name ";
    cin>>noskipws>>name;
    cout<<"You entered "<<name<<"\n";

    cout<<"Enter another name ";
    cin>>name;
    cout<<"You entered "<<(int)name[0]<<"\n";

    return 0;
}

Мои запросы:

If I enter "John" as the first input, then the second cin>> operation does not wait for input and does not copy anything to the destination i.e. the name array. I expected second cin>> to transfer at-least a newline or end of stream, instead of just setting the destination string to empty. Why is this happening ?

The same thing is observed when I enter "John Smith" as the input for first cin>> statement. Why doesn't the second cin>> statement copy the space or "Smith" to the destination variable ?

Ниже приводится вывод программы:

Enter a name John
You entered John
Enter another name You entered 0


Enter a name John Smith
You entered John
Enter another name You entered 0

Спасибо!!!

Ответы на вопрос(1)

Решение Вопроса

Основной алгоритм для>> строки это:

skip whitespace
read and extract until next whitespace

Если вы используетеnoskipws, то первый шаг пропускается. После первого чтения вы позиционируете себя на пустом месте, поэтому следующее (и все последующее) чтение немедленно остановится, ничего не извлекая.

>> к строке никогда не вставит пробел в строку. В целом, используя>> сnoskipws проблематично, поскольку пробел всегда является разделителем для>>; может иметь смысл использовать его пунктуально, но обычно его следует сбрасывать сразу после использования. (Один раз, когда это может иметь смысл, это при использовании>> кchar, В этом случае потокalways извлекает один символ.)

Ваш ответ на вопрос