>>1
Stop mixing C89 and C99 code, run that through indent, and repost it with [code] tags, if you want anyone to be able to read it.
That still won't guarantee anyone will help you, but it would be a start.
Name:
Anonymous2010-06-07 16:59
#include <stdio.h>
#include <stdlib.h>
void border(int height, int width, int **grid)
{
int i, j;
i = 0;
for(j=0;j< height;j++)
{
*(*(grid+i)+j) = '0';
}
j = 0;
for(i=0;i< (width-1);i++)
{
*(*(grid+i)+j) = '0';
}
i = (width-1);
for(j=0;j< height;j++)
{
*(*(grid+i)+j) = '0';
}
j = (height-1);
for(i=0;i< (width-1);i++)
{
*(*(grid+i)+j) = '0';
}
}
void print(int **grid, int width, int height)
{
int i, j;
for(i=0;i< width;i++)
{
for(j=0;j< height;j++)
{
printf("%c",*(*(grid+i)+j));
} printf("\n");
}
}
void play(int width, int height, int **grid, int **grid2)
{
int i, j, live=0,dead=0;
for(i=1;i< (width-1);i++)
{
for(j=1;j< (height-1);j++)
{
printf("%c",*(*(grid+i)+j));
} printf("\n");
}
for(i=1;i< (width-1);i++)
{
for(j=1;j< (height-1);j++)
{
if ( *(*(grid+i)+(j-1)) == '0')
++dead;
if ((*(*(grid+i)+(j+1))) == '0')
++dead;
if ((*(*(grid+(i-1))+(j-1))) == '0')
++dead;
if ((*(*(grid+(i-1))+j)) == '0')
++dead;
if ((*(*(grid+(i-1))+(j+1))) == '0')
++dead;
if ((*(*(grid+(i+1))+(j-1))) == '0')
++dead;
if ((*(*(grid+(i+1))+j)) == '0')
++dead;
if ((*(*(grid+(i+1))+(j+1))) == '0')
++dead;
if ( *(*(grid+i)+(j-1)) == '*')
++live;
if ((*(*(grid+i)+(j+1))) == '*')
++live;
if ((*(*(grid+(i-1))+(j-1))) == '*')
++live;
if ((*(*(grid+(i-1))+j)) == '*')
++live;
if ((*(*(grid+(i-1))+(j+1))) == '*')
++live;
if ((*(*(grid+(i+1))+(j-1))) == '*')
++live;
if ((*(*(grid+(i+1))+j)) == '*')
++live;
if ((*(*(grid+(i+1))+(j+1))) == '*')
++live;
if (*(*(grid+i)+j) == '0' && live == 3)
*(*(grid2+i)+j) = '*';
else *(*(grid2+i)+j) = '0';
if (*(*(grid+i)+j) == '*' && live < 2 )
*(*(grid2+i)+j) = '0';
if (*(*(grid+i)+j) == '*' && live > 3 )
*(*(grid2+i)+j) = '0';
if (*(*(grid+i)+j) == '*' && (live == 3 || live == 2) )
*(*(grid2+i)+j) = '*';
live = 0; dead = 0;
}
}
system("pause");
system("cls");
}
void main(void) {
FILE *filas;
int width = 0,a;
int height = 0;
int **grid, **grid2, i=1, j=1;
int line[100]={};
char newl, c;
if((filas=fopen("grid.txt","r"))==NULL)
{
printf("err\n"); exit(1);
}
void border(int height, int width, int **grid) {
int i, j;
i = 0;
for (j = 0; j < height; j++) {
*(*(grid + i) + j) = '0';
}
j = 0;
for (i = 0; i < (width - 1); i++) {
*(*(grid + i) + j) = '0';
}
i = (width - 1);
for (j = 0; j < height; j++) {
*(*(grid + i) + j) = '0';
}
j = (height - 1);
for (i = 0; i < (width - 1); i++) {
*(*(grid + i) + j) = '0';
}
}
void print(int **grid, int width, int height) {
int i, j;
for (i = 0; i < width; i++) {
for (j = 0; j < height; j++) {
printf("%c", *(*(grid + i) + j));
}
printf("\n");
}
}
void play(int width, int height, int **grid, int **grid2) {
int i, j, live = 0, dead = 0;
for (i = 1; i < (width - 1); i++) {
for (j = 1; j < (height - 1); j++) {
printf("%c", *(*(grid + i) + j));
}
printf("\n");
}
for (i = 1; i < (width - 1); i++) {
for (j = 1; j < (height - 1); j++) {
if (*(*(grid + i) + (j - 1)) == '0')
++dead;
if ((*(*(grid + i) + (j + 1))) == '0')
++dead;
if ((*(*(grid + (i - 1)) + (j - 1))) == '0')
++dead;
if ((*(*(grid + (i - 1)) + j)) == '0')
++dead;
if ((*(*(grid + (i - 1)) + (j + 1))) == '0')
++dead;
if ((*(*(grid + (i + 1)) + (j - 1))) == '0')
++dead;
if ((*(*(grid + (i + 1)) + j)) == '0')
++dead;
if ((*(*(grid + (i + 1)) + (j + 1))) == '0')
++dead;
if (*(*(grid + i) + (j - 1)) == '*')
++live;
if ((*(*(grid + i) + (j + 1))) == '*')
++live;
if ((*(*(grid + (i - 1)) + (j - 1))) == '*')
++live;
if ((*(*(grid + (i - 1)) + j)) == '*')
++live;
if ((*(*(grid + (i - 1)) + (j + 1))) == '*')
++live;
if ((*(*(grid + (i + 1)) + (j - 1))) == '*')
++live;
if ((*(*(grid + (i + 1)) + j)) == '*')
++live;
if ((*(*(grid + (i + 1)) + (j + 1))) == '*')
++live;
if (*(*(grid + i) + j) == '0' && live == 3)
*(*(grid2 + i) + j) = '*';
else
*(*(grid2 + i) + j) = '0';
if (*(*(grid + i) + j) == '*' && live < 2)
*(*(grid2 + i) + j) = '0';
if (*(*(grid + i) + j) == '*' && live > 3)
*(*(grid2 + i) + j) = '0';
if (*(*(grid + i) + j) == '*' && (live == 3 || live == 2))
*(*(grid2 + i) + j) = '*';
live = 0;
dead = 0;
}
}
system("pause");
system("cls");
}
void main(void) {
FILE *filas;
int width = 0, a;
int height = 0;
int **grid, **grid2, i = 1, j = 1;
int line[100] = { };
char newl, c;
if ((filas = fopen("grid.txt", "r")) == NULL) {
printf("err\n");
exit(1);
}
fgets(line, 100, filas);
width = strlen(line) + 1;
rewind(filas);
do {
newl = getc(filas);
if (newl == '\n')
height++;
} while (newl != EOF);
rewind(filas);
height = height + 3;
a = height;
height = width;
width = a;
if ((grid = (int**) malloc((sizeof(int*)) * (width))) == NULL)
exit(EXIT_FAILURE);
for (i = 0; i < height; i++)
if ((*(grid + i) = (int*) malloc(sizeof(int) * (height))) == NULL)
exit(EXIT_FAILURE);
if ((grid2 = (int**) malloc((sizeof(int*)) * (width))) == NULL)
exit(EXIT_FAILURE);
for (i = 0; i < height; i++)
if ((*(grid2 + i) = (int*) malloc(sizeof(int) * (height))) == NULL)
exit(EXIT_FAILURE);
i = 1;
j = 1;
do {
c = getc(filas);
if (c != 10 && c != EOF) {
*(*(grid + i) + j) = c;
printf("i-%d : j-%d %c\n", i, j, *(*(grid + i) + j));
if (i < (width - 1))
if (j < (height - 2))
j++;
else {
j = 1;
i++;
}
}
} while (c != EOF);
printf("\n\n\n\n\n\n");
//border
border(height, width, grid);
border(height, width, grid2);
print(grid, width, height);
printf("\n\n\n");
//play
do {
play(width, height, grid, grid2);
play(width, height, grid2, grid);
} while (1);
}
Because I don't know the size of the array beforehand.
what does that have to do with anything? *(*(grid + i) + j) does exactly the same thing as grid[i, j].
Name:
Anonymous2010-06-08 2:42
>>14
why don't you change that #ifdef __linux__ around the use_ridiculous_amounts_of_memory_and_crash_randomly()in flash player to #if 0?
if (*(*(grid + i) + (j - 1)) == '0')
++dead;
if ((*(*(grid + i) + (j + 1))) == '0')
++dead;
if ((*(*(grid + (i - 1)) + (j - 1))) == '0')
++dead;
if ((*(*(grid + (i - 1)) + j)) == '0')
++dead;
if ((*(*(grid + (i - 1)) + (j + 1))) == '0')
++dead;
if ((*(*(grid + (i + 1)) + (j - 1))) == '0')
++dead;
if ((*(*(grid + (i + 1)) + j)) == '0')
++dead;
if ((*(*(grid + (i + 1)) + (j + 1))) == '0')
++dead;
is useless.
You do not even check how many dead cells there are before you set dead back to 0.
>>28
Because that's the beginning and end of these exercises, is it? Having it work is the bare minimum requirement.
Your code is abominable. I hope you never know happiness in life.