//Rational.h
#pragma once
#include<iostream>
class Rational
{
public:
friend std::istream &operator>>(std::istream &input, Rational &rational);
void friend addition(const Rational &rational1, const Rational &rational2);
Rational(int numerator = 1, int denominator = 2);
void setNumerator(int numerator);
void setDenominator(int denominator);
int getNumerator()const;
int getDenominator()const;
void printFloat();
void printFraction();
private:
struct
{
int numerator;
int denominator;
}number;
inline void simplify();
};
//Rational.cpp
#include "Rational.h"
#include<stdexcept>
#include<cstdlib>
#include<cassert>
using namespace std;
std::istream& operator>>(std::istream& input, Rational& rational)
{
char* strPtr = NULL;
input >> strPtr;
char** strPtr1_2 = NULL;
assert(strPtr != NULL);
rational.number.numerator = strtol(strPtr, strPtr1_2, 10);
char** strPtr2_2 = strPtr1_2 + 1;
rational.number.denominator = strtol(*strPtr2_2, NULL, 10);
return input;
}
void addition(const Rational& rational1, const Rational& rational2)
{
int numerator1 = rational1.number.numerator * rational2.number.denominator;
int numerator2 = rational2.number.numerator * rational1.number.denominator;
int numerator = numerator1 + numerator2;
int denominator = rational1.number.denominator * rational2.number.denominator;
Rational rational(numerator, denominator);
rational.printFraction();
}
Rational::Rational(int numerator, int denominator)
{
number.numerator = numerator;
setDenominator(denominator);
}
void Rational::setNumerator(int numerator)
{
number.numerator = numerator;
simplify();
}
void Rational::setDenominator(int denominator)
{
if (denominator == 0)
{
throw invalid_argument("The denominator can't be '0'");
}
else
{
number.denominator = denominator;
simplify();
}
}
int Rational::getNumerator() const
{
return number.numerator;
}
int Rational::getDenominator() const
{
return number.denominator;
}
void Rational::printFloat()
{
float result = (float)number.numerator / number.denominator;
cout << result << endl;
}
void Rational::printFraction()
{
cout << number.numerator << '/' << number.denominator << endl;
}
inline void Rational::simplify()
{
int a = number.denominator;
int b = number.numerator;
int c = a % b;
while (c != 0)
{
a = b;
b = c;
c = a % b;
}
number.denominator /= b;
number.numerator /= b;
}
//main.cpp
#include"Rational.h"
using namespace std;
int main()
{
Rational rational1(3, 9);
Rational rational2(1, 2);
cout << "The numerator of rational1 is " << rational1.getNumerator() << endl;
cout << "The denominator of rational1 is " << rational1.getDenominator() << endl;
cout << "Print the rational1 in float form:";
rational1.printFloat();
cout << "Print the rational1 in fraction form:";
rational1.printFraction();
cout << "\n\n" << endl;
cout << "The numerator of rational2 is " << rational2.getNumerator() << endl;
cout << "The denominator of rational2 is " << rational2.getDenominator() << endl;
cout << "Print the rational2 in float form:";
rational2.printFloat();
cout << "Print the rational2 in fraction form:";
rational2.printFraction();
cout << "\n\n" << endl;
cout << "The result of that rational1 add rational2 is:";
addition(rational1, rational2);
cout << "\n\n" << endl;
cin >> rational1;
cout << "The numerator of rational1 is " << rational1.getNumerator() << endl;
cout << "The denominator of rational1 is " << rational1.getDenominator() << endl;
cout << "Print the rational1 in float form:";
rational1.printFloat();
cout << "Print the rational1 in fraction form:";
rational1.printFraction();
cin >> rational2;
cout << "The numerator of rational2 is " << rational2.getNumerator() << endl;
cout << "The denominator of rational2 is " << rational2.getDenominator() << endl;
cout << "Print the rational2 in float form:";
rational2.printFloat();
cout << "Print the rational2 in fraction form:";
rational2.printFraction();
cout << "The result of that rational1 add rational2 is:";
addition(rational1, rational2);
}
char* strPtr = NULL;
input >> strPtr;
--------------------------
空指针?
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html
程序里面没有看到_Str变量,写一些打印语句跟踪一下,看看运行到哪里了报错。