如何在模拟 24 小时之前或之时停止执行的模拟程序

How to a simulation program that stops executing before or at simulated 24 hours

有一个 500 加仑的水箱用于 24小时内将鱼煎成Fish Fry。水箱漏水,每小时流失剩余水量的 10%。如何修复我的代码,使其在 24 小时后或油箱容量达到 100 加仑后停止执行。出于某种原因,我似乎无法全神贯注于 for 循环。

int main()
{
    double add, gal = 500, vol, newVol, hour;

    printf("Please enter additional water added per hour: ");
    scanf("%f", &add);

    for (int hour = 0; hour <= 24; hour++)
    {
        vol = gal * 0.90 + add;
    }
    printf("The volume is %f gallons after %d hours. \n", &vol, &hour);

}

您可以使用 gettimeofday() 函数获取初始时间(进程启动时),然后再次重复使用 gettimeofday() 获取当前时间。当 Current time 和 INitial time 相差 24 Hrs 时,跳出循环。

参考检查http://man7.org/linux/man-pages/man2/gettimeofday.2.html

您的程序存在多个问题:

  • 你应该包括 <stdio.h>
  • double 类型的 scanf() 转换规范是 %lf,而不是 %f
  • 您应该测试 scanf() 的 return 值以避免在无效输入时出现未定义的行为。
  • 循环迭代 25 次而不是 24 次。
  • 更新卷的表达式 vol = gal * 0.90 + add; 不正确:您应该更新 gal 或仅使用 vol。此外,如果在每小时开始时加水,则应 vol = (gal + add) * 0.90;,但水箱不能容纳超过 500 加仑。如果在每小时结束时加水,您应该在加水之前测试它是否达到 100 加仑。
  • 您没有测试 100 加仑的限制
  • printf 格式以及参数不正确:它应该是 printf("The volume is %f gallons after %f hours. \n", vol, hour); 或更好的 printf("The volume is %f gallons after %d hours. \n", vol, hour); 并且 hour 应该定义为 int.
  • main 应该 return 0.

这是更正后的版本:

#include <stdio.h>

int main() {
    double add, gal = 500, vol;
    int hour;

    printf("Please enter additional water added per hour: ");
    if (scanf("%lf", &add) != 1) {
        printf("invalid input\n");
        return 1;
    }
    for (vol = gal, hour = 1; hour <= 24; hour++) {
        vol = vol * 0.90;
        if (vol <= 100)
            break;
        /* water is added at the end of each hour */
        vol += add;
        /* the tank cannot hold more than 500 gallons */
        if (vol > gal)
            vol = gal;
    }
    printf("The volume is %f gallons after %d hours.\n", vol, hour);
    return 0;
}

您可能想要计算体积下降到 100 加仑的确切时间,但这更复杂。

据我了解,这只是一个不需要实时的模拟。

只需添加以下行:

if (vol <= 100) break;

所以它退出for循环。

附带说明一下,您的代码中肯定还有其他错误。例如,vol 将始终是相同的值。此外,用于 for 循环的变量 hour 与您在外部使用的变量不同(例如在 printf 中)。你应该做类似的事情来让它工作:

vol = gal
for (hour = 0; hour <= 24; hour++)
{
    vol = vol * 0.90 + add;
    if (vol <= 100) break;
}