//不知道为啥不能写成长为51的数组,会爆Runtime Error (ACCESS_VIOLATION)的错 我太菜了 看不出为啥会越界
原代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include<string>
using namespace std;
struct cl{
char cn[33];
float c, s;
}cla[51];
void main()
{
int n;
while (cin >> n)
{
while (n--)
{
int k;
bool flag=true;
double sum1 = 0.0, sum2 =0.0, res = 0.0;
cin >> k;
for (int i = 0; i < k; i++)
{
cin >> cla[i].cn >> cla[i].c >> cla[i].s;
if (cla[i].s < 60 && cla[i].s >= 0)
flag = false;
sum1 += cla[i].c * cla[i].s;
sum2 += cla[i].c;
}
if (!flag)
{
puts("Sorry!");
}
else{
res = sum1 / sum2;
printf("%.2lf\n", res);
}
if (n)
printf("\n");
}
}
}
ac代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include<string>
using namespace std;
struct cl{
char cn[33];
float c, s;
};
void main()
{
int n;
while (cin >> n)
{
while (n--)
{
int k;
cl cla;
bool flag=true;
double sum1 = 0.0, sum2 =0.0, res = 0.0;
cin >> k;
for (int i = 0; i < k; i++)
{
cin >> cla.cn >> cla.c >> cla.s;
if (cla.s < 60 && cla.s >= 0)
flag = false;
sum1 += cla.c * cla.s;
sum2 += cla.c;
}
if (!flag)
{
puts("Sorry!");
}
else{
res = sum1 / sum2;
printf("%.2lf\n", res);
}
if (n)
printf("\n");
}
}
}