scanf 不要求输入
scanf does not ask for input
编译时间很长,而且出现了一些随机数,显然scanf()
没有要求输入
#include <stdio.h>
int main() {
int a;
//a = 1472464;
scanf ("%d", &a);
if ((a % 6) && (a %4) == 0)
{
printf("Input %d is divisible by 6 and 4\n", a);
}
else {
printf(" Input %d is not divisible by 6 and 4\n", a);
}
printf("Hello, World!\n");
return 0;
}
这一行是错误的:
if ((a % 6) && (a %4) == 0)
应该是:
if ((a % 6) == 0 && (a %4) == 0)
表达式 (a % 6) && (a %4) == 0
不会将两个模运算与零进行比较。相反,它执行 (a % 6)
,这将导致 0
和 5
之间的数字,并将其用作布尔值,然后将其与 (a %4) == 0
.[= 的结果一起使用28=]
相反,您需要分别进行每个比较:(a % 6) == 0 && (a % 4) == 0
这里要知道的重要一点是,在 C 中只考虑零和空指针 "false"。任何不为零(或空指针)的东西都是真的。
这意味着如果 a
例如 4
那么 a % 6
将是 "true" 因为 a % 6
是 4
而不是零。相反,当 a
例如 6
那么 a % 6
将是 0
即 "false".
所以仅使用 a % 6
实际上会给出与您想要的相反的结果,当 a
不是 时 "true" 不是 可被 6
.
整除
编译时间很长,而且出现了一些随机数,显然scanf()
没有要求输入
#include <stdio.h>
int main() {
int a;
//a = 1472464;
scanf ("%d", &a);
if ((a % 6) && (a %4) == 0)
{
printf("Input %d is divisible by 6 and 4\n", a);
}
else {
printf(" Input %d is not divisible by 6 and 4\n", a);
}
printf("Hello, World!\n");
return 0;
}
这一行是错误的:
if ((a % 6) && (a %4) == 0)
应该是:
if ((a % 6) == 0 && (a %4) == 0)
表达式 (a % 6) && (a %4) == 0
不会将两个模运算与零进行比较。相反,它执行 (a % 6)
,这将导致 0
和 5
之间的数字,并将其用作布尔值,然后将其与 (a %4) == 0
.[= 的结果一起使用28=]
相反,您需要分别进行每个比较:(a % 6) == 0 && (a % 4) == 0
这里要知道的重要一点是,在 C 中只考虑零和空指针 "false"。任何不为零(或空指针)的东西都是真的。
这意味着如果 a
例如 4
那么 a % 6
将是 "true" 因为 a % 6
是 4
而不是零。相反,当 a
例如 6
那么 a % 6
将是 0
即 "false".
所以仅使用 a % 6
实际上会给出与您想要的相反的结果,当 a
不是 时 "true" 不是 可被 6
.