Witam, w mam pewien problem z moim ostatnim programie ktorego pochodzenie jest dla mnie zagadka;] Mianowicie w jednej z funkcji ("wpisz") kompilator jakby nie widzial pierwszego gets() niezaleznie od tego w ktorym miejscu bym go umiescil. Kiedy pierwszy gets() w tej funkcji znajdowal sie w petli for to przy pierwszym przebiegu funkcji tak jakby go nie bylo, a potem juz program dzialal normalnie. Kod kompilowalem na dwoch roznych kompilatorach pod roznymi systemami, problem zapewne wynika z mojej nieznajomosci skladni.
/*Autor Tomasz Siczek 2010*/
#include <stdio.h>
#include <time.h>
#define MAXX 5
#define MAXY 5
#define INTERWAL 0.1
void czekaj(void);
void wpisz (int [MAXX][MAXY]);
void wyswietl (int [MAXX][MAXY]);
int sprawdz (int [MAXX][MAXY]);
void przejdz (int [MAXX][MAXY]);
int main(void)
{
int kroki;
int pola[MAXX][MAXY];
printf("Program sluzy do symulacji rozwoju kolonii komorek.\nProsze wpisac liczbe krokow ewolucji (liczbe naturalna\nz przedzialu <1,200>) : ");
scanf ("%d", &kroki);
while (kroki<1 || kroki>200)
{
printf("\nWprowadzona liczby jest spoza przedzialu.\nWpisz liczbe naturalna z przedzialu <1,200> : ");
scanf("%d", &kroki);
}
printf("Podaj stan poczatkowy kolonii. Zyje ona na planszy %dx%d.\n",MAXX,MAXY);
printf("Zaraz zostanie poproszony o wpisanie %d %d-elementowych\nciagow znakow zlozonych z 0 i 1\n",MAXX,MAXY);
printf("Kazdy ciag odpowiada polom na w jednym wersie.\nN-ty element oznacze n-te pole danego wersu\n");
printf("Znak '1' oznacza zyjace pole, '0' martwe\n");
printf("Podaj %d %d-elementowych ciagow.Mozesz wpisac dluzszy ciag niz %d-znakowy ale i tak\n",MAXX,MAXY,MAXY);
printf("bedzie brane pod uwage pierwsze %d znakow. Kazdy ciag potwierdz klikajac 'ENTER'\n",MAXY);
wpisz(pola);
int i=0;
for(i;i<kroki;i++)
{
wyswietl(pola);
przejdz(pola);
czekaj();
}
printf("/nCzy zostaly zywe komorki? : ");
if (sprawdz(pola)) printf("YES");
else
printf("NO");
}
void czekaj(void)
{
time_t czas;
czas = time(0);
while(1)
{
if (czas<(time(0)-INTERWAL))
break;
}
}
void wpisz (int ekran[MAXX][MAXY])
{
int i=0;
int j=0;
int k;
char linia[100];
gets (linia);
for(i;i<MAXX;i++)
{
gets(linia);
for(j;j<MAXY;j++)
{
if (linia[j]=='1')
ekran[i][j]=1;
else if(linia[j]=='0')
ekran[i][j]=0;
else
{
k=1;
while(k)
{
printf("\nWprowadziles\\as nieprawidlowy ciag, wprowadz od nowa\n");
gets(linia);
if (linia[j]=='1')
{
ekran[i][j]=1;
k=0;
}
else if(linia[j]=='0')
{
ekran[i][j]=0;
k=0;
}
}
}
}
j=0;
}
}
void wyswietl (int ekran[MAXX][MAXY])
{
int i=0,j=0;
printf("\n\n\n");
for (i;i<MAXX;i++)
{
for (j;j<MAXY;j++)
printf("%d",ekran[i][j]);
j=0;
printf("\n");
}
}
int sprawdz (int ekran[MAXX][MAXY])
{
int i=0, j=0, suma=0;
for(i;i<MAXX;i++)
{
for(j;j<MAXY;j++)
{
suma=suma+ekran[i][j];
}
j=0;
}
return (suma);
}
void przejdz (int pre[MAXX][MAXY])
{
int i=1, j=1, suma;
int post[MAXX][MAXY];
/*najpierw dla wewnetrznych*/
for (i;i<MAXX-1;i++)
{
for(j;j<MAXY-1;j++)
{
suma= pre[i-1][j-1] + pre[i-1][j] + pre[i-1][j+1] + pre[i][j-1] + pre[i][j+1] + pre[i+1][j-1] + pre[i+1][j] + pre[i+1][j+1];
if (pre[i][j]==0 && suma==3)
post[i][j]=1;
else if(pre[i][j]==0 && suma!=3)
post[i][j]=0;
else if(pre[i][j]==1 && suma>1 && suma<4)
post[i][j]=1;
else
post[i][j]=0;
}
j=1;
}
/*przejscia dla rogow*/
/*prawy gorny rog*/
suma=pre[0][1]+pre[1][1]+pre[1][0]+pre[0][MAXY-1]+pre[1][MAXY-1]+pre[MAXX-1][0]+pre[MAXX-1][1]+pre[MAXX-1][MAXY-1];
if (pre[0][0]==0 && suma==3)
post[0][0]=1;
else if(pre[0][0]==0 && suma!=3)
post[0][0]=0;
else if(pre[0][0]==1 && suma>1 && suma<4)
post[0][0]=1;
else
post[0][0]=0;
/*prawy dolny rog*/
suma=pre[MAXX-2][0]+pre[MAXX-2][1]+pre[MAXX-1][1]+pre[MAXX-1][MAXY-1]+pre[MAXX-2][MAXY-1]+pre[0][0]+pre[0][1]+pre[0][MAXY-1];
if (pre[MAXX-1][0]==0 && suma==3)
post[MAXX-1][0]=1;
else if(pre[MAXX-1][0]==0 && suma!=3)
post[MAXX-1][0]=0;
else if(pre[MAXX-1][0]==1 && suma>1 && suma<4)
post[MAXX-1][0]=1;
else
post[MAXX-1][0]=0;
/*lewy gorny rog*/
suma=pre[0][MAXY-2]+pre[1][MAXY-2]+pre[1][MAXY-1]+pre[0][0]+pre[1][0]+pre[MAXX-1][0]+pre[MAXX-1][MAXY-2]+pre[MAXX-1][MAXY-1];
if (pre[0][MAXY-1]==0 && suma==3)
post[0][MAXY-1]=1;
else if(pre[0][MAXY-1]==0 && suma!=3)
post[0][MAXY-1]=0;
else if(pre[0][MAXY-1]==1 && suma>1 && suma<4)
post[0][MAXY-1]=1;
else
post[0][MAXY-1]=0;
/*lewy dolny rog*/
suma=pre[MAXX-1][MAXY-2]+pre[MAXX-2][MAXY-2]+pre[MAXX-2][MAXY-1]+pre[0][MAXY-1]+pre[0][MAXY-2]+pre[MAXX-1][0]+pre[MAXX-2][0]+pre[0][0];
if (pre[MAXX-1][MAXY-1]==0 && suma==3)
post[MAXX-1][MAXY-1]=1;
else if(pre[MAXX-1][MAXY-1]==0 && suma!=3)
post[MAXX-1][MAXY-1]=0;
else if(pre[MAXX-1][MAXY-1]==1 && suma>1 && suma<4)
post[MAXX-1][MAXY-1]=1;
else
post[MAXX-1][MAXY-1]=0;
/*przejscia dla scian zewnetrznych*/
/*lewa sciana*/
i=1;
for (i;i<MAXX-1;i++)
{
suma=pre[i-1][0]+pre[i-1][1]+pre[i][1]+pre[i+1][1]+pre[i+1][0]+pre[i-1][MAXY-1]+pre[i][MAXY-1]+pre[i+1][MAXY-1];
if (pre[i][0]==0 && suma==3)
post[i][0]=1;
else if(pre[i][0]==0 && suma!=3)
post[i][0]=0;
else if(pre[i][0]==1 && suma>1 && suma<4)
post[i][0]=1;
else
post[i][0]=0;
}
/*gorna sciana*/
i=1;
for (i;i<MAXY-1;i++)
{
suma=pre[0][i-1]+pre[1][i-1]+pre[1][i]+pre[1][i+1]+pre[0][i+1]+pre[MAXX-1][i-1]+pre[MAXX-1][i]+pre[MAXX-1][i+1];
if (pre[0][i]==0 && suma==3)
post[0][i]=1;
else if(pre[0][i]==0 && suma!=3)
post[0][i]=0;
else if(pre[0][i]==1 && suma>1 && suma<4)
post[0][i]=1;
else
post[0][i]=0;
}
/*dolna sciana*/
i=1;
for (i;i<MAXY-1;i++)
{
suma=pre[MAXX-1][i-1]+pre[MAXX-2][i-1]+pre[MAXX-2][i]+pre[MAXX-2][i+1]+pre[MAXX-1][i+1]+pre[0][i-1]+pre[0][i]+pre[0][i+1];
if (pre[MAXX-1][i]==0 && suma==3)
post[MAXX-1][i]=1;
else if(pre[MAXX-1][i]==0 && suma!=3)
post[MAXX-1][i]=0;
else if(pre[MAXX-1][i]==1 && suma>1 && suma<4)
post[MAXX-1][i]=1;
else
post[MAXX-1][i]=0;
}
/*prawa sciana*/
i=1;
for (i;i<MAXX-1;i++)
{
suma=pre[i-1][MAXY-1]+pre[i-1][MAXY-2]+pre[i][MAXY-2]+pre[i+1][MAXY-2]+pre[i+1][MAXY-1]+pre[i-1][0]+pre[i][0]+pre[i+1][0];
if (pre[i][MAXY-1]==0 && suma==3)
post[i][MAXY-1]=1;
else if(pre[i][MAXY-1]==0 && suma!=3)
post[i][MAXY-1]=0;
else if(pre[i][MAXY-1]==1 && suma>1 && suma<4)
post[i][MAXY-1]=1;
else
post[i][MAXY-1]=0;
}
/*przepisanie tablicy post do pre*/
i=0;
j=0;
for(i;i<MAXX;i++)
{
for(j;j<MAXY;j++)
{
pre[i][j]=post[i][j];
}
j=0;
}
}