gpt4 book ai didi

c++ - 带有 vector 成员的结构的 istream

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:08 24 4
gpt4 key购买 nike

我不太清楚 istream 如何从标准输入(例如键盘的 cin>>)工作 对于具有 vector 成员的结构。我有一个包含 double 、字符串和 vector 成员的简单结构。我想从 cin 中读取结构,并用 cout 打印它们。我重载了 << 和 >> 运算符,这是我的代码:

    #include <iostream>
#include <vector>
#include <string>
using namespace std;


struct Test {
double d;
string s;
vector<int>vi;
Test():d(0.0),s(string()),vi(0)
{}
Test(double d1,string s1,vector<int>vi1):d(d1),s(s1),vi(vi1)
{}
};

istream &operator>>(istream &is, vector<int>&v)
{
int x;
cout<<"type the vector<int>elements :"<<endl;
while (is>>x)
v.push_back(x);
is.clear();
return is;
}

ostream &operator<<(ostream &os, vector<int>&v)
{
os<<"[ ";
for (int i=0;i<v.size();i++)
os<<v[i]<<" ";
os<<" ]";
return os;
}

istream &operator>>(istream &is, Test &t)
{
cout<<"type the double d value: ";
is>>t.d;
cout<<"type the string s value: ";
is.ignore(); //call ignore before getline
getline(is,t.s);
//int x;
//cout<<"type the vector elements:"<<endl; //try to use the vector<int> istream operator
//while (true) {
// if (is.eof()==1) break;
// t.vi.push_back(x);
//}
//is.clear();
is>>t.vi;
is.clear();
return is;
}


ostream &operator<<(ostream &os, Test &t)
{
os<<"{ ";
os<<t.d<<" , "<<t.s<<" , ";
os<<t.vi;
os<<" }"<<endl;
return os;
}

int main()
{
Test test1;
while (cin>>test1)
cout<<test1;


}

我主要有 while (cin>>test1) cout<<test1读取和打印结构。但是一旦从 cin 读取第二个结构,我就会得到以下信息:

./testin
type the double d value: 1.0
type the string s value: 1st struct string
type the vector<int>elements :
1
1
1
{ 1 , 1st struct string , [ 1 1 1 ] }
type the double d value: 2.0
type the string s value: 2nd struct string
type the vector<int>elements :
2
2
2
{ 2 , 2nd struct string , [ 1 1 1 2 2 2 ] }
type the double d value:

vector 混淆了,而且我无法用 CTRL+d 停止输入我可以读取和打印单个结构,如果我在 main cin>>test1;cout<<test1; 中有我寻找了很多合适的解决方案,但我没有设法弄清楚。

非常感谢高级方面的任何帮助。

潜行

最佳答案

添加一个“点击键继续”并将 test1 var 放入循环中应该可以防止“vector 混淆”

    do  {
Test test1;
cin >> test1;
cout << test1;
} while (getchar() == 'c')

关于c++ - 带有 vector 成员的结构的 istream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17545759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com