Salve ho avuto un problema nel scrivere un programma che mi legga da file una serie di numeri, uno per ogni riga e me lo salvi sulla lista dopodichè stampa la lista disordinata e successivamente stampare la list ordinata
compilo eseguo e rimane bloccato
compilo eseguo e rimane bloccato
Codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
struct listinfo
{
int elem;
struct listinfo *prox;
};
typedef struct listinfo lista;
//Prototipi di funzione//
lista* inizializza(lista *pointer);
lista* inseriscitesta(lista *pointer,int elemento);
lista* inseriscicoda(lista *pointer,int elemento);
lista* carica(lista *pointer);
lista* ordina(lista *pointer);
void stampa(lista *pointer);
int main()
{
int i;
lista *lista1;
//inizializza la lista vuota//
lista1 = inizializza(lista1);
lista1 = carica(lista1);
printf("la lista risultante e'");
stampa(lista1);
printf("la lista ordinata risultante e'");
lista1=ordina(lista1);
stampa(lista1);
return 0;
}
void stampa(lista *pointer)
{
lista *punt;
punt=pointer;
while(punt!=NULL)
{
printf("%d ",punt->elem);
punt=punt->prox;}}
lista* inizializza(lista*pointer)
{
pointer = NULL;
return NULL;
}
// inserimento in testa
lista* inseriscitesta(lista *pointer,int elemento)
{lista *punt,*testa;
punt=(lista*)malloc(sizeof(lista));
punt->elem=elemento;
punt->prox=pointer;
pointer=punt;
return pointer;}
/*lista* inseriscicoda(lista *pointer,int elemento)
{
lista *punt,*cursore,*cursore1;
cursore=pointer;
punt=(lista*)malloc(sizeof(lista)); //dato da inserire
punt->elem=elemento;
punt->prox=NULL;
if (pointer==NULL) {pointer=punt;} //se la lista è vuota lo metto in testa
else{
while(cursore!=NULL) //scansione fino alla fine
{cursore1=cursore; //cursore1 serve per avere l'ultima posizione di cursore
cursore=cursore->prox;}
cursore1->prox=punt;}
return pointer;}
*/
lista* carica(lista* pointer)
{
int a,b;
FILE *fp;
if((fp=fopen("numeri.txt","r"))==NULL) return pointer;
pointer=NULL;
while (b=(fscanf(fp,"%d",&a))!=EOF)
{
pointer=inseriscitesta(pointer,a);
}
fclose(fp);
return pointer;
}
lista* ordina(lista *pointer)
{
if (pointer && pointer->prox) {
int k;
do {
lista *punt = pointer;
k = 0;
while (punt->prox) {
lista *punt1 = punt;
punt = punt->prox;
if ((punt1->elem) > (punt->elem)) {
int tmp = punt1->elem;
punt1->elem = punt->elem;
punt->elem = tmp;
k = 1;
}
}
} while (k != 0);
}
return pointer;
}