Salve ho fatto questo programma, compila e tutto, però quando lo eseguo mostra degli errori, in quando per la funzione che dovrebbe convertire maiuscolo in minuscolo e viceversa, il programma spara subito i printf e non fa scrivere negli spazi opportuni; per quanto riguarda la rubrica, nel primo ciclo non fa riempire il cognome, ma negli altri cicli si.
qualcuno riesce a scoprire l'errore, ecco il codice
#include <stdio.h>
#include <string.h>
#define N 10
#define C 20
#define NMAX 30
struct persona {
char cognome [C],nome [C],telefono[C];};
struct persona archivio [N];
void cmax (int []);
void MaiMin(char []);
void LeggiStringa(char[],unsigned short);
void riempi(struct persona[],unsigned long);
void stampa(struct persona [],unsigned long);
main(){
unsigned short scelta;
char x [30];
int vett[NMAX];
do{
printf("\n1-calcola massimo e ricorrenze");
printf("\n2-maiuscolo e minuscolo");
printf("\n3-riempi rubrica");
printf("\n4-stampa rubrica");
printf("\n5-fine");
printf("\ninserisci scelta: ");
scanf("%u",&scelta);
switch(scelta){
case 1: cmax(vett);
break;
case 2: MaiMin(x);
break;
case 3: riempi(archivio,N);
break;
case 4: stampa(archivio,N);
break;
}
}while(scelta<5);
}
void cmax(int vett[]){
int n;
int i;
int max,cnt;
printf("inserisci numero elementi desiderati: ");
scanf("%d",&n);
for(i=0;i<=n-1;i++){
printf("elemento in posizione %d: ",i);
scanf("%d",&vett[i]);
}
max=vett[0];
for(i=1;i<n;i++)
if(vett[i]>max)
max=vett[i];
printf("il valore massimo e': %d",max);
cnt=0;
for(i=0;i<n;i++)
if(max==vett[i])
cnt=cnt+1;
printf("il valore %d ricorre %d volte",max,cnt);
}
void MaiMin(char x[]){
int t;
printf("inserisci stringa: ");
gets(x);
for(t=0;t<strlen(x);t++)
if(x[t]>='A'&& x[t]<='Z')
x[t]=x[t]+32;
printf(" la parola minuscola e':%s",x);
for(t=0;t<strlen(x);t++)
if(x[t]>='a'&& x[t]<='z')
x[t]=x[t]-32;
printf("\n la parola maiuscola e':%s",x);
}
void LeggiStringa(char s[],unsigned short dim){
unsigned long i;
for(i=0;(s[i]=getchar())!='\n'&& i<dim-1;i++)
s[i]='\0';
}
void riempi (struct persona v[],unsigned long dim){
unsigned long i;
for(i=0;i<dim;i++){
printf("elemento in posizione %d",i);
printf("\nCognome: ");
LeggiStringa(v[i].cognome,C);
printf("\nnome: ");
LeggiStringa(v[i].nome,C);
printf("\ntelefono: ");
LeggiStringa(v[i].telefono,C);
}
}
void stampa(struct persona v[],unsigned long dim){
unsigned long i;
for(i=0;i<dim;i++){
printf("elemento in posizione %d",i);
printf("cognome:%s",v[i].cognome);
printf("\nnome:%s ",v[i].nome);
printf("\ntelefono:%s",v[i].telefono);
}
}