• ベストアンサー

go toに変わるもの

sgwjnの回答

  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.7

私がこの処理をコーディングするのであれば、 scanf("%d %d",&a,&b); //(1) if(a == 1 && b == 1){ //ここの条件は今適当に付けた  ret = jump();  if(ret != 1) ~~; //ここで(1)の処理に戻りたい。go to文以外で。 } この部分をモジュール化してmain()で再帰させます。 個人的には、goto文は特定の処理をスルーさせるため程度にしか使用しません。ラベルをgoto以前に書くことはほぼないです。 また、goto以外で似たようなことができるのであれば、それを使いたいと仰っていますが、gotoを使うなというのは、基本的にジャンプ系の処理を使うなということで、breakやcontinueも含まれます。ですので、gotoを避けても、似たような構文を使用していては意味がありません。 ただ、他の回答者の方々も仰っていますが、これらの構文は扱い方によってはとても綺麗なコードを書くことができます。ようするに、使ってはいけないのではなく、使い方に注意しなければいけないということです。 もし、goto文を使わずに汚いコードを書くくらいなら、goto文を使って綺麗なコードを書くべきです。 http://ameblo.jp/argv/entry-10020978008.html 上記URLには、goto文に対する一つの考え方が書かれています。この考え方は、個人的に非常に共感できます。

関連するQ&A

  • 再帰呼び出し

    アッカーマン関数の値を出力するプログラム #include void main(void); int ack(int,int); void main(void) { int x,y,i; printf(" data(x) = "); scanf("%d",&x); printf(" data(y) = "); scanf("%d",&y); i = ack(x,y); printf("Ackerman = %d\n",i); } int ack(int a,int b) { int k; if (a == 0) k = b+1; else if (b == 0) k = ack(a-1,1); else k = ack(a-1,ack(a,b-1)); return (k); } この関数を呼び出した回数も出力するようにしたいのですが、どうしたらいいのでしょうか?

  • 長方形、円、三角形の計算するプログラムでエラーがでます

    タイトルの通りなんですがエラーがでます>< コンパイラはできたのですが、実行して二つ目の入力するとこで、入力したあと止まります。 どこがおかしいのでしょうか? #include <stdio.h> int sikaku(void); int en(void); int main(void) { char ch; int a,b; printf("円(A) 長方形(B) 三角形(C)\n"); printf("入力してください:"); ch = getche(); if(ch == 'C'){ printf("\n底辺を入力してください:"); scanf("%d ",a); printf("高さを入力してください:\n"); scanf("%d",b); printf("%dです",a * b); } else if(ch == 'B') sikaku(); else if(ch == 'A') en(); return 0; } int en(void) { int a; float f; printf("\n半径を入力してください:"); scanf("%d",a); printf("円周率を入力してください:"); scanf("%f",f); printf("%fです",a * a * f); return 0; } int sikaku(void) { int a,b; printf("\n縦を入力してください:"); scanf("%d",a); printf("横を入力してくさい:\n"); scanf("%d",b); printf("dです",a * b); return 0; }

  • 中央値をもとめる

    このプログラムだとたとえば 1、100、99を入力したときに間違った値を出します。どうすればいいでしょうか?おねがいします。 #include <stdio.h> int main(void) { int a, b, c, m; int max; printf("1個目の数値:"); scanf("%d", &a); printf("2個目の数値:"); scanf("%d", &b); printf("3個目の数値:"); scanf("%d", &c); max = a; if(max < b) max = b; if(max <= c) m = max; printf("%d, %d, %d の中央値は%dです。\n", a, b, c, m); }

  • if文で困っています。

    define A 5 void main(void) int i; scanf("%d", &i); if (i <= A){ このような形をつくったのですが、if文のところで質問があります。 「数字をいくつか入力し、その入力したデータ数が5つより少ないときに・・・」というようなプログラムにしたいのですが、この場合、「入力した数値が5.0以下であるときに・・・」というプログラムになっているのではないかと、困っています。どちらが正しいのでしょうか?

  • 間違いが存在するみたいなんですが・・・

    以下のプログラム、 間違いが存在するみたいなんですが、 MicrosoftVisualC++ でコンパイルしてみても エラー、警告ともに0でちゃんと実行できました。 本当に間違いが存在するでしょうか? #include <stdio.h> int Testfunc(int InputData) { int Ret; if(InputData<100){ Ret=InputData*2; } retrun Ret; } void main() { int InputData; int OutputData; printf("整数入力"); scanf("%d", &InputData); OutputData=Testfunc(InputData); printf("%d\n", OutputData); }

  • またプログラムの修正おねがいします。

    キーボードから出力した3つの整数について、以下の判定を行い 判定結果を出力するプログラムを作成する。 全部同じ 2つ同じ バラバラ * 論理演算子を使わないこと。 * インデントを正しくつけること。 #include<stdio.h> void main(void) { int a,b,c; printf("a --->"); scanf("%d",$a); printf("b --->"); scanf("%d",$b); printf("c --->"); scanf("%d",$c); if(a==b){ if(b==c){ printf("全部同じ\n"); } } else if(a!=b){ if(b==c){ printf("2つ同じ"); } else if(a==c){ printf("2つ同じ"); } else{ printf("バラバラ"); } } } 最近c言語を習ったばっかりなのでわからないとこだらけです。よろしくお願いします。

  • JavaにはなぜGO TO 命令がないのでしょうか?

    皆さん教えて下さい。私はCOBOLを長年手がけ、最近Javaを勉強している者です。 JavaにはなぜGO TO 命令がないのでしょうか? IF ネストというのは、わかりにくく、私は昔から嫌っておりました。 ところがJavaにはGO TO 命令が無いため、いやでもIF ネストを使わねばならないようです。 それともわかりやすく効率的なコーディングが別にあるのでしょうか?? 3択の問題で、下記AはJavaの教科書的コーディングです。3択だからまだしも複雑になると、IFネストはわかりにくいと私は思います。 下記Bはわかりやすいですが、無駄な処理が発生し、良くないコーディング例です。 下記CはCOBOLコ-ディングで、GO TOが使えるため、人間が読んでわかりやすく、処理効率もいいです。 ●この点Javaをやっている皆さんどうお考えですか??? ------------------------------------------------------------------------------------ A<教科書的サンプル> if(a > 0){ System.out.println("aは正の値です。"); }else if(a == 0){ System.out.println("aはゼロです。"); }else{ System.out.println("aは負の値です。"); } ------------------------------------------------------------------------------------ B<if ネストを嫌った サンプル> if(a > 0){System.out.println("aは正の値です。");} if(a == 0){System.out.println("aはゼロです。");} if (a < 0){System.out.println("aは負の値です。");}   処理効率悪く、良くないプログラム例 ------------------------------------------------------------------------------------ C<COBOL なら> IF a  >  0 DISPLAY "aは正の値です。"    GO TO OWARI. IF a  =  0 DISPLAY " aはゼロです。"   GO TO OWARI. IF a <  0 DISPLAY " aは負の値です。" . OWARI. .    GO TO 命令がある故に効率的 IF 構文の終わりと、OWARI の後ろにピリオドがあります。 ------------------------------------------------------------------------------------

    • ベストアンサー
    • Java
  • C言語の質問です。

    #include"stdio.h" int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = a+b; printf("add=%d\n", add); return 0; } と、------------------------------------------------------------------------------ #include"stdio.h" int tasizan(int x, int y); int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = tasizan(a, b); printf("add=%d\n", add); return 0; } int tasizan(int x, int y){ int aa; aa = x + y; return aa; } の違いを教えてください。

  • AIZU ONLINE JUDGEについて

    明らかに正常なコードなのに答えが間違っているとされます。 #include<stdio.h> int main(void) { int a, b, c, N, i; scanf("%d",&N); for (i = 0; i < N; i++) { scanf("%d %d %d", &a, &b, &c); int A = a*a; int B = b*b; int C = c*c; if ((A + B == C) || (B + A == C )|| (C + A == B)) { printf("YES\n"); } else { printf("NO\n"); } } return 0; } これはvisual studio では通りました。 ちなみにこのコードは自分のものと酷似していますが、これはAIZU的にはOKだそうです。 #include <stdio.h> int main(void) { int a, b, c, n, i; scanf("%d",&n); for (i = 0; i < n; ++i) { scanf("%d %d %d", &a, &b, &c); if ((a*a + b*b == c*c) || (b*b + a*a == c*c) ||( c*c + a*a == b*b)) printf("YES\n"); else printf("NO\n"); } return 0; } この違いはなんでしょうか?

  • 1以上の自然数を2つ(それぞれa,b)読み込み、

    a/bの値を少数を使った表現で画面に書き出すプログラムを作成するんですが、 #include <stdio.h> int main(void) {int a,b; double n; scanf("%d", &a); scanf("%d", &b); n=a/b; printf("%d ",n); return 0;} で実行しても、a、bに何を入れても0になっていしまいます。どこが違っているでしょうか?