c - 我不明白我的逻辑有什么问题,导致我的一些输出正确和不正确

标签 c

当我在 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/

相关文章:

c - 在c中使用或打印指针值

c - C 中的近似字符串匹配?

c - 删除 break 和 continue 语句

char 作为低范围数字类型?

c - 用 C 指针置换

objective-c - 是否有卡尔曼滤波器的工作开源实现来校正加速度计数据?

c - 将两个字符从字符串移动到另一个字符串会出错

c++ - 我怎样才能优化我的程序?

c - 如何在 C 中使虚拟 shell 不接受任何参数?

c - XML 解析启动处理程序中的指针值已更改