c - 为什么我没有得到 “m” 的余数?

标签 c

输入是月数,两个输出是年和月。如果我输入 18 个月应该给我 1 年 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;
}

最佳答案

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

#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 code> 首先是 int 类型。这同样适用于计算 m 时,也存在拼写错误。

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

关于c - 为什么我没有得到 “m” 的余数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59777488/

相关文章:

c - 计算阶乘 > 31 时如何处理整数溢出

实现是否可以将提示视为实际语句?

将 C 变量转换为 JSON 格式

c - fopen() 等函数的字符编码是否取决于调用它们的进程的语言环境?

c++ - 检查 Unix 中是否存在目录(系统调用)

c - 快速排序数组随机数生成器没有打印任何错误

使用 sscanf 将 char* 转换为 SYSTEMTIME

c - OS X : CMake ignores CMAKE_C_COMPILER

c - 使用数组的 Win32 API

c - 进程如何就 IPC 参数进行通信?