2017-04-04 9 views
-2

Pour une raison quelconque, lorsque je réalloue la taille du tableau créé en utilisant calloc, il supprime les valeurs qui ont déjà été saisies, peut-être que quelque chose se passe mais je ne comprends pas pourquoi. J'ai changé le code pour qu'il comprend tout ce dont il a besoin pour travailler, désolé j'oublié querealloc supprimer des données déjà dans le tableau en C

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

int main(void) { 
unsigned int arraySize; // size of array 
int moreElements; // stores user input whether more elements are to be 
int additionalElements = 0; // number of elements to be added to array 
unsigned int type; // stores the type of array 
float sum = 0; // the sum of the elements 
float *floatArrPtr; // pointer to a flaot 

floatArrPtr = calloc(arraySize, sizeof(float)); 

for(size_t i = 0; i < arraySize; i++) 
{ 
    printf("Please enter a number for the array: "); 
    scanf("%f", &floatArrPtr[i]); 
    printf("%f\n", floatArrPtr[i]); 
} 

for(size_t i = 0; i < arraySize; i++) 
{ 
    sum += *(floatArrPtr+i); 
} 
sum /= arraySize; 

printf("The average of the elements of the array is %lf\n", sum); 

do 
{ 
    printf("if there are more elements to be added enter 1 and 0 if not:   "); 
    scanf("%d", &moreElements); 
} while (moreElements != 0 && moreElements != 1); 

if (moreElements == 1) { 
    printf("please enter the number of additional elements you want to add: "); 
    scanf("%d", &additionalElements); 

    floatArrPtr = realloc(intArrPtr,(arraySize+additionalElements) * sizeof(float)); 
    for (size_t i = arraySize; i < arraySize+additionalElements; i++) 
    { 
    printf("Please enter a number for the array: "); 
    scanf("%f", &floatArrPtr[i]); 
    } 

    sum = 0; 
    for(size_t i = 0; i < arraySize+additionalElements; i++) 
    { 
    sum += *(floatArrPtr+i); 
    printf("%zu, %lf, %d\n", i, floatArrPtr[i], arraySize + additionalElements); 
    } 
    sum /= (arraySize + additionalElements); 

    printf("The average of the elements of the array is %lf\n", sum); 
} 
} 
+3

Qu'est-ce que 'intArrPtr'? – ThingyWotsit

+3

Impossible de déboguer du code incomplet (par exemple, qu'est-ce que 'intArrPtr'?). S'il vous plaît fournir un [mcve]. – kaylum

+0

Quel type est 'floatArrPtr'? Est-ce 'float *' ou 'double *'? Je suppose que c'est «double *», ce qui signifie que vous n'allouez pas assez de mémoire. –

Répondre

2

Ce code calloc en haut est faux. Pour un tableauSize de 1000, il alloue un million de flottants, ou 4 Mo. Regarde ça. Puis je suppose que le vrai problème est le intArrayPtr qui s'est glissé du code précédent.

Utilisez les fonctions, elles sont payantes. - Je veux dire faire tout votre code plus de 4 lignes ou si longtemps par fonction, cela stoppera variables anciennes du début de glisser dans

La mauvaise ligne est

floatArrPtr = realloc(intArrPtr... 

Vous devez

floatArrPtr = realloc(floatArrPtr... 
.

Je ne connais pas le but de intArrPtr, mais il semble que ce code compile qu'il vient du code ci-dessus.

Vous avez des variables globales. Il faut être très prudent avec eux car ils sont une douleur au mieux, au pire, ils causent des bugs imprévus, ce qui est ce que vous avez.

Faites votre projet deux fichiers, un pour l'entier et un pour le flotteur, et vous verrez votre erreur dans le compilateur.

+0

J'utilise des fonctions, c'est juste dans ce cas je dois demander à l'utilisateur si elles Je veux que le tableau soit de nombres entiers ou flottants, donc j'ai décidé de ne pas le faire, merci d'avoir repéré l'erreur Calloc mais je ne pense pas que c'est parce que ça ne marche pas car ça marche pour la version entière – james

+0

et j'ai toujours le même problème – james