La funzione ordina va in loop credo ... non restituisce nulla.
mentre sia inserimento che visualizza funziona
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <conio.h>
#include <math.h>
struct NODO
{
int inf;
NODO* pun;
} *primo= NULL, *ult= NULL;
void push(){
int k, vol;
printf("\n\n Quandi numri vuoi inzeriro?" ); scanf("%d", &vol);
for(int i=0; i<vol; i++){
printf("\n\n Inserisci numro: "); scanf("%d", &k);
NODO*p= new NODO;
p->inf= k;
p->pun= NULL;
if (primo==NULL) primo=p;
else ult->pun=p;
ult=p;
}
}
void visualizza() {
printf("\n\n Veti quello che hai skritto!");
NODO*p= primo;
while(p != NULL)
{
printf("%d", p->inf);
printf(" ");
p = p->pun;
}
}
void ordina(){
int i=0;
NODO*p= primo;
NODO*sc;
NODO*ps;
while(ps != NULL || p!=NULL){
p=p->pun;
ps=p->pun;
if(p->inf > ps->inf){
sc->inf=p->inf;
p->inf=ps->inf;
ps->inf=sc->inf;
}
}
}
void elimina(){
NODO*prec;
int k;
printf("\n\n Inserisci numro: "); scanf("%d", &k);
NODO*pscor= primo;
bool trov=false;
while(pscor!=NULL && !trov){
if(pscor->inf==k) trov=true;
else {
prec=pscor;
pscor= pscor->pun;
}
}
if (pscor==primo && trov) {
primo= primo->pun;
}
else{
prec->pun= pscor->pun;
free (pscor);
}
}
void menu () {
system ("CLS");
char selezione;
do{
printf("Registro \n\n 1) Inserisci \n\n 2) Visualizza \n\n 3) Elimina \n\n 4) Ordina \n\n 5) Exit");
printf(" \n\n Digita un numero da 1 a 4 per effettuare una scelta: "); scanf("%s", &selezione);
switch (selezione) {
case '1':
push();
break;
case '2':
visualizza();
system("pause");
break;
case '3':
elimina();
system("pause");
break;
case '4':
ordina();
printf("\n\n Fatto!");
break;
case '5':
system("CLS");
printf(" \n\n Programma r 3°B inf. ");
exit(0);
break;
}
system("CLS");
}while(selezione!='1' && selezione!='2' && selezione!='3' && selezione!='4' && selezione!='5' && selezione!='6' && selezione!='7');
}
int main() {
bool scegli= false;
while (scegli==false){
menu();
}
}