0

我有一个工厂自动化应用程序的作业要使用链表完成。由于一个部门的数量和可转移部门的数量可以改变,我决定为struct node *next使用灵活的数组。对于入口部门(i = 0),该程序工作得还算完美,但超出了一点它就会变得疯狂。

我定义的结构节点

struct node{
int data;
struct node *next[];
};

由于我们为必要的变量使用输入文件,因此也定义了这些变量(我的语言是土耳其语):

struct birKay{
int birimNo;
float islemZaman;
int birimIliski;
};

struct urKay{
    float gelisZaman;
};

struct birKay birimKayit={0,0.0,0};
struct urKay urunKayit={0.0};

这是应该构建结构的“simulasyon”(模拟)函数,它仍然失败(代码与撰写本文时一样):

system("cls");
int i,j,k,l,birSay,ilis,birIdeal,saySifir;
input = fopen("input.txt","r");
printf("Simulasyon baslatiliyor...\n");
printf("Girdi dosyasi okunuyor...\n");
fscanf(input,"%d",&birSay);
float workTime[birSay];
bool ilisMatris[birSay][birSay];
int ilSayDiz[birSay];
printf("Iliski matrisi cikariliyor...\n");
for(i = 0; i < birSay; i++)
{
    ilSayDiz[i] = 0;
    printf("%d",ilSayDiz[i]);
    for(j = 0; j < birSay; j++)
        ilisMatris[i][j] = false;
    fscanf(input,"%d %f %d",&birimKayit.birimNo,&workTime[i],&birimKayit.birimIliski);
    for(j = 0; j < birimKayit.birimIliski; j++)
    {
        fscanf(input,"%d",&ilis);
        ilisMatris[i][ilis] = true;
        ilSayDiz[i]++;
    }
    printf("%d\n",ilSayDiz[i]); 
}
fclose(input);
printf("Fabrika yapisi tanimlaniyor...\n");
struct node *start = NULL;
struct node *new_node, *ptr;
start=yapi_yukle(start,0);
for(i = 0; i < birSay; i++) //sorunlu kısım
{
    k = 0;
    for(j = 0; j < birSay; j++)
    {
        if(ilisMatris[i][j] == 1)
        {
            new_node = (struct node *)malloc(sizeof(struct node));
            new_node -> data = j;
            ptr = start;
            if(i == 0)
            {
                ptr -> next[k] = new_node;
                new_node -> next[k] = NULL;
                k++;
            }
            else
            {
                for(l = 0; l <= ilSayDiz[i]; l++)
                {
                    if(l == ilSayDiz[i])
                        if(ptr -> next[k] != NULL)
                            ptr = ptr -> next[k];
                }
            }
        }
    }
}
printf("\nSimulasyon sonlandirildi... ");
printf("Ana menuye donmek icin bir tusa basin...");
getch();
system("cls");
main();

“yapi_yukle”函数:

struct node *yapi_yukle(struct node *start,int num)
{
    struct node *new_node, ptr;
    new_node = (struct node *)malloc(sizeof(struct node));
    new_node -> data = num;
    new_node -> next[0] = start;
    start = new_node;
    return start;
}

我还有其他三个函数(main、inputFileCreator 和 fabrikaOku(读取从输入文件中获取的参数)),它们都可以完美运行。

我真的不知道该怎么办。我尝试了一些东西并且程序变得疯狂(可能来自无限循环或其他东西,但我无法检测到它们)。

我使用 Dev-C++ 5.11 编写 C 代码,任何调试任何代码的尝试都会导致崩溃。

欢迎任何形式的建议。

编辑:对于好奇的人,这里是输入文件的格式(示例,取自家庭作业文档):5 //部门数

0 2.2364 2 1 2 //部门号,工作时间,产品可转入的部门数,产品可转入的部门

1 4.5683 1 3

2 5.9876 2 3 4

3 3.8976 0

4 2.6789 0

20 //这个工厂处理的项目数 0.3504 //这个项目进入工厂的时间

0.9768

1.3085

5.0263

5.1213

5.9992

6.4886

10.4749

11.8744

13.4648

14.2401

14.2904

14.6714

20.7265

26.4457

32.0276

35.0026

36.2470

38.0850

42.1120

4

0 回答 0