PDA

Visualizza la versione completa : Programma si blocca dopo scanf in C...


freethinker
02-07-2011, 15:12
Ciao a tutti, vi posto questo mio esercizio in cui viene chiesto in input degli interi e, tramite puntatori, si calcoli il massimo tra i numeri inseriti...sicuramente ci saranno degli errori logici, ma non posso nemmeno verificarlo perche subito dopo la prima scanf in cui chiedo di immettere quanti numeri controllareil programma va in loop...si blocca :dhò: ...mi potreste aiutare a capirne il motivo per cortesia? Grazie mille...ecco il codice:

#include <stdio.h>
#define SIZE 50
int max (int *n, int *n_elem);

int main ()

{ int array[SIZE] = {0};
int num_elem;
int massimo;
int i;

printf ("Inserire il numero degli elementi del vettore di cui si vuole sapere il max:\n");
scanf ("%d\n\n", &num_elem);
/* fatta questa scanf il programma si ferma!*/

printf ("Inserire adesso i numeri che si vuole controllare:\n");
for (i=0; i<num_elem; i++)
{ scanf ("%d", &array[i]);
printf ("array[%d] = %d ", i, array[i]);
}

massimo = max (array, &num_elem);

printf ("Il più grande numero tra i %d inseriti è:\n%d\n", num_elem, massimo);

return 0;

}

int max (int *n, int *n_elem)

{ int j,z;
int hold;

for (j=1; j<*n_elem; j++)
{for (z=0; z<(*n_elem - 1); z++)
{ if (n[z] > *(n + z))
{ hold = n[z];
n[z] = *(n + z);
*(n + z) = hold;}
}
}

return *(n + (*n_elem - 1));

}

freethinker
02-07-2011, 15:15
...risolto da solo...ho messo addirittura due \n dentro la scanf! Sono proprio deficiente!!! Scusate...sono proprio un idiota...grazie mille :dhò: lo stesso...

freethinker
02-07-2011, 15:32
...purtroppo però non riesco a risolvere il problema dell'ordinamento del vettore nella funzione...cavolo...in cosa sbaglio? :dhò:

YuYevon
02-07-2011, 17:49
Cosa intendi fare con quella funzione? Da come la utilizzi sembra tu voglia definire semplicemente il massimo dell'array ma l'algoritmo implementato ha l'aria di essere un bubble sort molto sui generis... tanto per cominciare n[z] e *(n+z) sono assolutamente la stessa cosa, quindi non potrebbe mai risultare il primo maggiore del secondo (vedi condizione if), inoltre perché passi per indirizzo il numero di elementi dell'array? Non hai bisogno di modificarlo.
In ogni caso, se devi fare una semplice funzione di ricerca del massimo non devi fare altro che un semplice ciclo iterativo (e uno solo) che scorra tutto l'array e che aggiorni mano mano il massimo facendo il confronto tra l'elemento i-esimo dell'array e il massimo calcolato al passo i-esimo (ovviamente è uno dei possibili approcci, di sicuro il più semplice e immediato comunque).

freethinker
02-07-2011, 20:20
...ci sono riuscito! Ti posto il programma finito...

#include <stdio.h>
#define SIZE 50
int max (int *n, int *n_elem);

int main ()

{ int array[SIZE] = {0};
int num_elem;
int massimo;
int i;

printf ("Inserire il numero degli elementi del vettore di cui si vuole sapere il max:\n");
scanf ("%d", &num_elem);

printf ("Inserire adesso i numeri che si vuole controllare:\n");
for (i=0; i<num_elem; i++)
scanf ("%d", &array[i]);

printf ("\n");

massimo = max (array, &num_elem);

printf ("\n");

printf ("Il più grande numero tra i %d inseriti è:\n%d\n", num_elem, massimo);

return 0;
}

int max (int *n, int *n_elem)

{ int j,z;
int hold;

/*Ordino il vettore dal numero più basso al numero più alto per restituire poi al main il valore dell'ultimo elemento*/
for (j=1; j<*n_elem; j++)
{for (z=0; z<((*n_elem)-1); z++)
{ if (*(n+z) > *(n + z + 1))
{ hold = *(n+z);
*(n+z) = *(n + z + 1);
*(n + z + 1) = hold;}
}
}

return *(n + (*n_elem - 1));/*Essendo l'ultimo elemento il più grande, lo restituisco al main come massimo*/
}


...dici che possa andare bene come l'ho svolto? :)

Loading