一个C++问题,为什么会无限循环输出???
#include<stdlib.h>
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
using std::istream;
using std::ostream;
class Fraction {
private :
int num,den;
public:
Fraction() { num = 0; den = 1 ; }
Fraction(int n,int d) {set(n,d); }
Fraction(Fraction const &src) { set(src.num,src.den);}
// cout << "NOW executing copy constrctor;" << endl;
void set (int n,int d) {
num = n;
den = d;
normalize();
}
int get_num() const { return num; }
int get_den() const {return den; }
Fraction add(const Fraction &other);
Fraction mul(const Fraction &other);
Fraction sub(const Fraction &other);
Fraction div(const Fraction &other);
Fraction operator+ (const Fraction &other) { return add(other);}
Fraction operator- (const Fraction &other) { return sub(other);}
Fraction operator* (const Fraction &other) { return mul(other);}
Fraction operator/ (const Fraction &other) { return div(other);}
private :
void normalize ();
int gcf (int a,int b);
int lcm (int a,int b);
};
//-------------------------------------
void Fraction::normalize() {
// 0
if (den == 0 || num == 0) {
num = 0;
den = 1;
}
if (den < 0) {
num *= -1;
den *= -1;
}
int n = gcf (num,den);
num /= n;
den /= n;
}
int Fraction::gcf(int a,int b) {
if (a%b == 0)
return abs(b);
else
return (gcf(b,a%b));
}
int Fraction::lcm (int a, int b) {
return abs(a/gcf(a,b)*b);
}
Fraction Fraction::add(const Fraction &other) {
int lcd = lcm(den,other.den);
Fraction fract_mid ;
fract_mid.set(num*lcd/den + other.num*lcd/other.den, lcd);
return fract_mid;
}
Fraction Fraction::mul(const Fraction &other) {
Fraction fract_mid;
fract_mid.set(num*other.num,den*other.den);
return fract_mid;
}
Fraction Fraction::sub(const Fraction &other) {
int lcd = lcm(den,other.den);
Fraction fract_mid ;
fract_mid.set(num*lcd/den-other.num*lcd/other.den,lcd);
return fract_mid;
}
Fraction Fraction::div(const Fraction &other) {
Fraction fract_mid;
fract_mid.set(num*other.den,den*other.num);
return fract_mid;
}
int main() {
int a=0,b=1;
Fraction ft1;
while (b != 0) {
cout << "enter num :";
cin >>a;
cout <<endl;
cout <<"enter den:";
cin >>b;
cout <<endl;
Fraction ft2(a,b);
ft1 = ft1 +ft2 ;
}
cout << "sum is :";
cout << ft1.get_num() << "/" << ft1.get_den() << endl ;
return 0;
}
如果分母输入1111111111111或者J。。。什么的反正就是越界的不符合int类型的
控制台就会不停输出
num:
den:
num:
den:
num:
den:
num:
den:
num:
den:
num:
den:
num:
den:
.
.
.
本来不想问这个问题,但是我想作为一个初学者,多问问总是有好处的。
请大家指点!!
另外,如果哪里可以大幅提高效率最好也指点一下!
谢谢!