Newsgroup: it.comp.lang.c
Titolo: Help....Non termina!!!

Ciao a tutti...
ho un piccolo problema:non riesco a far terminare il programma
seguente!!!
qualcuno mi può aiutare a venirne fuori????
P.S.:Compilo con dev-c++ in questo momento!!
#include <stdio.h>
#include <stdlib.h>
#define EOF 9999
struct listNode {       /*Struttura ricorsiva della lista*/
    int dato;
    struct listNode *nextPtr;
    };
typedef struct listNode LISTNODE;
typedef LISTNODE *LISTNODEPTR;
                    /*Definizione delle tre funzioni utilizzate*/
void insert(LISTNODEPTR *, int);
void InserisciListaOrdinata (LISTNODEPTR *, int);
int StampaLista (LISTNODEPTR);
main()
{
LISTNODEPTR startPtr = NULL;
int n,i=0;
while (n != EOF){
    scanf("%d", &n);
    insert(&startPtr, n);
}
printf("Digitare il numero da inserire in modo ordinato\n");
scanf("%d",&i);
InserisciListaOrdinata(&startPtr,i);
StampaLista(startPtr);
system ("PAUSE");
}
/*----Funzione per creare la lista con interi dati in input(Ordina
anche se inseriti in disordine)----*/
void insert(LISTNODEPTR *sPtr, int value)
{
LISTNODEPTR newPtr, previousPtr, currentPtr;
newPtr = malloc(sizeof(LISTNODE));
if (newPtr != NULL){
newPtr -> dato = value;
newPtr -> nextPtr = NULL;
previousPtr = NULL;
currentPtr = *sPtr;
while (currentPtr != NULL && value > currentPtr -> dato){
previousPtr = currentPtr;
currentPtr = currentPtr -> nextPtr;
}
if (previousPtr == NULL){
    newPtr -> nextPtr = *sPtr;
    *sPtr = newPtr;
    }
    else {
    previousPtr -> nextPtr = newPtr;
    newPtr -> nextPtr = currentPtr;
    }
    }
}
/*-------------Funzione che inserisce un itero in ordine in una lista
ordinata----------*/
void InserisciListaOrdinata(LISTNODEPTR *sPtr, int value) {
  LISTNODEPTR s, r;
		/* la lista non contiene elementi */
  if(*sPtr==NULL) {
    *sPtr=malloc(sizeof(LISTNODE));
    (*sPtr)->dato=value;
    (*sPtr)->nextPtr=NULL;
    return;
  }
		/* l'elemento va inserito in prima posizione */
  if((*sPtr)->dato>=value) {
    s=*sPtr;
    *sPtr=malloc(sizeof(LISTNODE));
    (*sPtr)->dato=value;
    (*sPtr)->nextPtr=s;
    return;
  }
			/* la lista ha piu' di un elemento */
  s=*sPtr;
  while(s->nextPtr!=NULL) {
    if(s->nextPtr->dato>value) {
      r=s->nextPtr;
      s->nextPtr=malloc(sizeof(LISTNODE));
      s->nextPtr->dato=value;
      s->nextPtr->nextPtr=r;
      return;
    }
    s=s->nextPtr;
  }
			/* se arrivo qui, l'elemento va inserito in fondo */
  s->nextPtr=malloc(sizeof(LISTNODE));
  s->nextPtr->dato=value;
  s->nextPtr->nextPtr=NULL;
}
/*-----------------Funzione per stampare la lista
ordinata---------------------*/
int StampaLista(LISTNODEPTR currentPtr) {
  while (currentPtr != NULL){
  if(currentPtr -> dato != EOF){
  printf("%d\n", currentPtr -> dato);
  currentPtr = currentPtr -> nextPtr;
 
  }
  }
return 0;
}

Stai alla sapienza?Anche tu sei alle prese con questo
esercizio.........stavolta ne hanno dato uno proprio difficile...

   }
"currentPtr = currentPtr -> nextPtr;" va messo fuori dal blocco if
int StampaLista(LISTNODEPTR currentPtr) {
    while (currentPtr != NULL){
        if(currentPtr -> dato != EOF){
	    printf("%d\n", currentPtr -> dato);
        }
        currentPtr = currentPtr -> nextPtr;
...
...
Ciao!