【问题标题】:C - How many hours is in certain amount of days?C - 特定天数是多少小时?
【发布时间】:2017-02-21 19:46:51
【问题描述】:

我正在学习 C 并且正在编写一个简单的程序,您可以在其中输入天数,它会显示那几天的小时数。例如,您输入 2 天,它说有 48 小时。没有错误,但最终结果并不好。 这是我的代码和结果 代码:

int day, hour;
hour= 24 * day;

printf("Find out how many hours are in days.\n");
printf("Enter number of days. Days = ");
scanf("%d", &day);
printf("%d days has %d hours.\n", day, hour);
return (EXIT_SUCCESS);`

这是控制台中的结果。

Find out how many hours are in days.
Enter number of days. Days = 1
1 days has 677268864 hours.

【问题讨论】:

  • 为什么投反对票?这里有代码,记录了实际和预期的行为。
  • @Bathsheba - 我没有投反对票,但 SO 上的一些用户认为这些问题让人“好啊!”不应该在这里。
  • 但有些语言确实允许这样做,而且问题写得很好。
  • @Bathsheba - (shrug) 我想这只是感觉这样的问题必须有重复,但说重复总是如此难以捉摸,让人反感这个问题.我通常倾向于 Joel Spolsky 的哲学,即任何问题都可以在 SO 上占有一席之地,至少一次。但在某些时候,让人们自己去寻找答案在教学上确实更好。
  • 问题写得很好,并且有一个带有(对 OP 的)不明显错误的代码示例。它清楚地说明了行为,因此我赞成这个问题。找到一个匹配的副本也很重要'你应该首先读取值然后使用它,而不是相反'????

标签: c days


【解决方案1】:
int day, hour;
hour= 24 * day;

上面将hour设置为当前不确定值day乘以24。这并不意味着hour会在每次day更改时自动更新。

在您从用户那里获得day 的值后,将此分配移至。

【讨论】:

    【解决方案2】:

    想想你在做什么:

    int day, hour;
    

    dayhour未初始化

    hour= 24 * day;
    

    那你马上算hour!但是day 没有任何有意义的价值。

    其实……

    scanf("%d", &day);
    

    ...您在计算后填写day


    在计算之前移动scanf,以便在执行乘法时初始化day - 然后您的代码将正常工作。

    【讨论】:

      【解决方案3】:

      一旦知道day,您就需要评估hour。如果你明白我的意思,你不能在 C 中安排这样的评估。 (有趣的是,您可以在 C++ 中使用演员。)

      当前您正在读取一个未初始化的变量。这样做的行为是未定义的。

      【讨论】:

      • 得到了我的投票,因为我现在用谷歌搜索了 Actor 框架的实现并有一些阅读材料。
      • 看boost精神,boost凤凰!
      • 会的。我希望你的猫现在一切都好,并且在所有的 UB 中占了上风!
      • 有人写了表达式 c/c++ 后他们回来了
      【解决方案4】:

      你为什么这样做:

      hour= 24 * day;
      

      在用户输入之前??

      这就是原因,您在输入之前使用未初始化的变量计算答案(并持有一些不可预测的垃圾......)

      一定是这样的

      int day = 0;
      int hour = 0;
      
      printf("Find out how many hours are in days.\n");
      printf("Enter number of days. Days = ");
      scanf("%d", &day);
      hour= 24 * day;
      printf("%d days has %d hours.\n", day, hour);
      return (EXIT_SUCCESS);
      

      【讨论】:

      • 不知道在用户输入之前我不应该这样做。我只是认为它会定义时间并自动计算出来。
      • @brs 听起来你正在成为一名 C++ 程序员。
      【解决方案5】:

      变量day还没有被填充;它可能包含垃圾数据。要解决此问题,请将int hours = day * 24 移动到scanf("%d",&day); 之后,这样变量day 将实际具有扫描的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-29
        • 2020-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        相关资源
        最近更新 更多