gpt4 book ai didi

c++ - 重载运算符帮助?

转载 作者:行者123 更新时间:2023-11-28 08:15:35 25 4
gpt4 key购买 nike

一如既往,我对 C++ 还很陌生,而且我也不太了解行话,所以我为提前听起来含糊而道歉!

我的问题是我很难理解为什么我的 while 循环似乎停止了重载运算符函数中的其余方法;

#include "sample.h"

#include <iostream>
#include <vector>
#include <cstdlib>

using namespace std;

sample::sample(vector<double> doubles){}

sample::sample() {}

ostream& operator<< (ostream &out, sample &sample)
{
out << "<" << sample.n << ":";
return out;
}

istream& operator>> (istream &in, sample &sample)
{
char firstChar;
in >> firstChar;

if(firstChar != '<'){
cout << "You've not entered the data in a valid format,please try again!1 \n";
exit(1);
}

int n;
in >> n;
sample.n = n;

char nextChar;
in >> nextChar;
if(nextChar != ':'){
cout << "You've not entered the data in a valid format,please try again!2 \n";
exit(1);
}

vector<double> doubles;
double number;
while (in >> number){
doubles.push_back(number);
cout << in << " " << number;
}
in >> lastChar;

return in;
}

int main(void)
{
sample s;
while (cin >> s){
cout << s << "\n";
}

if (cin.bad())
cerr << "\nBad input\n\n";

return 0;
}

我的输入是这样的;

<6: 10.3 50 69.9 >

我正在尝试将“:”之后的所有 double 都放入一个 vector 中,如果它们是整数我可以这样做,但一次是“.”输入它似乎停止。

如果我只输入整数,它似乎也会在 while(in >> number) 之后停止已经找到所有的数字,这很好,但是 cout<<我的主要功能中的命令似乎不起作用!

我哪里做错了?

最佳答案

您必须遵守标准流惯用语:每个流都可以隐式转换为 bool(或 void 指针)以允许像 if (in >> n) 这样的检查来查看操作是否成功.因此,首先您必须确保您的运营商符合这一点(如果提取成功,则确保流“良好”)。

其次,当你写一个像while (in >> x) {/*...*/}这样的循环时,那么在循环终止后,你已经知道你的流不再是好的。因此,您必须在返回之前对其调用 clear()

也许是这样的:

std::istream& operator>> (std::istream &in, sample &sample)
{
char c;
int n;
double d;
std::vector<double> vd;

if (!(in >> c)) { return in; } // input error
if (c != '>') { in.setstate(std::ios::bad); return in; } // format error

if (!(in >> n)) { return in; } // input error

if (!(in >> c)) { return in; } // input error
if (c != ':') { in.setstate(std::ios::bad); return in; } // format error

while (in >> d)
{
vd.push_back(d);
}

in.clear();

if (!(in >> c)) { return in; } // input error
if (c != '>') { in.setstate(std::ios::bad); return in; } // format error

state.n = n;
state.data.swap(vd);

return in;
}

请注意,如果整个输入操作成功,我们只会修改 sample 对象。

关于c++ - 重载运算符帮助?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7835371/

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