Allocazione dinamica array

di il
3 risposte

Allocazione dinamica array

Salve a tutti.
Sicuramente mi sto perdendo in un bicchiere d'acqua ma non so veramente come risolvere il problema che segue:"Si legga dall’input una sequenza di numeri (0 o 1) terminata dal numero -1. Si inseriscano tali numeri in un array di interi nell’ordine in cui vengono
letti. L’ultimo numero letto (-1) non va inserito nell’array in quanto rappresenta unicamente un terminatore di sequenza."
Ho pensato di riallocare un array nella heap finchè non si incotra l'intero (-1) ma dopo infiniti errori mi sono arreso .
Potete illuminarmi con qualche consiglio? Grazie mille

3 Risposte

  • Re: Allocazione dinamica array

    Cosa avevi scritto? Cosa non andava? Parti da quello
  • Re: Allocazione dinamica array

    Ho tweakato un pò il codice e sembrerebbe che funzioni però non so se risolve il problema in modo efficente:
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
     int i=1,stop=0,temp;
     //alloco memoria e leggo il primo elemento
     int *ptr=malloc(1*sizeof(int));
     scanf("%d",&ptr[0]);
     //uso questo ciclo per allungare di un intero l'array nella heap finchè non digito -1
     while(!stop)
     {scanf("%d",&temp);
      if(temp==0 || temp==1)
      {ptr=realloc(ptr,1*sizeof(int));
       ptr[i]=temp;}
      else
      if(temp==-1)
       stop=1;}
     return 0;
    }
  • Re: Allocazione dinamica array

    ...io lo muterei così:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main() {
    
    	int i = 1, stop = 0, temp, c = 0;
    
    //alloco memoria e leggo il primo elemento
    	int *ptr=malloc(1*sizeof(int));
    
    	scanf("%d", ptr);
    
    //uso questo ciclo per allungare di un intero l'array nella heap finchè non digito -1
    	while(temp > -1) {
    	   scanf("%d",&temp);
    	   if(temp==0 || temp==1) {
    	      ++i;
    	      ptr=realloc(ptr, i * sizeof(int));
    	      ptr[i-1] = temp;
    	   }
    	}
    
    
    /* Verifica dei valori immessi */
    	for (c == 0; c < i; c++)
    	   printf("%d\n", *(ptr + c));
    	   
    	free(ptr);
    
    	return (0);
    
    }
Devi accedere o registrarti per scrivere nel forum
3 risposte