函数的属性 return 到数组

Attribute return of a function to an array

这是我在 Whosebug 上的第一个问题! :) 老实说,我要毁了我的整个设置。

我的代码让我抓狂。

我的问题是,我无法用函数的 return 填充动态数组。 我的目标是,对于每个数组框,用 'randomizer' 的随机值填充它。我无法在数组框中使用 return 随机数发生器。

代码如下:

main.c:

#include "functions.h"
#include "functions.c"

/*       TP 3 - ESIEE-IT Rémy JARDIN        */

int main() {
    int saisie, i;
    printf("Creation du Tableau. \nNombre de caractere du tableau : ");
    scanf("%d", &saisie);
    ArrayCreate(saisie);
     
    // Affichage
    
    return 0;
}

functions.h:

#ifndef FUNCTIONS_H
#define FUNCTIONS_H

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

int ArrayCreate(int saisie);
int randomizer();
int insereAIndice();

#endif

functions.c:

#include <stdio.h>
#include <stdlib.h>
    
int ArrayCreate(int saisie) {
    int i;
    int *Tab = (int *)malloc(saisie * sizeof(int));
    if (Tab == NULL) {
        printf("Not enough Memory");
        exit (1);
    }
    for (i = 0; i < saisie; i++) {
        Tab[i] = (randomizer + 1);
    }
    
    printf("\n Resultats : ");
    for (i = 0; i < saisie; i++) {
        printf("%d - ", *(Tab + i));
    }
    
    return 0;
}
    
int randomizer() {
    //int x = rand() % (100 + 1);
    return 1;
}

错误是:

functions.c: In function 'ArrayCreate':
functions.c:12:8: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
 Tab[i] = (randomizer+1);

而不是 Tab[i] = (randomizer + 1); 你应该写:

Tab[i] = randomizer();

另请注意这些评论:

  • functions.h中的函数原型应该有一个参数void:

    int randomizer(void);
    int insereAIndice(void);
    
  • 文件functions.c应该包含functions.h以确保函数声明和函数声明之间的一致性定义。

  • *(Tab + i)Tab[i]可读性差很多。如果您想混淆代码,请使用等效的 i[Tab] :)

这是修改后的版本:

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

int ArrayCreate(int saisie) {
    int i;
    int *Tab = (int *)malloc(saisie * sizeof(int));
    if (Tab == NULL) {
        fprintf(stderr, "Not enough Memory\n");
        exit(1);
    }
    for (i = 0; i < saisie; i++) {
        Tab[i] = randomizer();
    }
    
    printf("\n Resultats : ");
    for (i = 0; i < saisie; i++) {
        printf(" %d", Tab[i]);
    }
    printf("\n");
    return 0;
}
    
int randomizer(void) {
    // return a random integer in the range 1..100
    return 1 + rand() % 100;
}