• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:if~else ifの処理を配列とループを使用して記述したい)

if~else ifの処理を配列とループを使用して記述したい

noname#199778の回答

noname#199778
noname#199778
回答No.1

とりあえず、スクリプトが起動しないのは、 if (!txt.match data[a]) { この部分の記述が不正だからだと思います。 if (!txt.match(data[a])) { と書き換えて、data[x]の配列の中の文字列から括弧を除去すれば、一応は起動すると思います。 条件が真のときに他の処理を行わないという指定にする場合は、通常は(1)に示されているように、ifとelse if、elseで処理を振り分けるのが妥当です。 いまいちループで処理させるメリットが理解できないのですが、もしループを用いてif文をまとめたいのであれば、条件に適合した時点でループから強制的に抜けるような処理を追記すればいいと思います。 ループから強制的に抜けるための処理は、「break;」で定義できます。 これを、条件に適合した場合の処理の最後に追加すればよいのではないかと。 なお、蛇足ですが、配列や変数の定義等は、ループ回数により内容に変化がないのであれば、それらはループの外で定義する方がスクリプト的にスマートだと思いますよ。 見当違いでしたら、ごめんなさい。 参考になれば幸いです。

oomiyaji
質問者

お礼

ありがとうございます。アドバイスいただきましたように、ifとelse ifの部分はとりあえずそのままにし、「(!txt.match(data[a]))」の部分を直した上で、(短くできる部分はないかと)他の場所を関数でまとめてみたところ、かなりすっきりし、また問題なく動作しました。 ただ、条件が10以上あるため、やはりまだ記述が長いようにも思われ、そこで再度ループも試みたのですが、残念ながら動作しないようです。 break;の使い方は for(a=0;a<=2;a++){ if (!txt.match(data[a])) { aler[a]; break; } else location.href = "ok.htm"; } でよいでしょうか。 度々恐れ入りますが、教えていただるとありがたく存じます。よろしくお願いいたします。

関連するQ&A

  • if文の分岐をelseにする事ができません。

    以下のような定義の構造体があります。 この構造体のメンバであるchar型配列Cが、 【実行】にあるようにif文で使われている時にelseの処理2を実行する事ができませんでした。 char型の変数だと、'\0'が入っていればelseとなるのですが、 配列となっているCにstrcpyで'\0'や0,NULLを設定してみてもelseにはなりませんでした。 この様なif文でelseの処理2を実行するにはどうすれば良いのでしょうか? 初歩的な質問かも知れませんが、回答頂けると幸いです。 【定義】 typedef struct { struct { char C[100]; }B }A 【実行】 static A* hoge; hoge = (A*)malloc(sizeof(A)); if(A->B.C) { 処理1 }else{ 処理2 }

  • if else文のフローチャート

    c言語です。 if else文のフローチャートを教えてほしいです。 Trueの場合は処理1、Falseの場合は処理2を実行したいです。 最初に条件と書きます。

  • AS3.0にて、if...else if...を使いたいのですが、、

    AS3.0にて、if...else if...を使いたいのですが、、 "A_btn"を押すと"A"をaddChildします。 "B_btn"を押すと"B"をaddChildします。 "A"をaddChildする際に"B"がステージにあれば、まず"B"をremoveChildします。 "B"をaddChildする際に"A"がステージにあれば、まず"A"をremoveChildします。 今はaddChildは省略させていただきますが、 if("A"がステージにある場合){ removeChild(A); }else if("B"がステージにある場合){ removeChild(B); } この("A"がステージにある場合)の部分はどう書けば良いのか分かりません。。 どなたか助けていただけないでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • if~else文の中にまたif~else文をいれるには。

     このプログラムを思うように実行したいのですが、できません。 コンパイルはできるのですが、警告が4つほど出て、結果も自分が思ってるのとは違います。 プログラムのどこを改善すべきか教えてください。 OSはWindows XPで、コンパイラはボーランドのフリーコンパイラを使用しています。 #include<stdio.h> int main(){ int a,b,c,d; printf("1か0を入力してください。\n"); scanf("%d",&a); if(a=0) { printf("2か3を入力してください。\n"); scanf("%d",&b); if(b=2){ printf("今まで合計は%dです。\n",a+b); } if(b=3){ printf("今まで合計は%dです。\n",a+b); } else { printf("指定した数字を入力して下さい。\n"); } } else if(a=1) { printf("あなたは%dを入力しました。\n",a); } else { printf("指定した数字を入力してください。\n"); } return 0; }

  • ifの条件式 Andを使用するものについて

    phpで、 $a="あいうえお"; $b="かきくけこ"; $c="かきくけこ"; と変数を三つ宣言しました。 上の変数三つを利用して、以下条件のif文を作りたいと思いました。  条件:$a変数 と $b変数が異なり、かつ $b変数 と $c変数の内容が同じとき「処理A」を実行させる。 ○作成したif文 if(($a <> $b) && ($b == $c)){  処理A } と記述したのですが、 ifブロック処理Aが実行されません。 なぜなのでしょうか…。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • var変数 if elseの使い方。

     はじめまして、 プログミングの勉強をしています。 <html> <head> <script type="text/javascript"> <!-- var tennsuu = 70; if(tennsuu >= 60){ alert("合格"); }else{ alert("不合格"); -- > </script > </head> </html>  と入力してctrl+sで保存して  ~~.html すべてのファイルに して、デスクトップの画面に現れた eマークをクリックして、ホップアップ を解除して、更新すると「!合格」と出る はずですが何も画面にでてきません。  どこか間違っていますか。 教えてください。  

  • IF VBA 1つの条件で複数の処理

    IF関数で、1つの条件(セルに特定の文字があったら) セルA1=B1+C1 セルB1=D1+E1 のように2つの処理を行ないたい場合、どんな構文を作成 したらいいでしょうか。 IF~Then ElseIf~Then End If というのが基本構文ですが、条件が複数あるのではなく 条件1つで処理は2つというのが分かりません。

  • ループ処理について

    下記のようなScriptを記述しました。 for(i = 1; i <= 4 ; i++) { trace("A") ; var fileload:LoadVars = new LoadVars(); fileload.load("b"+i+".jpg"); fileload.onLoad = function(success:Boolean) { trace("B") ; if (!success) { ok_flg = 1; } else { a.duplicateMovieClip("b"+i, i); this["b"+i].loadMovie("b"+i+".jpg") ; this["b"+i]._x += (i - 1) * 90 ; } }; } 本来ならJPEGが存在する分だけ読込むと言う処理をしたいのですが、テスト的に3ファイル用意してテストしました。 JPEGの命名規則は「b1~b3」としています。 普通のループ文であれば問題無く3件のJPEGが表示されますが、読み込みが成功したか否かの判断文を入れると動作がおかしくなります。 TRACEを入れてみたら、 A A A A B Error opening URL "file:///C|/Documents%20and%20Settings/xxxxx/デスクトップ/b4.jpg" B B B このように最初に読み込みの処理を実行し、その後に成功したか否かの判定が処理されます。 これって、正常なループの処理でしょうか?。 また、私が処理したかったようにするにはどのようなScriptにすれば良いのでしょうか?。 宜しくご教授ください。

    • ベストアンサー
    • Flash
  • VBAでelseに対応するifがありませんとエラー

    VBA初心者です 入力した数値(0から5)により、呼んでくる列を変えたいマクロを組んでいます if then elseif end ifで条件式を作ったのですが、 「elseに対応するifがありません」とエラーが出て進みません elseifが悪いのかと思い、条件を1つに絞ると上手く動きます(この際はendifは不要) ネット検索や参考書を見てますが、分かりません どなたか間違いを指摘して頂けませんか? Sub inputboxA() Dim nDat As String nDat = inputbox("何ヶ月目ですか?") If IsNumeric(nDat) = False Then MsgBox ("0から5までの値を入力して下さい") Exit Sub End If If nDat = 0 Then mm = 16 '0なら16列からデータを呼んでくる ElseIf nDat = 1 Then mm = 20 'ここでエラーが出る  1なら20列目からデータを呼んでくる ElseIf nDat = 2 Then mm = 24 '2なら24列目からデータを呼んでくる ElseIf nDat = 3 Then mm = 28 '3なら28列目からデータを呼んでくる ElseIf nDat = 4 Then mm = 32 '4なら32列目からデータを呼んでくる ElseIf nDat = 5 Then mm = 36 '5なら36列目からデータを呼んでくる End If 'データを呼んでくる For r = 4 To 2000 '処理するSheet1の行数範囲 b = Sheets(1).Cells(r, 1) 'bにA列の値を代入 For t = 6 To 2000 '検索するSheet3の行数範囲 If Sheets(3).Cells(t, 7) = b Then 'Sheet1のA列の値とSheet3のA列が一致した場合 y = Sheets(3).Cells(t, mm) 'yにB列の値を代入 Sheets(1).Cells(r, 6).Value = y 'Sheet1のB列に値を入力 Exit For '値が見つかったのでForを終了 End If Next Next End Sub

  • if else文

    ドットマトリクスLEDを3個のスイッチで切り替えて点灯できるようにしたいのですが、うまく動作できません。プログラムのPORTA、C,D,EのところでLEDが点灯する形を決めています。 PORTB0,1,2でスイッチの制御をしています。 たぶん if~else のところがおかしいと考えているのですがいろいろ調べたのですが原因がわかりません。 何か解決のヒントでも気になったとこでもいいのでよろしくおねがいします。 #include<pic.h> __CONFIG,_CONFIG1 , _DEBUG_ON , _LVP_OFF , _FCMEN_OFF , _IESO_OFF , _BOREN1_OFF , _BOREN0_OFF , _CPD_ON , _CP_ON , _MCLRE_ON , _PWRTE_OFF , _WDTE_ON , _FOSC2_OFF , _FOSC1_ON , _FOSC0_OFF; __CONFIG,_CONFIG2 , _WRT1_ON , _WRT1_ON , _BOR4V_OFF; void ioport(void); void main() { ioport(); while(1) { if(RB0 == 0)         {    PORTA = 0b111000; PORTB = 0b00000111; PORTD = 0b11111110; PORTC = 0b11111111; PORTE = 0b001; break; } else if(RB1 == 0) { PORTA = 0b111000; PORTB = 0b00000111; PORTD = 0b11111100; PORTC = 0b00111111; PORTE = 0b001; break; } else if(RB2 == 0) { PORTA = 0b111000; PORTB = 0b00000111; PORTD = 0b10101010; PORTC = 0b01010101; PORTE = 0b001; break; } else { PORTA = 0b111000; PORTB = 0b00000000; PORTD = 0b11111111; PORTC = 0b11111111; PORTE = 0b001; break; } } } void ioport(void) { TRISA = 0; TRISB = 0b00000111; TRISC = 0; TRISD = 0; TRISE = 0; }