读取2个整数倍与否

时间:2019-02-07 14:36:44

标签: c integer

因此,我试图自学C,我选了几本教授推荐给我的教科书,正在研究示例,但他们没有答案,因此我遇到了问题。

问题: (整数)编写一个程序,该程序读取两个整数并确定并打印是否第一个 是秒的倍数。 [提示:请使用余数运算符。]

    #include <stdio.h>

int main(void)
{
    int num1, num2;

    printf("Enter two integers: ");
    scanf("%d%d", &num1, &num2);

    if((num2 % num1) == 0);
    {
        printf("%d and %d are multiples of each other\n",num1, num2);
    }

    if((num1 % num2) != 0);
    {
        printf("%d and %d are not multiples of each other\n",num1, num2);
    }

    return 0;
}

当我运行程序时,我用2和5进行了测试,它们不是彼此的倍数,但是程序会打印两个语句。谁能告诉我我做错了什么或我想念的是什么?本书的这一章仅包含if语句,不包含其他类型。谢谢!

2 个答案:

答案 0 :(得分:2)

  1. 每个;的末尾都有流浪if,因此{}中的位总是 跑。您的编译器没有警告您“如果为空”吗?如果没有,请打开警告。

  2. 您的if条件不是互斥的。改用if else

答案 1 :(得分:1)

  

问题:(整数)编写一个程序,该程序读取两个整数,并确定并打印第一个是否为第二个的倍数。

警告:您的第一个测试if((num2 % num1) == 0)与之不兼容,您可能想要(如果我忘记了多余的';')if((num1 % num2) == 0)

目标是不知道它们是否是彼此的倍数(这也不是您的程序要做的事情)

正如拔示巴所说的多余的“;”关闭您的 if

我也建议您检查 scanf

的结果

您还可以减少代码:

#include <stdio.h>

int main(void)
{
    int num1, num2;

    printf("Enter two integers: ");
    if (scanf("%d%d", &num1, &num2) == 2) {
      printf("%d is %smultiple of %d\n",
             num1, ((num1 % num2) == 0) ? "" : "not ", num2);
    }

    return 0;
}

编译和执行:

 /tmp % gcc -pedantic -Wextra c.c
 /tmp % ./a.out
Enter two integers: 6 2
6 is multiple of 2
 /tmp % ./a.out
Enter two integers: 5 3
5 is not multiple of 3