当我在 i<6 的循环中调用此打印函数时,仅字符串的前两个输出(时间和位置)结果不正确或为空白,我不明白为什么,因为它们的其余部分是正确的时间。我是否忘记在某处简单地重新初始化变量?对于任何糟糕的格式,我深表歉意,因为我对一般编程还很陌生。
void print_data(int i, equake_t e[][800], int size, FILE *pointer)
{
int j = 0;
double max3=0, date1=0;
double date2=0, date3=0;
char jay=0;
max3=e[i][0].magnitude;
date1=e[i][0].timestamp.day;
date2=e[i][0].timestamp.month;
date3=e[i][0].timestamp.year;
jay=0;
j=0;
while(j<size)
{
if(e[i][j].magnitude>max3)
{
max3=e[i][j].magnitude;
date1=e[i][j].timestamp.day;
date2=e[i][j].timestamp.month;
date3=e[i][j].timestamp.year;
jay=j;
}
j++;
}
fprintf(pointer,"Largest Magnitude of %.1lf occurred on %.0f/%.0f/%.0f %s at %s\n", max3, date2, date1, date3, e[i][jay].timestamp.time, e[i][jay].location);
}
最佳答案
将准确的诊断从评论转化为答案。
您可能会遇到严重的问题,因为您使用了 int j = 0;
和 char jay = 0;
,但随后将 j
复制到 杰伊
。如果您可能需要在二维数组的行中添加最多 800 个元素(或者实际上超过 127 的任何数字),则类型应该相同,并且都是 int
。
从切向上来说,将函数与数组的二维性隔离可能会更好。你可以这样写:
void print_data(equake_t e[], int size, FILE *pointer)
然后简单地调用它:
print_data(quake_list[i], size, fp)
(而不是使用 print_data(i, quake_list, size, fp)
与当前的函数签名)。如果您需要从 800 更改为更大或更小的值,这也有好处;尽管调用代码需要新的数组大小,但您调用的代码不需要更改。
关于c - 我不明白我的逻辑有什么问题,导致我的一些输出正确和不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835426/