从类型为string的输入中提取值并分配给变量

时间:2014-10-18 22:54:49

标签: c++ getline

我有一个非常基本的问题。它是关于从字符串输入中提取值然后将此值分配给int然后将此整数复制到屏幕。 这是我的代码:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main ()
{
    string mystr;
    float price;
    int quantity;
    cout << "What is your name? ";
    getline (cin,mystr);
    cout << "Hello Mr. " << mystr << endl;
    cout << "Enter price: ";
    getline (cin,mystr);
    stringstream(mystr) >> price;
    cout << "Enter quantity: ";
    getline (cin,mystr);
    stringstream (mystr) >> quantity;
    cout << "Total price: " << quantity*price << endl;
    cout << "Thank you for purchasing our product!";
    return 0;
}

所以问题是:当被要求输入价格时。我可以输入&#34;价格是16&#34;例如,该程序应该从输入中提取16并将其分配给价格?

1 个答案:

答案 0 :(得分:1)

如果您允许这种类型的输入,则必须先剥离Price is部分,然后才能阅读16部分。最简单的方法是简单地将输入放入stringstream并在循环中调用其>>运算符,直到到达流的数字或结尾,例如:

cout << "Enter price: ";
getline(cin, mystr);

stringstream ss(mystr);
do
{
    if (ss >> price)
        break;
}
while (!ss.eof());

if (!ss)
{
    // no price provided, do something...
}