我已经拿起了一本关于C ++的书,我基本上就是在它开始时(刚刚开始)。对于我必须在书中解决的一些问题,我使用输入流cin以下方式 - >
cin >> insterVariableNameHere;
但后来我做了一些研究,发现cin可能会导致很多问题,所以在头文件sstream中发现了函数getline()。
我在尝试围绕以下代码中发生的事情时遇到了一些麻烦。我没有看到任何使用提取运算符(>>)来存储数值的内容。它(我的问题)在我留下的评论中进一步说明。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
// Program that allows a user to change the value stored in an element in an array
int main()
{
string input = "";
const int ARRAY_LENGTH = 5;
int MyNumbers[ARRAY_LENGTH] = { 0 };
// WHERE THE CONFUSION STARTS
cout << "Enter index of the element to be changed: ";
int nElementIndex = 0;
while (true) {
getline(cin, input); // Okay so here its extracting data from the input stream cin and storing it in input
stringstream myStream(input); // I have no idea whats happening here, probably where it converts string to number
if (myStream >> nElementIndex) // In no preceding line does it actually extract anything from input and store it in nElementIndex ?
break; // Stops the loop
cout << "Invalid number, try again" << endl;
}
// WHERE THE CONFUSION ENDS
cout << "Enter new value for element " << nElementIndex + 1 << " at index " << nElementIndex << ":";
cin >> MyNumbers[nElementIndex];
cout << "\nThe new value for element " << nElementIndex + 1 << " is " << MyNumbers[nElementIndex] << "\n";
cin.get();
return 0;
}
答案 0 :(得分:1)
stringstream myStream(input):创建一个新的流,使用输入中的字符串作为&#34;输入流&#34;可以这么说。
if(myStream&gt;&gt; nElementIndex){...):将使用上面一行创建的字符串流中的数字提取到nElementIndex中并执行...因为表达式返回myStream,它应该是非零的。
您可能会将提取用作if语句中的条件而感到困惑。以上内容应相当于:
myStream>>nElementIndex; // extract nElement Index from myStream
if(myStream)
{
....
}
你可能想要的是
myStream>>nElementIndex; // extract nElement Index from myStream
if(nElementIndex)
{
....
}