如何调试处理分数的C ++程序?

时间:2019-03-17 07:52:44

标签: c++ arrays struct

调试代码时出现此错误,问题是打印出最大的分数:

例如:

1/2 5/8 12/9  

期望:

12/9  

现实:我的代码打印出我输入的所有分数

1/2 5/8 12/9  

我只是不知道出了什么问题。我该如何调试呢?

struct的概念是如此令人困惑。

这是我的代码:

#include <iostream>
#include <cmath>
using namespace std;
struct FractionNumber
{
    int Numerator;
    int Denominator;
    float FractionNumber;
};
void TypeIn(FractionNumber a[] ,int n)
{
    for (int i=0; i<n; i++)
    {
        cout << "Enter Numerator " << i+1 << ": ";
        cin >> a[i].Numerator;
        cout << "Enter Denominator " << i+1 << ": ";
        cin >> a[i].Denominator;
        a[i].FractionNumber=a[i].Numerator/a[i].Denominator;
    }
}
int FindBiggest(FractionNumber a[], int n)
{
    FractionNumber Biggest=a[0];
    for (int i=0; i<n; i++)
    {
        if(a[i].FractionNumber > Biggest.FractionNumber)
        {
            Biggest.FractionNumber = a[i].FractionNumber;
        }
    }
    return Biggest.FractionNumber;
}
void PrintBiggest(FractionNumber a[], int n)
{
    for (int i=0; i<n; i++)
    {
        if(a[i].FractionNumber = FindBiggest(a,n))
        {
            cout << "biggest FractionNumber: " << a[i].Numerator << "/" << a[i].Denominator << endl;
        }
    }
}
int main()
{
    int n;
    FractionNumber a[100];
    cin >> n;
    TypeIn(a,n);
    PrintBiggest(a,n);


return 0;
}

1 个答案:

答案 0 :(得分:0)

这个答案直接指向实现目标,即获得最大的数量。我不确定您是否尝试过此方法。或者您只是在玩结构,以进一步了解它。

无论如何,让我们进入它并进行一些更改...

您可以检查structtypedef struct here

之间的差异
typedef struct 
{
    int Numerator;
    int Denominator;
    float FractionNumber;
}FractionNumber;

确保分母不是0(零)(此类流可以使用try-catch块进行处理,但是您可以自己阅读,因为它们会导致执行终止)

cout << "Enter Denominator " << i+1 << ": ";
bool check = false;
do {
   cin >> a[i].Denominator;
   if (0 == a[i]) {
      check = true;
   }else{
      check = false;
   }
} while (check);

除法运算符应给出float

a[i].FractionNumber=static_cast<float>(a[i].Numerator)/static_cast<float>(a[i].Denominator);

对于简单的比较,我不需要 FindBiggest 函数。我假设您正在尝试这样做。

PrintBiggest 可以简单地检查法语数字以比较最大值并返回其索引

int PrintBiggest(FractionNumber *a, int n) {
    int index_of_biggest = 0;
    for (int i=0; i<n; i++) {
        if(a[i].FractionNumber > a[index_of_biggest].FractionNumber) {
            index_of_biggest = i;
        }
    }
    return(index_of_biggest);
}

最后获得此索引以打印出最大的数字

int x = PrintBiggest(a,n);
cout << "Biggest is: " << a[x].Numerator << "/" << a[x].Denominator;