Si desea utilizar los archivos, y luego hacer algo como lo siguiente. Un enfoque más eficaz sería mantener todo en la memoria, pero esto puede no ser lo que quieres. También tenga en cuenta que \ n puede convertirse en combinaciones de caracteres diferentes en los distintos sistemas, por lo que he modificado el código original para el uso (char) 10 como separador de fila.
Una advertencia final: el código siguiente no sólo lo que usted pidió, no es eficaz en todos, y nunca debe ser utilizado en cualquier código de tiempo crítico, o en cualquier código en changeSeat sea llamado regularmente (o, cuando la base de datos es grande).
#include <stdio.h>
#define SEATS_DATABASE "seats.db"
#define NUM_ROWS 8
#define NUM_SEATS 8
void initDataBase(void)
{
FILE *fp;
int i;
int j;
fp = fopen(SEATS_DATABASE, "w");
if(fp == NULL)
{
printf("Can't create file");
exit(0);
}
else
{
for(i=0; i<NUM_ROWS; ++i)
{
for(j=0; j<NUM_SEATS; ++j)
fputc('X', fp);
if(i != NUM_ROWS-1)
fputc(10, fp);
}
fclose(fp);
}
}
void changeSeat(int row, int seat, char ch)
{
FILE* fp;
fp = fopen(SEATS_DATABASE, "r+");
if (fp)
{
fseek(fp, row*(NUM_SEATS+1)+seat, SEEK_SET);
fputc(ch, fp);
fclose(fp);
}
else
{
printf("Can't update the database\n");
}
}
int main(void)
{
initDataBase();
changeSeat(3, 3, 'O');
changeSeat(0, 1, 'O');
return 0;
}
- #include <stdio.h>
- #define SEATS_DATABASE "seats.db"
- #define NUM_ROWS 8
- #define NUM_SEATS 8
- void initDataBase(void)
- {
- FILE *fp;
- int i;
- int j;
- fp = fopen(SEATS_DATABASE, "w");
- if(fp == NULL)
- {
- printf("Can't create file");
- exit(0);
- }
- else
- {
- for(i=0; i<NUM_ROWS; ++i)
- {
- for(j=0; j<NUM_SEATS; ++j)
- fputc('X', fp);
- if(i != NUM_ROWS-1)
- fputc(10, fp);
- }
- fclose(fp);
- }
- }
- void changeSeat(int row, int seat, char ch)
- {
- FILE* fp;
- fp = fopen(SEATS_DATABASE, "r+");
- if (fp)
- {
- fseek(fp, row*(NUM_SEATS+1)+seat, SEEK_SET);
- fputc(ch, fp);
- fclose(fp);
- }
- else
- {
- printf("Can't update the database\n");
- }
- }
- int main(void)
- {
- initDataBase();
- changeSeat(3, 3, 'O');
- changeSeat(0, 1, 'O');
- return 0;
- }