Witam,
przy próbie napisania programu do zadania http://s20.postimg.org/ymmi8m88d/scr_32.png (rozszerzone do trzech ocen) występuje błąd przy drukowaniu, a mianowicie drukuje dobrze do momentu pierwszego napotkania studenta, który nie zdał, potem już po kolei wstawia wszystkich do tej drugiej grupy, przestaje doliczać do x. Błąd jest pewnie jakiś banalny, ale z uwagi na to, że jestem początkującym w programowaniu jakoś nie mogę go dostrzec. Proszę o pomoc.
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct student
{
int nr;
int ocena1;
int ocena2;
int ocena3;
};
int n,i;
printf("Podaj ilosc studentow: ");
scanf("%d",&n);
struct student a[n];
for(i=0;i<n;i++)
{
printf("Wprowadz numer indeksu studenta: ");
scanf("%d",&a[i].nr);
printf("Wprowadz pierwsza ocene: ");
scanf("%d",&a[i].ocena1);
printf("Wprowadz druga ocene: ");
scanf("%d",&a[i].ocena2);
printf("Wprowadz trzecia ocene: ");
scanf("%d",&a[i].ocena3);
}
int p=n, l=0,x=0;
struct student t;
while (p>l)
{
while (a[l].ocena1 >2 && a[l].ocena2 >2 && a[l].ocena3 >2 && l<p)
{
l=l+1;
x=x+1;
}
while ((a[l].ocena1 < 3 || a[l].ocena2 < 3 || a[l].ocena3 < 3) && l<p)
{
p=p-1;
}
if (p>l)
{
t=a[l];
a[l]=a[p];
a[p]=t;
l=l+1;
p=p-1;
}
}
//printf("x=%d",x);
printf("\nZdali egzamin:\n\n");
for(i=0;i<x;i++)
{
printf("Nr indeksu_%d\n",a[i].nr);
}
printf("\nNie zdali egzaminu:\n\n");
for(i=x;i<n;i++)
{
printf("Nr indeksu_%d\n",a[i].nr);
}
return 0;
}