2009-12-27 2 views
1
int i,j; 

std::string s; 

std::cin>>i>>j>>s>>s>>i; 

std::cout<<i<<" "<<j<<" "<<s<<" "<<i; 

Вопрос Ссылаясь на пример кода выше, что на дисплее выводится, если строка ввода получили в жизни: «5 10 Sample Слово 15 20»?один вопрос о станд :: CIN

Ответ

15 10 Слово 15

У меня есть вопрос в том, что политика Подчеркивание КИН свыше писать существующие значения? Остается ли последняя переписать предыдущую? Есть ли другие ситуации?

Я проверил множество книг, но я не нашел того, что объясняет это.

ответ

12
std::cin >> i >> j >> s >> s >> i; 

эквивалентно:

std::cin >> i; 
std::cin >> j; 
std::cin >> s; 
std::cin >> s; // overwrite previous s 
std::cin >> i; // overwrite previous i 

Каждый раз, когда вы читаете из CIN переменной, старое содержимое этой переменной перезаписывается.

Таким образом, вы явно просите перезаписать s и i.

0

Когда вы «переписали» на s, вы уничтожили предыдущее значение s. (который был ОБРАЗОМ). Причина, по которой я осталась неизменной, - это то, что значение i было/осталось 15 (вы все еще перезаписывали i, однако вы перезаписывали его с теми же данными, 15.)

+0

Из исходного вопроса: «введенная строка:« 5 10 Пример слова 15 20 ». Причина «i» выводит одно и то же значение дважды: «i» не изменяется между выходами; то есть «cout << i << ... << i» не меняет значение «i» между письмом. – atk

0

Обозначение >> делает это запутанным, если вы его перепишете поскольку operator>>() выглядит некрасиво, но может помочь вам понять, как работают вызовы функций.

Эта линия

std::cin >> i >> j >> s >> s >> i; 

эквивалентно

std::cin.operator>>(i).operator>>(j).operator>>(s).operator>>(s).operator>>(i); 

и operator>>() для cin возвращает ссылку на себя cin. Таким образом, каждый шаг пути - это отдельный вызов operator>>() от cin, который гарантированно производится слева направо.

Смежные вопросы