如何更改此C ++代码以使输入更好地工作

时间:2010-04-07 00:13:14

标签: c++ g++ user-input

        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”放入streetname,跳过资源名称的提示并输入“Parkway”到下一个字段。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

那是因为当您使用带有字符串作为右侧的提取运算符时,它会停留在第一个空格字符处。

你想要的是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.

:)

答案 1 :(得分:2)

您可以使用getline()

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