【发布时间】:2014-01-02 21:01:00
【问题描述】:
我从昨天开始就在尝试学习 C++,我正在使用这个文档:http://www.cplusplus.com/files/tutorial.pdf(第 32 页)。我在文档中找到了一个代码并运行了它。我尝试输入 5.5 卢比的价格和一个整数作为数量,输出为 0。 我试过输入5.5和6,输出是正确的。
// stringstreams
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main ()
{
string mystr;
float price = 0;
int quantity = 0;
cout << "Enter price: ";
getline (cin,mystr);
stringstream(mystr) >> price;
cout << "Enter quantity: ";
getline (cin,mystr);
stringstream(mystr) >> quantity;
cout << "Total price: " << price*quantity << endl;
return 0;
}
mystring 命令究竟做了什么?引用文档:
"在这个例子中,我们从标准输入中获取数值 间接地。而不是直接从 标准输入,我们将标准输入(cin)中的行放入 字符串对象(mystr),然后我们从中提取整数值 将此字符串转换为 int(数量)类型的变量。”
我的印象是该函数将获取字符串的一个组成部分并将其用作输入。
【问题讨论】:
-
这个例子有点奇怪,我从没见过
stringstream这样用过。我通常加载该行,对其进行转换,然后按部分提取,但这显然在这里没有什么优势,因为cinis 已经是一个输入流......所以cin >> price >> quantity;会简单得多。这将是不使用 cplusplus.com 教程的一个很好的理由。 -
有趣的是,该教程是我第一次接触 C++。事后看来,它非常糟糕和不完整。我建议改为good book。
-
@BartekBanachewicz 也许他们只需要拿出示例来展示
stringstream的工作原理。这是一个奇怪的,甚至可能是一个糟糕的 =) 但它表明你可以将字符串视为流。 -
如果它不是对
stringstream更高级用法的介绍,那么这绝对是一个错误的例子。即使是这样,也应该以不同的方式书写。 -
@trojansdestroy 如果不了解它所基于的所有原语,您将无法理解 stringstream,因此我看不出阅读教程在这方面有何帮助。