Innanzitutto quando leggi da tastiera un dato di tipo char devi utilizzare il codice di formato %c e non %s, quindi sostituiscilo nelle scanf() dove leggi il valore di ris.
Fatto questo, ci potrebbero essere i soliti problemi generati dalle istruzioni di input bufferizzate... quindi aggiusta il codice così
codice:
#include <stdio.h>
#include <stdlib.h>
struct utente
{
int id;
struct utente *next;
};
int main(void)
{
char ris;
struct utente *testa, *variante;
testa = malloc(sizeof(struct utente));
printf("Inserisci l'ID dell'utente: "); scanf("%d", &testa->id);
variante = testa;
printf(" - Altro utente da inserire? - "); scanf("%c",&ris);
while ( getchar() != '\n' );
while( ris != 'n')
{
variante->next = malloc(sizeof(struct utente));
printf("Inserisci l'ID dell'utente: "); scanf("%d", &variante->next->id);
while ( getchar() != '\n' );
variante->next->next= NULL;
variante = variante->next;
printf(" - Altro utente da inserire? - ");
scanf("%c",&ris);
}
printf("%d", testa->id);
printf("\n programma terminatao \n");
return 0;
}
oppure con
codice:
#include <stdio.h>
#include <stdlib.h>
struct utente
{
int id;
struct utente *next;
};
int main(void)
{
char ris;
struct utente *testa, *variante;
testa = malloc(sizeof(struct utente));
printf("Inserisci l'ID dell'utente: "); scanf("%d", &testa->id);
variante = testa;
printf(" - Altro utente da inserire? - "); scanf("%c%*c",&ris);
while( ris != 'n')
{
variante->next = malloc(sizeof(struct utente));
printf("Inserisci l'ID dell'utente: "); scanf("%d%*c", &variante->next->id);
variante->next->next= NULL;
variante = variante->next;
printf(" - Altro utente da inserire? - ");
scanf("%c",&ris);
}
printf("%d", testa->id);
printf("\n programma terminatao \n");
return 0;
}
le aggiunte in rosso nei due codici servono entrambe a "pulire" il buffer di input da tastiera dal carattere di newline che spesso dà problemi. Potresti usare anche fflush(stdin) ma non funzionerebbe su tutti i sistemi.