调试代码时出现此错误,问题是打印出最大的分数:
例如:
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;
}
答案 0 :(得分:0)
这个答案直接指向实现目标,即获得最大的数量。我不确定您是否尝试过此方法。或者您只是在玩结构,以进一步了解它。
无论如何,让我们进入它并进行一些更改...
您可以检查struct
和typedef 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;