【问题标题】:How to debug my C++ program that handles fractions?如何调试处理分数的 C++ 程序?
【发布时间】:2019-03-17 07:52:43
【问题描述】:

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

例如:

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) 您的 FractionNumber 成员是 float,但 FindBiggest 的返回值是 int。 (2) 我不明白 PrintBiggest 中循环的目的(请澄清?)。你可以不用循环。
  • 请在此处了解格式化:stackoverflow.com/editing-help 另外请记住您学到的一些英语知识,例如:大写、造句、标点符号…… StackOverflow 不需要完美的英语(否则我自己会很迷茫),但你可以做得更好,不是吗?
  • @seccpur 请解释原因,这并不明显。
  • a[i].FractionNumber = FindBiggest(a,n) 应改为 a[i].FractionNumber == FindBiggest(a,n)

标签: c++ arrays struct


【解决方案1】:

这个答案直接指向完成目标,获得最大的数字。我不确定你是否尝试过这个。或者你只是在玩结构,以了解更多。

不管怎样,让我们​​开始吧,做一些改变……

您可以检查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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    相关资源
    最近更新 更多