Probl. ALGORITMO "C" 
Devo presentare un programma per domani!  
E' perfetto ma non riesco a trovare l'errore! 
Che faccio!???    
Unisce 2 array di struct (studente) e deve avere la possibilità di scegliere da tastiera quale compo si vuole unire in un terzo array (risultato). 
<pre id=code><font face=courier size= id=code>
#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
struct studente { 
char nome[]; 
char cognome[]; 
int matricola; 
} ; 
struct risultato { 
char stringa []; 
int matricola; 
}; 
void riempi(studente str[],int n); 
void unione_cognome(studente str1[],studente str2[],risultato unione[],int n1,int n2); 
void unione_nome(studente str1[],studente str2[],risultato unione[],int n1,int n2); 
void unione_int(studente str1[],studente str2[],studente unione[],int n1,int n2); 
int scelta(studente str1[],studente str2[],risultato unione[],int n1,int n2); 
void risulta(risultato unione[],int n1,int n2,int scelto); 
void main() 
{ 
int num1,num2,scelto; 
char vai; 
studente str1[25],str2[30]; 
risultato unione[55]; 
printf("\nInserisci il numero di studenti del primo vettore:\n"); 
scanf("%d",&num1); 
riempi(str1,num1); 
printf("\nIl primo vettore è pieno"); 
printf("\nInserisci il numero di studenti del secondo vettore:\n"); 
scanf("%d",&num2); 
riempi(str2,num2); 
printf("\nIl secondo vettore è pieno"); 
scelto=scelta(str1,str2,unione,num1,num2
); 
printf("\nIl risultato è raggiunto premi un tasto per visualizzarlo"); 
vai=getch(); 
risulta(unione,num1,num2,scelto); 
} 
void riempi(studente vet[30],int n) 
{ 
int i; 
for(i=0;i<n;i++) 
{ 
printf("\nInserisci il Cognome del %d° allievo: ",i+1); 
scanf("%s",&vet[i].cognome); 
printf("\nInserisci il Nome del %d° allievo: ",i+1); 
scanf("%s",&vet[i].nome); 
printf("\nInseriscine ora la matricola: "); 
scanf("%d",&vet[i].matricola); 
clrscr(); 
} 
} 
void unione_cognome(studente str1[25],studente str2[30],risultato unione[55],int n1,int n2) 
{ 
int i,j; 
for(i=0;i<n1;i++) 
strcpy(unione[i].stringa,str1[i].cognome); 
j=i; 
for(i=0;i<n2;i++) 
{ 
strcat(unione[j].stringa,str2[i].cognome); 
j++; 
} 
} 
void unione_nome(studente str1[25],studente str2[30],risultato unione[55],int n1,int n2) 
{ 
int i,j; 
for(i=0;i<n1;i++) 
strcpy(unione[i].stringa,str1[i].nome); 
j=i; 
for(i=0;i<n2;i++) 
{ 
strcat(unione[j].stringa,str2[i].nome); 
j++; 
} 
} 
void unione_int(studente str1[25],studente str2[30],risultato unione[55],int n1,int n2) 
{ 
int i,j; 
for(i=0;i<n1;i++) 
unione[i].matricola=str1[i].matricola; 
j=i; 
for(i=0;i<n2;i++){ 
unione[j].matricola=str2[i].matricola; 
j++; } 
} 
int scelta(studente str1[25],studente str2[30],risultato unione[55],int num1,int num2) 
{ 
int scelto,i=0; 
printf("\n\t\tScegli quale di quale campo vuoi l'unione :\n\n\n"); 
printf("\n\t 1 : Il campo matricola "); 
printf("\n\t 2 : Il campo cognome "); 
printf("\n\t 3 : Il campo nome\n\t"); 
scanf("%d",&scelto); 
do 
{ 
if(i) 
{ 
printf("\n Non puoi inserire un numero non compreso tra l'intervallo 1 - 3"); 
scanf("%d",&scelto); } 
switch(scelto){ 
case 1: 
unione_int(str1,str2,unione,num1,num
2); 
break; 
case 2: 
unione_cognome(str1,str2,unione,num1
,num2); 
break; 
case 3: 
unione_nome(str1,str2,unione,num1,nu
m2); 
break; 
default: 
i=1; 
} } 
while(i); 
return scelto; 
} 
void risulta(risultato unione[55],int n1,int n2,int scelto) 
{ 
int i; 
clrscr(); 
if(scelto==2||3) 
for(i=0;i<(n1+n2);i++) 
printf("\n\t%s",unione[i].stringa); 
else 
for(i=0;i<(n1+n2);i++) 
printf("\n\t%d",unione[i].matricola); 
}
</font id=code></pre id=code>
peppe