ページ 11

switch文

Posted: 2008年11月20日(木) 11:14
by 初心者
switch{
  case 01:
   CDC *v;
    v=GetDC();
     static double bx =0, by=0;
     v->MoveTo(bx,by);
     v->LineTo(A,B);

     bx=A;
     by=B;

   ReleaseDC(v);
  break;


  case 02:
    CDC *w;
     w=GetDC();
      static double cx=0,cy=0;
        double r;
         r=sqrt(C*C+D*D);
          w->Arc(cx,cx-r,A,B+r,cx,cy,A,B);
          cx=A;
          cy=B;
    ReleaseDC();
   break;
}
というswitch文なのですがbx,byの初期化がcaseのラベルによって行われませんでしたとなります。
どうすればいいのかわかりません。
後Arcの所がdoubleからintに変換しました。データが失われているかもしれませんと出るのが気になります。

Re:switch文

Posted: 2008年11月20日(木) 11:31
by 御津凪
> bx,byの初期化がcaseのラベルによって行われませんでした

switch 文の中に直接変数を宣言することはできません。
この場合、
case 01:
  {
     CDC *v;
      v=GetDC();
       static double bx =0, by=0;
       v->MoveTo(bx,by);
       v->Lineto(A,B);

       bx=A;
       by=B;

    ReleaseDC(v);
  }
  break;
のように、case ~ break 内を{}括弧で囲むと良いでしょう。
あるいは、switch 文の外で事前に変数を宣言・初期化しておく方法もあります。

それと、 case の部分は 01 では無く、 1 にしたほうがいいです。
先頭に0をつけると8進数表記になってしまいます。


> doubleからintに変換しました。データが失われているかもしれません

こちらの方は、浮動小数点型から整数型へ丸められる(小数点以下は切り捨てられる)ための警告です。
切捨てで問題なければそのままで大丈夫です。
(四捨五入等で丸める場合は事前に処理する必要があります)

この警告を消すには、
w->Arc((int)(cx),(int)(cx-r),(int)(A),(int)(B+r),(int)(cx),(int)(cy),(int)(A),(int)(B));
と明示的に変換すると良いでしょう。(大雑把ではありますが)

Re:switch文

Posted: 2008年11月20日(木) 11:42
by 初心者
キャストですね。できましたありがとうございました