vscode报错信息含义及主函数如何定义

网上看到一个问题:已知a,b均为正整数,满足a<b,a2+b2=289,求a,b。

我想用C解决这个问题,并把289改为任意一个从键盘输入的正整数,思路如下:

假设给定的数为a,现将a对半分再开方得到k,那么[1,k]就是较小数(假设为b)的值域。用for循环一个个带入较小数,根据等式求出较大数,若较大数是整数(即取整后大小不变)则输出结果,代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
    int a,b,c;
    int i,k;
    scanf("%d",&a);
    k=sqrt(a/2);
    for(i==1;i<=k;i++)
    {
        b=i;
        c=sqrt(a-b*b);
        if(c==int(c))printf("%d,%d",b,c);
    }
    getchar() ;
    getchar() ;
}

在vscode中运行报错如下:

[Running] cd "e:\学习\编程\C\" && gcc Untitled-1.c -o Untitled-1 && "e:\学习\编程\C\"Untitled-1

Untitled-1.c:3:1: warning: return type defaults to 'int' [-Wimplicit-int]

 main()

 ^~~~

是不是主函数main()的声明语句有问题?应该怎么改以及判断整数是否可以用程序中的if(c==int(c))这个写法?(虽然c定义为int ,但编译器似乎将sqrt的返回结果认定为float,且确实会存储小数点后的信息)

帮你修改好了

#include <stdio.h>
#include <math.h>

int main()
{
    int a, b, c;
    int i, k;
    scanf("%d", &a);
    k = (int)sqrt(a / 2);
    for (i = 1; i <= k; i++)
    {
        b = i;
        c = (int)sqrt(a - b * b);
        if (c * c + b * b == a)
            printf("%d,%d", b, c);
    }
    getchar();
    return 0;
}