【问题标题】:Why am I not getting the remainder for “m”?为什么我没有得到“m”的余数?
【发布时间】:2020-01-16 20:39:40
【问题描述】:

输入是月数,两个输出是年和月。如果我输入 18 个月应该给我 第一年 6个月

#include <stdio.h>


int main()
{
    int y, m;

    printf("Input number of months: ");
    scanf_s("%i", &y);
    y = (int) y / 12
    m = (int)y %;

    printf(" %i Year(s) \n %i Month(s)", y, m);
    return 0;
}

【问题讨论】:

  • 到底是什么问题?你是否试图编译这个确切的代码,用Int而不是int,用“”而不是"",等等?
  • 你也少了一个分号,m = (int) y %; 这行是无意义的。这是如何编译的
  • 这不会编译吧?在m = (int)y %; 中, % 是一个二元运算符,这意味着它需要两个操作数(在 % 的每一侧都有一个)你真的是说 m = (int)y % 12; 吗?另外,您不需要任何一种强制转换——整数除法会产生整数结果(mod 也是如此)
  • 请发布您遇到问题的确切代码。不要尝试重新输入,而是剪切并粘贴实际代码。
  • @JerryJeremiah 它不会根据 C++ 标准编译,只能使用一些编译器扩展(允许使用 C 头文件)。虽然...是的,我不知道有任何编译器不接受 C++ 代码中的 C 头文件

标签: c


【解决方案1】:

有很多方法可以做到这一点,这是最接近您自己的代码的一种:

#include <stdio.h>

int main() {

    int y, m;

    printf("Input number of months: ");
    fflush(stdout);
    scanf("%d", &y);
    m = y % 12;
    y = y / 12;

    printf(" %i Year(s) \n %i Month(s)" , y, m);
    return 0;
}

关键问题是您在m 有机会查看之前更新了y 的值。注意y=...m=... 的顺序。如果您首先执行y=y/12,这会将y 的值更新为年数,剩余信息在此步骤中丢失,m 将始终为0。通过从y 获取m这是首先来自用户的输入,您可以避免这个问题。

另一个小问题是不需要将值从y/12 转换为int,因为您首先将该值分配给y,它的类型是int。同样适用于计算 m 时,也存在拼写错误。

至于fflush的使用,可以参考this question了解详情。使用/不使用此行编译代码以查看差异。

【讨论】:

  • m而不是y中存储输入总月份也更合乎逻辑。
  • @Jarod42 是的,但我想让我的答案尽可能接近问题,以便突出关键问题。
  • 直到现在我才看到你的答案@B.Gao!我想我现在明白了,我想我太专注于 m 的输出了。在我回家的路上,我一到那里就试试,我会告诉你的!! :D
猜你喜欢
  • 2020-11-19
  • 2013-07-15
  • 2011-11-27
  • 2015-06-03
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
相关资源
最近更新 更多