Programma di informatica
Ho bisogno di aiuto con un problema di informatica. Ho già provato a cercare e consultare altre persone che hanno avuto lo stesso problema ma purtroppo sono tutti scritti con codici che io non ho ancora studiato. Devo creare un programma in C dove devo ordinare delle stringhe in ordine alfabetico. Questo è quello che sono riuscita a fare ma esce dal programma prima di farmi inserire il primo nome e non so come risolvere. (ho usato il bubble sort come ordinamento).
questo è il programma:
#include
#include
#include
#include
#include
const int MAX = 10;
const int M = 100;
int main(){
char nome[MAX + 1], ordine[M], ch;
int n, i, j, k = 0, temp;
setlocale (LC_CTYPE, "italian");
puts ("Questo programma dati n nomi, li ordina alfabrticamente. \n");
puts ("Quanti nomi vuoi inserire?");
scanf ("%d", &n);
if (n > M){
printf("Il numero inserito è troppo grande. \n");
exit(EXIT_FAILURE);
system("pause");
}
for (i = 0; i < n; i++){
printf ("\nInserisci il %d° nome: ", i + 1);
ch = getch();
if (ch != '\r'){
nome[MAX + 1] = ch;
for (i = 0; i < n - 1; i++){
for (j = 0; j < n - 1 - i; j++){
if (strcmp(nome[j + 1], nome[j])<0){
ordine[k] = nome[j];
nome[j] = nome[j + 1];
nome[j + 1] = ordine[k];
}
}
}
k++;
}
}
puts("\n");
system ("pause");
return 0;
}
questo è il programma:
#include
#include
#include
#include
#include
const int MAX = 10;
const int M = 100;
int main(){
char nome[MAX + 1], ordine[M], ch;
int n, i, j, k = 0, temp;
setlocale (LC_CTYPE, "italian");
puts ("Questo programma dati n nomi, li ordina alfabrticamente. \n");
puts ("Quanti nomi vuoi inserire?");
scanf ("%d", &n);
if (n > M){
printf("Il numero inserito è troppo grande. \n");
exit(EXIT_FAILURE);
system("pause");
}
for (i = 0; i < n; i++){
printf ("\nInserisci il %d° nome: ", i + 1);
ch = getch();
if (ch != '\r'){
nome[MAX + 1] = ch;
for (i = 0; i < n - 1; i++){
for (j = 0; j < n - 1 - i; j++){
if (strcmp(nome[j + 1], nome[j])<0){
ordine[k] = nome[j];
nome[j] = nome[j + 1];
nome[j + 1] = ordine[k];
}
}
}
k++;
}
}
puts("\n");
system ("pause");
return 0;
}
Risposte
Fai spostare il messaggio nella sezione "Informatica" da un moderatore
scusami se te lo chiedo, ma è la mia prima volta qui, come si fa?
Come ho scritto, devi chiederlo ad un moderatore, tu non puoi farlo.
Prima di tutto ti pregherei di racchiudere il codice tra i tag
[ code ] e [/ code] (togliendo ovviamente gli spazi) in modo tale da rendercelo più leggibile.[nota]Per non parlare dell'indentazione.[/nota]
Detto ciò, il tuo programma non ti lascia inserire la stringa del nome perchè al momento dell'invocazione della getch() hai un "a capo" di troppo nell'input buffer.
Perchè usi quella funzione? Sai cosa fa?
[ code ] e [/ code] (togliendo ovviamente gli spazi) in modo tale da rendercelo più leggibile.[nota]Per non parlare dell'indentazione.[/nota]
Detto ciò, il tuo programma non ti lascia inserire la stringa del nome perchè al momento dell'invocazione della getch() hai un "a capo" di troppo nell'input buffer.
Perchè usi quella funzione? Sai cosa fa?
la funzione getch la uso perché è la funzione che mi hanno insegnato ad usare con una stringa, ho provato a cambiare anche usando la gets però mi da lo stesso problema
"fantasofia":
la funzione getch la uso perché è la funzione che mi hanno insegnato ad usare con una stringa
Basta leggere il nome della funzione: getch (= "get character") serve per acquisire un carattere, non una stringa.
Ti avranno insegnato ad acquisire una stringa tramite getch, ma di sicuro non è ciò che fai tu.
"fantasofia":
ho provato a cambiare anche usando la gets però mi da lo stesso problema
Per via della scanf precedente. Come ho già detto, devi prima ripulire l'input buffer.
ho risolto usando una scanf ("%s", nomi) nel for e il programma funziona, ma grazie mille dell'aiuto!