Как изменить этот код C ++, чтобы сделать ввод лучше - PullRequest
3 голосов
/ 07 апреля 2010
        cout << "Input street number: ";
        cin >> streetnum;
        cout << "Input street name: ";
        cin >> streetname;
        cout << "Input resource name: ";
        cin >> rName;
        cout << "Input architectural style: ";
        cin >> aStyle;
        cout << "Input year built: ";
        cin >> year;

Проблема с приведенным выше кодом возникает, если вы вводите пробелы между словами. Например, если я ввожу «Ampitheater Parkway» в качестве названия улицы, то в поле «Streetname» он вводит «Ampitheater», пропускает запрос имени ресурса и вводит «Parkway» в следующее поле. Как я могу это исправить?

Ответы [ 2 ]

7 голосов
/ 07 апреля 2010

Это потому, что когда вы используете оператор извлечения со строкой в ​​правой части, он останавливается на первом символе пробела.

То, что вы хотите, это getline бесплатная функция:

std::getline(std::cin, streetnum); // reads until \n

Вы можете указать другой разделитель, если хотите:

char c = /* something */;
std::getline(std::cin, streetnum, c); // reads until c is encountered

Еще лучше сделать небольшую функцию для использования:

void prompt(const std::string& pMsg, std::string& pResult)
{
    std::cout >> pMsg >> ": ";

    std::getline(std::cin, pResult);
}

prompt("Street Number", streetnum);
prompt("Street Name", streetname);
// etc.

:)

2 голосов
/ 07 апреля 2010

Вы можете использовать getline () :

cout << "Input street number: ";
cin.getline(streetnum, 256); // Assuming 256 character buffer...
cout << "Input street name: ";
cin.getline(streetname, 256);
...