【发布时间】:2014-07-13 11:57:39
【问题描述】:
我正在重载流提取运算符,以便它可以在我创建的 Complex 类中使用。当我使用 cin 在 from(x,y) 中输入来自用户的一个复数时,它工作正常。请注意,我忽略了这些字符“(,)”。因为我只想要数字。
但是当我尝试以相同格式输入用户的两个数字时,无论输入什么值,程序都会返回 (0,0) 作为答案。在这种情况下,看起来程序无法忽略这些字符。我无法找到解决此问题的方法。这是文件。
请仔细查看 main.cpp 和输出。我输入了这样的值,
(2,3)
(5,6)
如何编辑此代码以使其即使在输入一个或多个复数时也能正常工作?
复杂.h
#pragma once
#include <iostream>
using namespace std;
#ifndef COMPLEX_H
#define COMPLEX_H
class Complex {
public:
// constructors
Complex(double, double);
Complex(double);
Complex();
friend ostream & operator<<(ostream &,Complex &);
friend istream & operator>>(istream &, Complex &);
private:
double r;
double i;
};
#endif
复杂的.cpp
#include <iostream>
using namespace std;
#include "Complex.h"
Complex::Complex(double _r, double _i){
r=_r;
i=_i;
}
Complex::Complex(double _r){
r=_r;
i=0.0;
}
Complex::Complex(){
r=0.0;
i=0.0;
}
// Code for overloading stream insertion operator.
ostream& operator<<(ostream& os, Complex& value){
os << "(" << value.r <<", " << value.i << ")" ;
return os;
}
// Code for overloading stream extraction operator.
istream & operator>>(istream& is, Complex& val){
is.ignore();
is >>val.r;
is.ignore();
is >>val.i;
return is;
}
main.cpp
#include <iostream>
#include "Complex.h"
using namespace std;
int main(){
Complex x,y;
cout<<"Enter complex number in the form(x,y): "<<endl;
cin>>x>>y;
cout<<"\nThe 1st complex number entered was "<<x<<endl;
cout<<"\nThe 2nd complex number entered was "<<y<<endl;
}
输出
输入的第一个复数是 (2,3)
输入的第二个复数是 (0,0)
【问题讨论】:
-
与您的问题无关(请参阅我的回答),但您不需要
#pragma once和您的#ifndef ...,它们的用途相同,因此只需一个就足够了。跨度> -
我认为对类似问题的回答应该非常有用:stackoverflow.com/a/14331519/3723423