[C] inserire array con numero elementi indefiniti

di il
12 risposte

[C] inserire array con numero elementi indefiniti


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

int main()  {
      int *v=NULL ; 
      int i, val; 
      int size = 0; 
do  {
            printf ( "Inserire un nuovo elemento nell'array :");


scanf ("%d", &val);
            v = (int*) realloc( v, (++size)*(sizeof(int)) );
            v[size-1] = val; 
      } while (val != -1); 
printf( "Elementi nell'array:"); 

      for ( i=0; i < size; i++ )
            printf ("%d ", v[i]);

free(v);
return 0; }


Ho scritto questo programma al fine di poter stampare una stringa con un numero indefinito di elementi ma ora sul mio libro i e' cominciato a parlare di funzioni che restituiscono puntatori. Per questo vorrei chiedervj se , utilizzando una funzione che restituisce un puntatore , e' possibile avere un output uguale al primo caso? Ho fatto una prova provando a modificare il codice ma mi da errore .. Grazie in anticipo per l'aiuto






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

int* funz()  {
int n;
int i ;
do  {
            printf ( "Inserire un nuovo elemento nell'array :");
            scanf ("%d", &i);
            *v = (int*) malloc(n*(sizeof(int)) );
             v[i] = i;

 while ( i != -1 );
return v; }

int main()  {
 int i;
 int n;
  int *v = funz();
for ( i=0; i<n ; i++ )
printf ( " l'array e' \n", v);
  free(v);
  return 0;
}

12 Risposte

  • Re: [C] inserire array con numero elementi indefiniti

    Un commento sul primo programmino:
    per uscire dal ciclo di inserimento dati, guardi se l'ultimo elemento inserito è pari a -1, peccato che il -1 lo memorizzi nel vettore!
    Un commento sul secondo programmino:
    non capisco cosa vuoi fare. A dire il vero, sembra che non hai le idee molto chiare anche tu. Se non sai tu cosa vuoi fare è difficile(=impossibile) spiegarlo a qualcun'altro (compresi i compilatori:)
    Dacci qualche altro dettaglio e vediamo cosa si può fare.
  • Re: [C] inserire array con numero elementi indefiniti

    Probabilmente volevi scrivere
    
    int* funz(int *n)  
    {
    	int *v = NULL;
    	int val;
    	int size=0;
    
    	do  
    	{
    		printf ( "Inserire un nuovo elemento nell'array :");
    		scanf ("%d", &val);
    		v = (int*) realloc( v, (++size)*(sizeof(int)) );
    		v[size-1] = val;
    	} while ( val != -1 );
    
    	*n = size-1;
    	return v; 
    }
    
    int main()  
    {
    	int i, n;
    	
    	int *v = funz(&n);
    	
    	for ( i=0; i<n ; i++ )
    		printf ( " l'array e' %d\n", v[i]);
    	
    	free(v);
    
    	return 0;
    }
    
  • Re: [C] inserire array con numero elementi indefiniti

    
    
    int* funz()  {
      int i, *v = (int*) malloc( 5*sizeof(int) );
      for ( i=0; i < 5; i++ )
        v[i] = i;
    return v; }
    int main()  {
      int *v = funz();
      free(v);
      return 0;
    }
    
    
    L'intento che avevo era modificare questo esempio trovato in rete, ed è da questo che sono partita per il secondo codice. Il punto e' che questo spezzone di codice così messo non fa nulla e cercavo di capire quale fosse la sua funzione.. Aggiungendo però un printf prima di free non ottengo nulla.. Il problema e' che sinceramente non capisco a cosa serva questo spezzone di codice. Senza compilarlo, con il printf , avrei detto che stampasse un array di 5 elementi ordinati, ed è per questo che ho cercato di modificarlo integrandolo con il primo
  • Re: [C] inserire array con numero elementi indefiniti

    Ma scusa, hai letto il codice che ti ho suggerito?
  • Re: [C] inserire array con numero elementi indefiniti

    Certo , solo che non capisco perché nell'esempio e' usata la malloc e non la realloc, che è' usata nel primo codice che ho scritto e anche in quello che mi hai suggerito
  • Re: [C] inserire array con numero elementi indefiniti

    Perché quel codice (che non so da dove l'hai preso e perché) fa una cosa diversa da quello tuo iniziale. Quello con la malloc alloca 5 elementi nel vettore e li restituisce, il tuo dovrebbe invece riallocare continuamente per aggiungere elementi in un vettore di grandezza indefinita.

    Insomma, stai vedendo un codice che non c'entra niente con quello che devi fare.
  • Re: [C] inserire array con numero elementi indefiniti

    Capisco, e a a parte aggiungere un printf prima di free , c'è qualcosa che posso fare per vedere L'output di questa porzione di codice ?
  • Re: [C] inserire array con numero elementi indefiniti

    Marioart ha scritto:


    Capisco, e a a parte aggiungere un printf prima di free , c'è qualcosa che posso fare per vedere L'output di questa porzione di codice ?
    Ma di che output parli ? Scusa ma non capisco.

    Quel codice alloca 5 elementi interi in un vettore e ci memorizza i valori 0 1 2 3 e 4

    Non c'è output, non c'è elaborazione e non c'entra con la tua richiesta iniziale.
  • Re: [C] inserire array con numero elementi indefiniti

    Ma se io cambiassi il codice in modo che mi vengano chiesti 5 interi e vengano stampati i. Quelle posizioni , allora ritornerei al caso del primo esempio (con realloc) ?
  • Re: [C] inserire array con numero elementi indefiniti

    Non ti capisco
  • Re: [C] inserire array con numero elementi indefiniti

    Quel codice alloca 5 elementi interi in un vettore e ci memorizza i valori 0 1 2 3 4 .
    Scusa ho scritto una ca**ata! Ki hai detto che la porzione memorizza nel vettore i valori 0 ,1,2,3,4.. Io vorrei che li stampasse anche però ...
  • Re: [C] inserire array con numero elementi indefiniti

    Aggiungi un ciclo con una printf degli elementi v

    Parliamo di programmazione di base in C...

    E comunque cosa c'entra questo codice con il tuo post iniziale non lo capisco.
    La discussione è diventata OT ... e mi sembra di rivedere discussioni simili a

    https://www.iprogrammatori.it/forum-programmazione/cplusplus/differenza-malloc-realloc-t15869.html

    fatte con Ele9 e ellosma ...
Devi accedere o registrarti per scrivere nel forum
12 risposte