繁体   English   中英

为什么函数不取值

[英]Why Does the function doesn't take the value

我正在处理 C 中的一个问题,该问题将开始和结束时间作为输入,并建议所有可能的一小时。 插槽,我在我的代码中编写了一个简单的函数,当我运行它时,我没有收到任何错误,但是我得到了不相关的输出,当我通过 gdb 运行我的代码时,我看到我的函数不接受输入数据而是采用它为0

#include<stdio.h>
#include<stdlib.h>

int solve(int* L, int* R, int* N)
{
    int slot[2];
    int i, j;
    if (L[0] == 1)
    {
        slot[0] = L[0];
        slot[1] = L[0] + 1;
    }

    for (i = 1; L[i] != 0; i++)
    {
        for (j = 0; R[j] != 0; j++)
        {
            if (R[j] < L[i + 1])
            {
                slot[0] = R[j];
                slot[1] = R[j] + 1;
            }
        }
    }
    for (i = 0; i < *N; i++)
    {
        printf("%d\t", slot[i]);
    }
    return 0;
}


int main()
{
    int N = 0;
    int* L, * R;
    int i;
    scanf("%d", &N);
    printf("%d", N);
    L = (int*)calloc(N, sizeof(int));
    R = (int*)calloc(N, sizeof(int));

    for (i = 0; i < N; i++)
    {
        scanf("%d\t", &L[i]);
    }
    for (i = 0; i < N; i++)
    {
        scanf("%d\t", &R[i]);
    }

    for (i = 0; i < N; i++)
    {
        printf("%d\t", L[i]);
    }
    for (i = 0; i < N; i++)
    {
        printf("%d\t", R[i]);
    }
    solve(L, R, &N);
    free(L);
    free(R);

    return 0;
}

请帮助我在我的代码中找到错误

L[i] != 0循环中的样式条件可能会超出数组的范围。 由于您阅读了 N 个数字,因此您可能打算循环到 N(由于使用[i+1]可能少了 1 个),或者您的意思是L = (int*)calloc(N+1, sizeof(int)); 以确保 0 终止符。 R 自然也是如此,只是你从不使用 [j+1]。

当我调试您的代码时,我看到输入数据已被接受。 我看到的问题是,当涉及到这个solve函数中的 for 循环时, L[i] != 0R[j] != 0使循环像一个无限循环左右,因为代码给出了不相关的废话数字比您为 L 和 R 数组指定的元素(数量 N)更多。 当我写for(i=0; i<*N; i++)for(j=0; j<*N; j++)时,它可以用您指定的元素结束循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM