Downloader
21-12-2004, 20.13.58
Sto scrivendo un programmino che sia in grado di, una volta inseriti un numero n di utenti fare ordinamento o ricerca.
Pero non so il perchè ma durante la fase di ordinamento del nome (visto che è l'unica funzione che ho implementato per ora) l'ultio utente che viene stampato ha tutte le stringhe sballate e i numeri azzerati.
Cosa ho sbagliato?
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct studente
{
char nome[20];
char cognome[20];
int anni;
char sesso;
float media_voti;
};
studente classe[10];
studente appo;
void svuota()
{
char leggi_car;
do{
leggi_car=cin.get();
} while (leggi_car!='\n');
}
void stampa(studente classe[10],int &num)
{
for (int i=0;i<num;i++)
{
cout<<"Nome: "<<classe[i].nome<<endl;
cout<<"Cognome: "<<classe[i].cognome<<endl;
cout<<"Anni: "<<classe[i].anni<<endl;
cout<<"Media voti: "<<classe[i].media_voti<<endl;
cout<<"Sesso: "<<classe[i].sesso<<endl;
cout<<endl;
}
}
// Ordinamento per NOME
void ordina_nome(studente classe[10],int &num)
{
int i;
for(i=0;i<num;i++)
{
int a = stricmp (classe[i].nome, classe[i+1].nome);
if (a>0)
{
appo=classe[i];
classe[i]=classe[i+1];
classe[i+1]=appo;
}
}
}
void popola (studente classe[10],int &num)
{
cout<<"Numero di utenti da inserire: ";
cin>>num;
for (int i=0;i<num;i++)
{
cout<<"Completare la "<<i+1<<"a tabella!!"<<endl;
cout<<"Inserisci il nome:"<<endl;
gets(classe[i].nome);
//cin.get (classe[i].nome,15,'\n');
//svuota();
cout<<"Inserisci il cognome: "<<endl;
gets(classe[i].cognome);
//cin.get (classe[i].cognome,15,'\n');
//svuota();
cout<<"Inserire gli anni: ";
cin>>classe[i].anni;
cout<<"Inserisci la media voti: ";
cin>>classe[i].media_voti;
cout<<"Inserire il sesso: ";
cin>>classe[i].sesso;
clrscr();
//svuota;
}
}
void main()
{
clrscr();
int scelta;
int num;
cout<<"MENU: "<<endl;
cout<<"1) Esegui ORDINAMENTO "<<endl;
cout<<"2) Esegui RICERCA "<<endl;
cout<<endl;
cout<<"Scelta operazione: ";
cin>>scelta;
switch(scelta)
{
case 1:{
popola (classe,num);
ordina_nome(classe,num);
stampa(classe,num);
break;
}
default: cout<<"Errore"<<endl;
}
getch();
}
Pero non so il perchè ma durante la fase di ordinamento del nome (visto che è l'unica funzione che ho implementato per ora) l'ultio utente che viene stampato ha tutte le stringhe sballate e i numeri azzerati.
Cosa ho sbagliato?
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct studente
{
char nome[20];
char cognome[20];
int anni;
char sesso;
float media_voti;
};
studente classe[10];
studente appo;
void svuota()
{
char leggi_car;
do{
leggi_car=cin.get();
} while (leggi_car!='\n');
}
void stampa(studente classe[10],int &num)
{
for (int i=0;i<num;i++)
{
cout<<"Nome: "<<classe[i].nome<<endl;
cout<<"Cognome: "<<classe[i].cognome<<endl;
cout<<"Anni: "<<classe[i].anni<<endl;
cout<<"Media voti: "<<classe[i].media_voti<<endl;
cout<<"Sesso: "<<classe[i].sesso<<endl;
cout<<endl;
}
}
// Ordinamento per NOME
void ordina_nome(studente classe[10],int &num)
{
int i;
for(i=0;i<num;i++)
{
int a = stricmp (classe[i].nome, classe[i+1].nome);
if (a>0)
{
appo=classe[i];
classe[i]=classe[i+1];
classe[i+1]=appo;
}
}
}
void popola (studente classe[10],int &num)
{
cout<<"Numero di utenti da inserire: ";
cin>>num;
for (int i=0;i<num;i++)
{
cout<<"Completare la "<<i+1<<"a tabella!!"<<endl;
cout<<"Inserisci il nome:"<<endl;
gets(classe[i].nome);
//cin.get (classe[i].nome,15,'\n');
//svuota();
cout<<"Inserisci il cognome: "<<endl;
gets(classe[i].cognome);
//cin.get (classe[i].cognome,15,'\n');
//svuota();
cout<<"Inserire gli anni: ";
cin>>classe[i].anni;
cout<<"Inserisci la media voti: ";
cin>>classe[i].media_voti;
cout<<"Inserire il sesso: ";
cin>>classe[i].sesso;
clrscr();
//svuota;
}
}
void main()
{
clrscr();
int scelta;
int num;
cout<<"MENU: "<<endl;
cout<<"1) Esegui ORDINAMENTO "<<endl;
cout<<"2) Esegui RICERCA "<<endl;
cout<<endl;
cout<<"Scelta operazione: ";
cin>>scelta;
switch(scelta)
{
case 1:{
popola (classe,num);
ordina_nome(classe,num);
stampa(classe,num);
break;
}
default: cout<<"Errore"<<endl;
}
getch();
}