#include <stdio.h>
#include <stdlib.h>
int* removeNegatives(int *v, int *totv){
int i, j, aux=(*totv), t=0;
for(i=0; i<aux; i++){
if(v[i]<0){
t=v[i];
for(j=i; j<=aux; j++){
v[j]=v[j+1];
}
v[(*totv)-1]=t;
aux--;
i=-1;
}
else{
continue;
}
}
totv=&aux;
v=(int*)realloc(v,(*totv)*sizeof(int));
return(v);
}
int main(){
int *totv=NULL, *v=NULL, *z=NULL, i, j=0, a;
printf("How many numbers are you entering?\n");
scanf("%d",&i);
printf("Enter them, then:\n");
totv=&i;
do{
if(j<(*totv)){
scanf("%d",&a);
v=(int*)realloc(v,++j*sizeof(int));
v[j-1]=a;
}
}while(j<(*totv));
printf("\n");
printf("Size before: %d\n",*totv);
z=retiraNegativos(v,totv);
printf("Size after: %d\n",*totv);
printf("\n");
printf("[ ");
for(i=0; i<(*totv); i++){
printf("%d ",z[i]);
}
printf("]");
printf("\n");
free(z);
return(0);
}
Ich Ändern der Größe des Vektors „v“ entsprechend der Anzahl der negativen Zahlen der Benutzer eingegeben hat.Zeiger nicht
Aber das Problem ist, dass der Zeiger „totv“ wird nicht aktualisiert, nachdem ich die fucntion „removeNegatives“ nennen.
Ihre Hilfe wird sehr geschätzt!
Ein Klassiker (Dutzende von Duplikaten): Parameter __ einschließlich Zeiger__ werden durch Wert in C übergeben. –
Selbst wenn es "Aktualisierung" wäre, wie würden Sie erwarten, dass es funktioniert? Innerhalb von 'removeNegatives' machen Sie Ihr' totv' so, dass es auf eine * lokale Variable * 'aux' zeigt. Diese lokale Variable wird zerstört, wenn die Funktion beendet ist. – AnT
Bitte den Code richtig einrücken, damit er besser lesbar ist. –