这段代码应该读取一定数量的数字,然后打印它们中有多少可以被除数变量整除,但是当我这样写它时似乎存在某种问题。
#include <stdio.h>
int main()
{
long repeat;
int divisor;
long long t;
long result = 0;
scanf("%d", &repeat);
scanf("%d", &divisor);
for (long i = 0; i < repeat; i++)
{
scanf("%d", &t);
if (t % divisor == 0)
{
result++;
}
}
printf("%d",result);
return 0;
}
但是当我将开头的所有变量设置为0时,它可以正常工作。有人能告诉我第一次实施的问题是什么?
#include <stdio.h>
int main()
{
long repeat = 0;
int divisor = 0;
long long t = 0;
long result = 0;
scanf("%d", &repeat);
scanf("%d", &divisor);
for (long i = 0; i < repeat; i++)
{
scanf("%d", &t);
if (t % divisor == 0)
{
result++;
}
}
printf("%d",result);
return 0;
}
答案 0 :(得分:3)
不是某人,而是 - GCC 7.2 可以:
% gcc div.c -Wall -Wextra
div.c: In function ‘main’:
div.c:10:13: warning: format ‘%d’ expects argument of type ‘int *’,
but argument 2 has type ‘long int *’ [-Wformat=]
scanf("%d", &repeat);
~^ ~~~~~~~
%ld
div.c:16:17: warning: format ‘%d’ expects argument of type ‘int *’,
but argument 2 has type ‘long long int *’ [-Wformat=]
scanf("%d", &t);
~^ ~~
%lld
div.c:23:14: warning: format ‘%d’ expects argument of type ‘int’,
but argument 2 has type ‘long int’ [-Wformat=]
printf("%d",result);
~^
%ld
它还告诉下面 你应该使用代替:%ld
,%lld
和%ld
。由于您没有使用正确的长度修饰符,行为是未定义,这使您认为通过用零初始化变量来“修复”程序。
另外,请记住检查scanf
的返回值,并且如果输入了无效内容,则需要丢弃该行的其余部分;只需在程序中输入hello
即可使其挂起。