Ваш код имеет неопределенное поведение, так как вы не можете использовать scanf для чтения в std :: string, но проблема, о которой вы сообщаете, вероятно, не зависит от этого.
Когда вы читаете "строку" ( либо scanf("%s",
... или cin >> var
, где var
- это std::string
), вы читаете токен с разделителями, а НЕ строку. Вызов прекратит чтение, как только увидит пробел или табуляцию (или что-либо еще, определенное как пробел в текущей локали) после прочтения хотя бы одного непробельного символа. Поэтому, если вы введете строку с пробелами (например, ваш адрес содержит хотя бы один пробел), он остановится на этом пробеле и оставит остальную часть строки для чтения при будущих вызовах scanf
или cin >>
. В результате вы увидите, что все ваши следующие запросы накапливаются в одной строке, так как код читает остальную часть адресной строки как то, что вы читаете, вместо того, чтобы ждать больше строк ввода.
Если вы хотите прочитать строки ввода (вместо текста, разделенного пробелами), вы должны использовать fgets (C) или getline (POSIX C или C ++)