【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.19861

「break(continue)の位置が誤っている」というエラー
投稿者---n研(2005/02/12 11:53:58)


if (D > 0) {return (-B-sqrt(D));}   /*交点あり*/
else       {printf("交点なし\n");
            continue;}    


Dという計算で求める変数があり、D>0でない場合はbreak,またはcontinueで
かかっているforループから抜け出したいのですが、
題名のようなエラーが出ます。。
なぜでしょうか??
おもいあたることがあったら教えてください。。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:「break(continue)の位置が誤っている」というエラー 19862 匿名 2005/02/12 13:00:54


No.19862

Re:「break(continue)の位置が誤っている」というエラー
投稿者---匿名(2005/02/12 13:00:54)


if (D > 0) {  /*交点あり*/
            return ( -B-sqrt(D) );
} else {
            printf("交点なし\n");
            break;
}

なんじゃないの?

continueとbreakは違う。



この投稿にコメントする

削除パスワード

No.19863

Re:「break(continue)の位置が誤っている」というエラー
投稿者---n研(2005/02/12 13:19:47)


>continueとbreakは違う。

そうなんですけど、
とりあえず、if(条件)のときループから抜け出したくて
continueを書くと「continueの位置が誤っている」と出て、
breakを書くと「breakの位置が誤っている」と出るんです。。
ループがいくつかの関数にまたがってかかってるのがいけないんでしょうか?
途中に配列もあったりするし・・、
有効範囲みたいなのがあるんでしょうか??


この投稿にコメントする

削除パスワード

No.19864

Re:「break(continue)の位置が誤っている」というエラー
投稿者---匿名(2005/02/12 13:26:39)


情報が少ない。
ぜんぶ載せるのが嫌ならその for文 くらいは載せて下さい。


この投稿にコメントする

削除パスワード

No.19865

Re:「break(continue)の位置が誤っている」というエラー
投稿者---n研(2005/02/12 13:45:07)


すいません、、main関数から問題のところまで載せてみます。

void main()
{
    SetEnvironment();
    for(p=0;p<15;p++){
      for(q=0;q<15;q++){    
        for(k=1;k<l;k++){
          for(i=1;i<n;i++){
            Ray();    
            cos1Cal();
            cos2Cal();
            pass();
           }
        Screen();
        }
        }
    }
}
            
void Ray()
{   
    t = RayCast();  
    if (t < INFINITY){
      for(j=0;j<m;j++){
        kouten[k][i][j]=a[k][i][j]*t+b[k][i][j];
      }
    }
    Normal();         
}

double RayCast()    /*距離パラメタtを求める*/
{
    double  B,C,D;
    B=a[k][i][0]*(b[k][i][0]-c[k][0])+a[k][i][1]*(b[k][i][1]-c[k][1])+a[k][i][2]*(b[k][i][2]-c[k][2]);    
    C=(b[k][i][0]-c[k][0])*(b[k][i][0]-c[k][0])+(b[k][i][1]-c[k][1])*(b[k][i][1]-c[k][1])
          +(b[k][i][2]-c[k][2])*(b[k][i][2]-c[k][2])-r*r;
    D=B*B-C;
    
    if (D > 0) {return (-B-sqrt(D));}   /*交点あり*/
    else       {printf("交点なし\n");
            continue;   }  
                  /*return (INFINITY);  交点なし、無限遠  */
}


最後の行のコメントアウトはcontinueに書き換える前に書いていた文です。。


この投稿にコメントする

削除パスワード

No.19866

Re:「break(continue)の位置が誤っている」というエラー
投稿者---匿名(2005/02/12 13:54:13)


関数の中にcontinue書いてるからコンパイル通らない。
if 文を for文 の中に書かなきゃ。


この投稿にコメントする

削除パスワード

No.19868

Re:「break(continue)の位置が誤っている」というエラー
投稿者---n研(2005/02/12 14:12:44)


>関数の中にcontinue書いてるからコンパイル通らない。
>if 文を for文 の中に書かなきゃ。

ありがとうございました!
コンパイルは通りました。
"交点なし"までは実行されました、そこでとまってしまうのは
その他のエラーなんですよね?すいません^^;
ちょっと教わりたいんですが、
例えば、配列とかがbreakやcontinueで中断されたとしたら
その配列はどうなるんでしょうか?




この投稿にコメントする

削除パスワード

No.19867

Re:「break(continue)の位置が誤っている」というエラー
投稿者---あかま(2005/02/12 13:59:57)


main内のループを、別の関数内のcontinueやbreakで抜けることは出来ません。

もしそれができちゃったら
main(){
    RayCast();
}

とか書いたらエラーになるループ内でしか使えない汎用性の低い関数になっちゃいます。


この投稿にコメントする

削除パスワード

No.19869

Re:「break(continue)の位置が誤っている」というエラー
投稿者---n研(2005/02/12 14:41:52)


>main内のループを、別の関数内のcontinueやbreakで抜けることは出来ません。

ありがとうございます。。

それと、ちょっと教わりたいんですが、
例えば、配列とかがbreakやcontinueで中断されたとしたら
その配列はどうなるんでしょうか?
配列の[ ]の中の数字をその分飛ばしてくれるんでしょうか?



この投稿にコメントする

削除パスワード

No.19870

Re:「break(continue)の位置が誤っている」というエラー
投稿者---monkey(2005/02/12 14:53:41)


>例えば、配列とかがbreakやcontinueで中断されたとしたら
>その配列はどうなるんでしょうか?
>配列の[ ]の中の数字をその分飛ばしてくれるんでしょうか?

「配列が中断される」とはどういうことを想定しているのでしょうか。
配列は、同じ型のデータが連続した領域に格納されたデータ構造のことであるのに対し、breakやcontinueはプログラムの流れを制御するための命令文です。
配列がbreakやcontinueで中断されるとは???
サンプルでも書いてもらえれば、意味がわかるんですが。


この投稿にコメントする

削除パスワード

No.19871

Re:「break(continue)の位置が誤っている」というエラー
投稿者---n研(2005/02/12 15:23:22)


えーっと、No19865の私の投稿のところに書いてあるなかで、
B、Cの値は配列を使って計算してます。
continue文を書いて
for(i=1;i<n;i++){・・・・
のループから抜け出そうとしているんですが、
そのときa[k][i][0]などのiの数字はどうなっていくんでしょうか?
配列は連続したものですよね、、確かに。。


この投稿にコメントする

削除パスワード

No.19872

Re:「break(continue)の位置が誤っている」というエラー
投稿者---NykR(2005/02/12 15:40:17)


>そのときa[k][i][0]などのiの数字はどうなっていくんでしょうか?

表示してみれば良いんじゃないでしょうか。

fprintf(stderr, "i .. %d\n", i);

# 「ループカウンタの値がどうなるか」という問題と配列とは無関係です。


この投稿にコメントする

削除パスワード

No.19873

Re:「break(continue)の位置が誤っている」というエラー
投稿者---monkey(2005/02/12 15:50:54)


> No19865の私の投稿のところに書いてあるなかで、

コンパイルもできないソースで考えてもしようがないので、
簡単なサンプルを書きました。
実行してみれば、iがどうなるか理解できると思います。

#include <stdio.h>

int main( void )
{
    int a[10] = { 0,2,4,6,8,10,12,14,16,18 };
    int i;
    for( i = 0; i < 10; i++ ){
        if( 5 < a[i] ){
            break;
        }
        else{
            printf( "a[%d] = %d : 5以下\n", i, a[i] );
        }
    }

    printf( "a[%d] = %d : 5を超えた\n", i, a[i] );
    return 0;
}



この投稿にコメントする

削除パスワード

No.19874

Re:「break(continue)の位置が誤っている」というエラー
投稿者---monkey(2005/02/12 15:58:53)


ごめんなさい。こっちの方が適当です。

#include <stdio.h>

int main( void )
{
    int a[10] = { 0,2,4,6,8,10,12,14,16,18 };
    int i;
    for( i = 0; i < 10; i++ ){
        if( 5 < a[i] ){
            break;
        }
        else{
            printf( "a[%d] = %d : 5以下\n", i, a[i] );
        }
    }
    if( i < 10 ){
        printf( "a[%d] = %d : 5を超えた\n", i, a[i] );
    }
    return 0;
}



この投稿にコメントする

削除パスワード

No.19877

Re:「break(continue)の位置が誤っている」というエラー
投稿者---n研(2005/02/12 19:20:19)


ありがとうございました。
配列の中身がbreak文によって何も変わらないということがわかりました。
また、配列が「同じ型のデータが連続した領域に格納されたデータ構造」ということも掴めてきました。

それで何度も悪いのですが、、質問させてください。
配列をグローバル化しておいて、プログラム中の計算によって
配列に順々に値を代入していく・・・
ということをしたときに
break文を用いて条件に合わなかったときの計算を止めたら
中身のない配列ができる。ということであっていますか?



この投稿にコメントする

削除パスワード

No.19878

Re:「break(continue)の位置が誤っている」というエラー
投稿者---ぽへぇ(2005/02/12 19:39:59)


>配列に順々に値を代入していく・・・
>break文を用いて条件に合わなかったときの計算を止めたら
>中身のない配列ができる。ということであっていますか?

「breakで止めるまで代入した値」は配列に残るでしょう。

#define N    (10)
#define STOP (5)

int i;
int array[N]={0};


for(i = 0; i < N; i++) {
    array[i] = i;
    if(i==STOP) break;
}

for(i = 0; i < N; i++) {
    printf("%d ", array[i]);
}




この投稿にコメントする

削除パスワード

No.19880

ありがとうございました。
投稿者---n研(2005/02/12 19:59:44)


初期化で0を入れておけば安全だということですね。

いろいろな方に教わってしまって、、
本当にありがとうございましたm(__)m
また自力で頑張ってみます。


この投稿にコメントする

削除パスワード

No.19879

Re:「break(continue)の位置が誤っている」というエラー
投稿者---shu(2005/02/12 19:47:43)


掲示板での返信をあてにするより、索引で調べたほうが詳しく載ってます。
http://www9.plala.or.jp/sgwr-t/c/sakutop.html


この投稿にコメントする

削除パスワード

No.19881

はい。
投稿者---n研(2005/02/12 20:00:57)


ありがとうございました。。
参考にさせてもらいます。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧