为什么运行不了(关键词-#include)

求问为什么这个代码运行不了?
题目如下

img


我的代码如下

#include<stdio.h>
int zolu(int n[], int ma[], long long sum);
int main(void) 
{
    
    long long sum = 0;
    int n[2]/*目标点*/, ma[2]/*马*/;


    scanf_s("%d%d%d%d",&n[0], &n[1], &ma[0], &ma[1]);
    sum = zolu(n, ma, sum);
    printf("%lld", sum);
    return 0;
}
int zolu(int n[], int ma[], long long sum) //从终点开始,一个zolu函数表示遍历一个点上的两种选择,递归
{
    //保留源路径,制造探路数组
    int n1[2];
    n1[0] = n[0];
    n1[1] = n[1];
    for (int i = 0; i < 2; i++) //01分别代表向左/上
    {    
        if (n1[0] == 0 && n1[1] == 0) //到起点算一条路径,加一
        {
            sum++;
            continue;
        }
        if (i == 0) 
        {
            n1[0]--;
            if (n[0] >= 0/*不越过边界*/ && (n[0] != ma[0] || n[1] != ma[1])/*不碰马*/ && (n[0] - ma[0]) * (n[0] - ma[0]) + (n[1] - ma[1]) * (n[1] - ma[1]) != 5)//用距离不为5表示不经过马拦路点
            {
                sum = zolu(n1, ma, sum);
            }
        }
        if (i == 1)
        {
            n1[1]--;
            if (n[1] >= 0 && (n[0] != ma[0] || n[1] != ma[1]) || (n[0] - ma[0]) * (n[0] - ma[0]) + (n[1] - ma[1]) * (n[1] - ma[1]) != 5)
            {
                sum = zolu(n1, ma, sum);
            }
        }
    }
}

【以下回答由 GPT 生成】

问题出在#include相关的问题。在C语言中,使用#include来引入头文件,头文件中定义了函数的原型和相关的宏定义。在这个代码中,使用了#include 来引入stdio.h头文件,表示要使用标准输入输出函数。

然而,代码中使用了scanf_s函数来获取输入,而scanf_s函数并不是标准C库函数,它是一个安全版本的scanf函数,适用于微软的编译器。因此,在其他编译器上可能会报错。根据代码中的#include ,推测你的代码可能是在非微软编译器上运行的,所以才无法运行。

解决方案之一是将scanf_s函数修改为标准的scanf函数。修改如下:

scanf("%d%d%d%d", &n[0], &n[1], &ma[0], &ma[1]);

另外,还需要给zolu函数加上返回值,因为zolu函数的返回值类型是int,但是在代码中并没有返回任何值。解决方案如下:

int zolu(int n[], int ma[], long long sum)
{
    //函数的实现
    return sum;
}

修改了这两处之后,代码应该就可以正常运行了。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

供参考:

#include <stdio.h>
#include <string.h>
int main() 
{
    int i, j, n1, m1, n2, m2;
    long long dp[30][30];
    memset(dp, -1, sizeof(dp));
    scanf("%d %d %d %d", &n1, &m1, &n2, &m2);
    for (i = 0; i < n1 + 1; i++) 
        dp[i][m1 + 1] = 0;
    for (i = 0; i < m1 + 1; i++) 
        dp[n1 + 1][i] = 0;
    dp[n1][m1] = 1;
    for (i = n1; i >= 0; i--) {
        for (j = m1; j >= 0; j--) {
            if ((i - n2) * (i - n2) + (j - m2) * (j - m2) == 5 || i == n2 && j == m2) 
                dp[i][j] = 0;
            if (dp[i][j] == -1) 
                dp[i][j] = dp[i][j + 1] + dp[i + 1][j];
        }
    }
    printf("%lld", dp[0][0]);
    return 0;
}