Witam, mam problem z funkcją usuwania ze struktury danych. cały kod programu wyglada tak:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char Nazwisko[30];
char Imie[15];
short czyMaZaleglosci;
float SredniaOcen;
} STUDENT;
STUDENT Studenci[30]={{"Kowalski", "Jan", 0, 3.0}, {"Nowak", "Maciej", 1, 3.5},
{"Kowalczyk", "Marek", 0, 4.0}};
char WyborOpcji()
{
char linia[80];
char opcja;
if(gets(linia)==NULL)
return '\0';
return linia[0];
}
void WypiszListeStudentow()
{
int i;
printf("\n");
puts("WYPISYWANIE LISTY STUDENTOW: ");
for(i=0;Studenci[i].Nazwisko[0]!='\0';i++)
printf("Student nr. %d: %s %s, srednia ocen: %.1f, zaleglosci(1-TAK, 0-NIE): %d\n", i+1, Studenci[i].Imie, Studenci[i].Nazwisko, Studenci[i].SredniaOcen, Studenci[i].czyMaZaleglosci);
printf("\n");
puts("Funkcja wykonala swoja prace. Wybierz kolejna 'opcje': ");
}
void DodajOpisStudenta()
{
int i;
printf("\n");
puts("DODAWANIE OPISU NOWEGO STUDENTA: ");
for(i=0;Studenci[i].Nazwisko[0]!='\0';i++);
printf("Wprowadz imie: ");
scanf("%s", &Studenci[i].Imie);
printf("Wprowadz nazwisko: ");
scanf("%s", &Studenci[i].Nazwisko);
printf("Wprowadz srednia ocen: ");
scanf("%f", &Studenci[i].SredniaOcen);
printf("Wprowadz zaleglosci: ");
scanf("%d", &Studenci[i].czyMaZaleglosci);
printf("\n");
puts("Funkcja wykonala swoja prace. Wybierz kolejna 'opcje': ");
}
void ModyfikujOpisStudenta()
{
int i, j;
printf("\n");
puts("MODYFIKOWANIE OPISU STUDENTA: ");
for(i=0;Studenci[i].Nazwisko[0]!='\0';i++)
printf("Student nr. %d: %s %s, srednia ocen: %.1f, zaleglosci(1-TAK, 0-NIE): %d\n", i+1, Studenci[i].Imie, Studenci[i].Nazwisko, Studenci[i].SredniaOcen, Studenci[i].czyMaZaleglosci);
printf("Wybierz numer studenta do modyfiacji: ");
scanf("%d", &j);
printf("%s %s, srednia ocen: %.1f, zaleglosci(1-TAK, 0-NIE): %d\n", Studenci[j-1].Imie, Studenci[j-1].Nazwisko, Studenci[j-1].SredniaOcen, Studenci[j-1].czyMaZaleglosci);
for(i=0;i<j;i++);
printf("Zmodyfikuj imie: ");
scanf("%s", &Studenci[i-1].Imie);
printf("Zmodyfikuj nazwisko: ");
scanf("%s", &Studenci[i-1].Nazwisko);
printf("Zmodyfikuj srednia ocen: ");
scanf("%f", &Studenci[i-1].SredniaOcen);
printf("Zmodyfikuj zaleglosci: ");
scanf("%d", &Studenci[i-1].czyMaZaleglosci);
printf("\n");
puts("Funkcja wykonala swoja prace. Wybierz kolejna 'opcje': ");
}
void UsunOpisStudenta()
{
int i, j, k, x;
printf("\n");
puts("USUWANIE OPISU STUDENTA: ");
for(i=0;Studenci[i].Nazwisko[0]!='\0';i++)
printf("Student nr. %d: %s %s, srednia ocen: %.1f, zaleglosci(1-TAK, 0-NIE): %d\n", i+1, Studenci[i].Imie, Studenci[i].Nazwisko, Studenci[i].SredniaOcen, Studenci[i].czyMaZaleglosci);
printf("Wybierz numer studenta do usuniecia: ");
scanf("%d", &j);
printf("%s %s, srednia ocen: %.1f, zaleglosci(1-TAK, 0-NIE): %d\n", Studenci[j-1].Imie, Studenci[j-1].Nazwisko, Studenci[j-1].SredniaOcen, Studenci[j-1].czyMaZaleglosci);
for(x=0;x<30;x++)
{
if(x==j)
{
Studenci[x-1].Nazwisko==Studenci[29].Nazwisko;
Studenci[x-1].Imie==Studenci[29].Imie;
Studenci[x-1].czyMaZaleglosci=Studenci[29].czyMaZaleglosci;
Studenci[x-1].SredniaOcen=Studenci[29].SredniaOcen;
printf("Usunieto rekord %d.\n", x);
}
}
printf("\n");
puts("Funkcja wykonala swoja prace. Wybierz kolejna 'opcje': ");
}
main()
{
char opcja='?';
printf("Program STUDENCI\n");
while(opcja!='0') {
switch(opcja) {
case '1':
WypiszListeStudentow();
break;
case '2':
DodajOpisStudenta();
break;
case '3':
ModyfikujOpisStudenta();
break;
case '4':
UsunOpisStudenta();
break;
case '?':
printf("\n");
printf(" 1. Lista studentow\n");
printf(" 2. Dodanie pozycji\n");
printf(" 3. Modyfikacja pozycji\n");
printf(" 4. Usuniecie pozycji\n");
printf(" 0. Zakonczenie pracy\n");
printf(" ?. Menu\n\n");
printf("Wprowadz 'opcje': ");
break;
default:
break;
}
opcja=WyborOpcji();
}
return 0;
}
W main() jest tylko switch i wywoływanie w nim kolejno funkcji: wypisywania listy studentów, dodawania nowego studenta, modyfikowania wpisu i usuwania wpisu. Funkcja usuwania "UsunOpisStudenta()" usuwa, czy raczej "zeruje" mi tylko zaległości i średnią ocen. Stąd moje pytanie. Jak usunąć wybrany przeze mnie rekord struktury tak, aby późniejsze wypisanie listy studentów odbyło się bez usuniętego rekordu? Pozostałe funkcje napisałem sam i działają jak należy. Z góry dziękuje za pomoc.