j個の1桁を扱っているので、単純line[0]-'0'
にline [0]を整数に変換するために使用します。最初のスキャンでは、ファイル ストリームが次の行に移動するように 5 バイトをスキャンするだけです。
#include<stdio.h>
int main()
{
FILE *fp;
int alive_row;
int alive_column,livecells;
char line[10];
fp=fopen("file1","r");
fgets(line,5 , fp);
livecells = line[0]-'0';
fprintf(stderr, "\n %i live cells\n", livecells);
while ( fgets(line, 5, fp)!=NULL)
{
// puts(line);
alive_row = line[0]-'0';
alive_column = line[2]-'0';
fprintf(stderr,"\n Cell: (%i)(%i)\n", alive_row, alive_column);
}
fclose(fp);
}
これにより、行を行と列の 2 つの値に分割できます。
ファイル1:
12
2 1
2 2
2 3
50 5
30 20
5 30
30 330
3390 447
12 1234
0 0
1234 1
154 0
コード:
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp;
int alive_row=0;
int alive_column=0,livecells;
int column=0,i;
char line[10];
fp=fopen("file1","r");
fgets(line,5, fp); //read first line
livecells = atoi(line); //convert into int
fprintf(stderr, "\n %i live cells\n", livecells);
while ( fgets(line, 12, fp)!=NULL) //read next lines
{
for(i=0;i<strlen(line)-1;i++) //loop to separate rows and columns , here if space occurs make flag column as 1
{
if(line[i]!=' ' && column!=1 )
alive_row = 10*alive_row+line[i]-'0'; //convert into integers
else
{
if(line[i]==' ')
i=i+1;
alive_column=10*alive_column+line[i]-'0';
column=1; //you can write this statement just above if but you need to add two brace
}
}
printf(" Cell:(%d)(%d)\n\n", alive_row, alive_column);
alive_row=0; //after every iteration just make these value to default.
alive_column=0;
column=0;
}
fclose(fp);
}
出力
12 live cells
Cell:(2)(1)
Cell:(2)(2)
Cell:(2)(3)
Cell:(50)(5)
Cell:(30)(20)
Cell:(5)(30)
Cell:(30)(330)
Cell:(3390)(447)
Cell:(12)(1234)
Cell:(0)(0)
Cell:(1234)(1)
Cell:(154)(0)