函数的属性 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;
}
这是我在 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;
}