C,变量初始化

时间:2018-05-28 19:37:02

标签: c variables

这段代码应该读取一定数量的数字,然后打印它们中有多少可以被除数变量整除,但是当我这样写它时似乎存在某种问题。

#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;
}

1 个答案:

答案 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即可使其挂起。