※ ChatGPTを利用し、要約された質問です(原文:プログラム)
プログラムの条件分岐による値の省略方法について
このQ&Aのポイント
プログラムでG01X30Y30を実行すると直線が引かれますが、GやXが省略された場合に前回の値を使いたい場合、どのように変更すればいいのでしょうか。
現在のプログラムでは、Gの値が省略された場合には前回の値が使われない仕様になっています。GやXが省略された場合に前回の値を使うように変更する方法を教えてください。
プログラムでG01X30Y30を実行すると直線が引かれますが、GやXが省略された場合には前回の値を使いたいです。現在のプログラムではそのような処理は行われませんので、どのように変更すればいいのか教えてください。
{
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;
}
という風なプログラムになっているのですが
今現在
G01X30Y30
G01X30Y120というファイルをこのプログラムにて実行すると
(0,0)→(30,30)→(30,120)というような直線が引かれます。
しかしこれを
G01X30Y30
Y120
とかかれたときも同様の結果がでるようにしたいです。
つまり最初のG○○が省略されているときは前回のGの値を
X○○が省略されているときは前回のXの値を使うように
変更したいのですがどのように変更すればいいのかがわかりません。
教えてください。
お礼
解決しました感謝です。