selam herkese
arkadaşlar şu kodlara bi bakar mısınız, nerde hata var.numara sırasına göre isimlerin sıralanması gerekiyor sorun yaşatıyor yardımcı olursanız çok sevinirim. 0 a basınca kapansın, 1 e basınca yeni kayıt yapsın 2 ye basınca görüntülesin istiyorum. ödev konum.

#include<stdio.h>
#include<string.h>

struct ogrenci
{
char ad[40];
long int no;
};

FILE *dosya1;

FILE *dosya1z;
struct ogrenci kayit;
long int no[50];
char adi[100][100];
char tempo[100];
int i=0,j=0,k=0,temp,ekle;

void islem()
{
dosya1 = fopen("students.txt","r");

if ( ( dosya1 = fopen( "students.txt", "r" ) ) == NULL )
printf( "dosya açılamıyo\n" );
else
{
while(!feof(dosya1))
{
fscanf(dosya1,"%s %d",&kayit.ad,&kayit.no);
strcpy(&(adi[i][0]),kayit.ad); //problem burda. adi[i][0] dizisine kayit.ad dan gelen isim atılıyo ama sıralanırken harfleri karıştırıyo kafasına göre.
no[i]=kayit.no;c
i++;
}
}

fclose(dosya1);

for(j=0; j<i; j++)
{
for(k=0; k<i; k++)
{
if(no[j] < no[k])
{
temp = no[j];
tempo[j] = adi[j][0];
no[j] = no[k];
adi[j][0] = adi[k][0];
no[k] = temp;
adi[k][0] =tempo[j];
}
}
}


for(j=0; j<i; j++)
{
printf("%d %s \n",no[j],&adi[j][0]);


}

}

main()
{
printf("islem seciniz (0)cikis,(1)yeni ekle,(2)goruntule");
scanf("%d",&ekle);

switch (ekle)
{
case 0:
break;

case 1:

dosya1 = fopen("students.txt","a"); // students.txt oluşturulacak
scanf("%s %d" ,&kayit.ad,&kayit.no);
fprintf(dosya1,"%s %d\n",kayit.ad,kayit.no);
scanf("%s %d" ,&kayit.ad,&kayit.no);
fprintf(dosya1,"%s %d\n",kayit.ad,kayit.no);
scanf("%s %d" ,&kayit.ad,&kayit.no);
fprintf(dosya1,"%s %d\n",kayit.ad,kayit.no);
scanf("%s %d" ,&kayit.ad,&kayit.no);
fprintf(dosya1,"%s %d\n",kayit.ad,kayit.no);
scanf("%s %d" ,&kayit.ad,&kayit.no);

fprintf(dosya1,"%s %d\n",kayit.ad,kayit.no);
fclose(dosya1);
break;

case 2:
islem();
break;
}

return 0;
}