• 締切済み

VisualC++

ファイルから読み込んだ値を取り込み図形を書く方法をしりたいです。 X2Y7B21D2 F4X8Y9S21 C2E2X0YF0 のファイルから X2 Y7 X8 Y9 X0 Y0 を取り出して LineToで直線を書く方法です。この場合(2,7)から(8,9)をとおり(0,0)に 向かう直線になります。

みんなの回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.3

>この場合(2,7)から(8,9)をとおり(0,0)に向かう直線になります。  #2 「補足」ソースは、全部 (0,0) から、のようだけど・・。  てか、「(2,7)から(8,9)をとおり(0,0)に向かう直線」て、ユークリッド空間じゃあないのか?。 >こういうイメージなんですがこれで動かなくて・・  エディタでコーディングしただけでは動きませんよ。  VisualC++ での「実行」のしかた、判りますか?。 ★「エラー」はもちろん、全ての「警告」を消してから「質問」しても遅くありません。  というか、コンパイルせずに投稿するのは非常にマズイよ。  while((*str!='\0'){  はなからこれかよ・・(怒)。 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4つの単体のうち、「ファイルから読んだデータの分離の仕方」だけを「参考」に・・。    (正の整数限定:BorlandC++5.5.1) #include <stdio.h> #include <stdlib.h> #include <ctype.h> #define RECL 32 // 最大レコード長に! int GetVal( char cXY, char cBuf[] ) {  int i, nn = 7;  char cStr[ 7 + 1 ] = "-333"; // 異常レコード対応  for( i = 0; i < RECL; i++ ){   if( cXY == cBuf[ i ] ){    nn = 0;    continue;   }   if( 7 == nn ) continue;   if( ! isdigit( cBuf[ i ] ) ){    if( nn ) break;    continue;   }   cStr[ nn++ ] = cBuf[ i ];   cStr[ nn ] = '\0';  }  return( atoi( cStr ) ); } int main() {  FILE *fp;  char cBuf[ RECL ];  int iX0, iY0, iX1, iY1;  if( NULL == ( fp = fopen( "Z:\\test.txt", "r" ) ) ){   printf( "ファイルが開けません\n" );   return;  }  fgets( cBuf, RECL, fp ); // 先頭行  iX0 = GetVal( 'X', cBuf );  iY0 = GetVal( 'Y', cBuf );  while( NULL != fgets( cBuf, RECL, fp ) ){   iX1 = GetVal( 'X', cBuf );   iY1 = GetVal( 'Y', cBuf );   printf( "(%d,%d) → (%d,%d)\n", iX0, iY0, iX1, iY1 );   iX0 = iX1;   iY0 = iY1;  }  fclose( fp );  return; } 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。

  • arain
  • ベストアンサー率27% (292/1049)
回答No.2

No.1です。 >2番目と3番目をくっつけたやつです。 すみませんが「くっつけたやつ」の具体的な意味(処理のイメージ)を教えてもらえませんか >その4つ単体のやり方はわかりますよ と書かれているので、 ・読み込んだデータから座標データを分離することができている。 ・座標データから線を引くこともできる。 が単体でできていれば、後は描画座標を ・全部読み込んでからやる ・二つ分だけ読み込んでからやる の違いだけでしかありませんので、問題となるべき個所は見受けられませんが。

zaqwe
質問者

補足

FILE *fp; char *str,buf[1000];   char subbuf[100],*s1; char buf2[100],*s2;   char buf3[100],*s3; 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=='X'){ *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=='Y'){ *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'; } CDC *v; v=GetDC(); MoveTo(0,0); LineTo(atof(buf2),atof(buf3)); ReleaseDC(v); } else str++; } } fclose(fp); return 0; } こういうイメージなんですがこれで動かなくて・・

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

それで、知りたいのは、 ・ファイルの読み方 ・ファイルから読んだデータの分離の仕方 ・ラインの描画の仕方 ・連続してラインを引く方法 のどれですか? また、使用できるAPIの制限なじありますか? 「全部」というのは丸投げで禁止行為です。

zaqwe
質問者

補足

2番目と3番目をくっつけたやつです。 その4つ単体のやり方はわかりますよ 制限はありません。

関連するQ&A