G01X100Y100
X200
Y300
G02
とすると最初の行はG01でX=100Y=100
次の行はG01でX=200,Y=100
最後の行はX=200Y=300のように
①Gは次のGがあるまでその値を引き継ぎ
②XやYは記入がないならば前の値を引き継ぐという風にしたいのですが
FILE *fp;
char *str,buf[1000];
char subbuf[100],*s1;
char buf2[100],*s2;
char buf3[100],*s3;
char buf4[100],*s4;
static double bx=0;
static double by=0;
if ((fp = fopen("test.txt", "r")) == NULL) {
printf("ファイルが開けません\n");
return EXIT_SUCCESS;
}
while (fgets(buf, 1000, fp) != NULL) {
str=buf;
while((*str!='\0'){
if(*str!='\0' && *str=='G'){
*str++;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
s2=buf2;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
while(*str!='\0'&&(isdigit(*str) || *str=='-' || *str=='.'))
*s2++=*str++;
*s2='\0';
}
if(*str!='\0' && *str=='X'){
*str++;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
s3=buf3;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
while(*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.')) *s3++=*str++;
*s3='\0';
}
if(*str!='\0' && *str=='Y'){
*str++;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
s4=buf4;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
while(*str!='\0' &&(isdigit(*str) |*str=='||*str=='.')) *s4++=*str++;
*s4='\0';
}
CDC *v;
v=GetDC();
if((int)atof(buf2)==92){
MoveTo((int)atof(buf3),(int)atof(buf4));
bx=(int)atof(buf3);
by=(int)atof(buf4);
ReleaseDC(v);
}
else if((int)atof(buf2)==01){
MoveTo((int)bx,(int)by);
LineTo((int)atof(buf3),(int)atof(buf4));
bx=(int)atof(buf3);
by=(int)atof(buf4);
ReleaseDC(v);
}
else
str++;
}
}
fclose(fp);
return 0;
}
が現在のプログラムです。①の方は{
FILE *fp;
char *str,buf[1000];
char subbuf[100],*s1;
char buf2[100],*s2;
char buf3[100],*s3;
char buf4[100],*s4;
if ((fp = fopen("test.txt", "r")) == NULL) {
printf("ファイルが開けません\n");
return EXIT_SUCCESS;
}
while (fgets(buf, 1000, fp) != NULL) {
str=buf;
while((*str!='\0'){
if(*str!='\0' && *str=='G'){
*str++;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
s2=buf2;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
while(*str!='\0'&&(isdigit(*str) || *str=='-' || *str=='.'))
*s2++=*str++;
*s2='\0';
}
if(*str!='\0' && *str=='X'){
*str++;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
s3=buf3;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
while(*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.')) *s3++=*str++;
*s3='\0';
}
if(*str!='\0' && *str=='Y'){
*str++;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
s4=buf4;
if((*str!='\0' &&(isdigit(*str) || *str=='-' || *str=='.'))
while(*str!='\0' &&(isdigit(*str) |*str=='||*str=='.')) *s4++=*str++;
*s4='\0';
printf("G[%f]X[%f]Y[%f]",atof(buf2),atof(buf3),atof(buf4));
}
else
str++;
}
}
fclose(fp);
return 0;
}
で試してみるとちゃんとG01X100Y100
X200Y100と
G02X300Y300すると
G01X100Y100
G01X200Y100
G02X300Y300
となります。図形作成プログラムの所でミスをしているのでしょうか?
②はやり方も思いつきません・・
教えてください