首页 > 解决方案 > 在另一个函数中使用修改后的结构

问题描述

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

#define ogrNo "34"
#define hex "0123456789ABCDEF"

int bussNo;
void hexControlFonk();

struct Otobusler {
    int bussNumber;
    char bussHexNum[100][6];
};

int main() {
    srand(time(NULL));
    char numaraDeposu[10000][6] = { "" };
    struct Otobusler buss[1000];

    scanf("%d", &bussNo);
    for (int i = 1; i <= bussNo; i++) {
        for (int j = 0; j < 4; j++) {
            numaraDeposu[i][j] = hex[rand() % 16];
        }
        for (int k = 4; k >= 0; k--) {
            int l = k + 2;
            numaraDeposu[i][l] = numaraDeposu[i][k];
        }
        numaraDeposu[i][0] = ogrNo[0];
        numaraDeposu[i][1] = ogrNo[1];
        strcpy(buss[i].bussHexNum[i], numaraDeposu[i]);
        buss[i].bussNumber = i;
        printf("%d-%s\n", buss[i].bussNumber, buss[i].bussHexNum[i]);
    }
    hexControlFonk(buss[1000]);
    printf("%s\n", buss[10].bussHexNum[10]);
}

void hexControlFonk(struct Otobusler buss[1000]) {
    for (int m = 1; m < bussNo; m++) {
        for (int n = 1; n < bussNo; n++) {
            if (strcmp(buss[m].bussHexNum[m], buss[n].bussHexNum[n]) == 0 && n != m) {
                printf("%d,", n);
            }
        }
    }
    printf("%s\n", buss[10].bussHexNum[10]);
}

我制作了一个程序,为每条总线生成十六进制数字。他们从34(我的学校编号)开始,它工作正常,但我不能在hexControlFonk(). 此函数检查任何 2 个十六进制代码是否相同。但是主总线 10 和总线 10hexControlFonk是不一样的。需要帮忙。

标签: c

解决方案


以下是您的代码的一些重要问题(来自评论的编译列表)。
正如您现在已经确认的那样,修复这些也可以解决您的问题。

  • 修复错误的原型: void hexControlFonk();->void hexControlFonk(struct Otobusler buss[1000]);

  • 将正确原型所需的类型声明移到原型之前。

  • WhozCraig 评论:正确调用函数,使用数组(有效地使用指向它的指针);hexControlFonk(总线[1000]);==> hexControlFonk(总线);`

  • Werner Henze 的评论:(由上面介绍)不要使用从数组后面读取的值调用函数,即使用允许范围 0...999 中的索引,而不是 1000。


推荐阅读