因此,我试图自学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语句,不包含其他类型。谢谢!
答案 0 :(得分:2)
每个;
的末尾都有流浪if
,因此{
和}
中的位总是 跑。您的编译器没有警告您“如果为空”吗?如果没有,请打开警告。
您的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