Newsgroup: it.comp.lang.c
Titolo: che strano

 Ciao amici del NG
e' da poco che scrivo qualcosa in c ed ho un piccolo problema.
Sto provando a "creare delle liste" ma durante il ciclo in cui c'è
l'istruzione malloc() un' istruzione NON viene eseguita.
ecco il listato 
#include <stdio.h>
#include <string.h>
#include <malloc.h>
typedef struct tag_elemento {
        char * nome;
        int anno;
        struct tag_elemento * successivo;
        } dati;
 dati * punt1;
 dati * punt2;
 int posizione;
 void main (void)
  {  char * input1;
     int input2;
     punt2=NULL;
     do
     {
     punt1 = malloc (sizeof(dati));
     if (!punt1) return;
     if (punt1!=punt2) printf ("OK \n");
     printf ("inserire nome  \n ");
     scanf ("%s",punt1->nome);        /* questa istruzione */
     printf ("%s",punt1->nome);
     printf ("  inserire anno  ->");
     scanf ("%d",&(punt1->anno));
     printf ("%d",punt1->anno);
     punt1->successivo=punt2;
     punt2=punt1;     }
     while (punt1->anno!=0);
     punt1->successivo=NULL;
    } 
 
Ho provato anche con gets ma viene saltata ed al successivo printf viene
stampato "(null)".
Ps: per il primo ciclo e' tutto ok ! il problema si verifica
dalla seconda iterazione in poi.
Potete darmi una mano ?
-- 
Saluti 
Antonio.
Risposte sul NG , grazie.

In article <01bea23d$c98b31c0$d1806ec3@antoniol>, 
adel...@media.cesvitec.it
 says...
nome deve essere un array di char:
-------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <malloc.h>
typedef struct tag_elemento {
        char nome[10];    /*qui*/
        int anno;
        struct tag_elemento * successivo;
        } DATI;
 DATI *punt1;
 DATI *punt2;
 int posizione;
 void main (void)
  {  
     punt2=NULL;
     do
     {
     punt1 = malloc (sizeof(DATI));
     if (!punt1) return;
     if (punt1!=punt2) printf ("OK \n");
     printf ("inserire nome  \n ");
     scanf ("%s",punt1->nome);        /* questa istruzione */
     printf ("%s",punt1->nome);
     printf ("  inserire anno  ->");
     scanf ("%d",&(punt1->anno));
     printf ("%d",punt1->anno);
     punt1->successivo=punt2;
     punt2=punt1;     }
     while (punt1->anno!=0);
     punt1->successivo=NULL;
    } 
 -----------------------------------------------------------------------        

Potete darmi una mano ?
Ti riscrivo un programma simile : 
#include <stdio.h>
#include <stdlib.h>
typedef struct item_tag {
                           char * x ;
                           struct item_tag * next ;
                        } * item_p ;
void inserisci ( item_p * radice, char * x )
{
     if ( NULL == *radice )
     {
        *radice = malloc ( sizeof * radice ) ;
        (*radice)->x = malloc ( strlen ( x ) + 1 ) ;
/*      ^^^^^ questa e' l'operazione da te saltata */
        (*radice)->next = NULL ;
        strcpy ( (*radice)->x, x ) ;
     }
     else inserisci ( &(*radice)->next, x ) ;
}
void scrivi ( item_p radice )
{
     if ( radice != NULL )
     {
        printf ( "%s -> ", radice->x ) ;
        scrivi ( radice->next ) ;
     }
     else printf ("NULL\n" ) ;
}
void set_last ( char * a, char c )
{
     while ( *a++ != '\n' ) ;
     *(a-1) = 0 ;
}
int main()
{
    item_p mia_lista = NULL ;
    char nome [ 20 ] ;
    int i ;
    for ( i = 1 ; i <= 5 ; i++ ) 
    {
       printf ( "inserisci nome %d : ", i ) ;
       fgets ( nome, sizeof nome, stdin ) ;
       set_last ( nome, 0 ) ;
       inserisci ( &mia_lista, nome ) ;
    } ;
    scrivi ( mia_lista ) ;
    return 0 ;
}