393 :
デフォルトの名無しさん :
2011/05/05(木) 20:47:52.45 gotoを使わない方法についての質問 このソースをどう書き換えたらいいですか? int main(){ int array[10][10]; /*配列に対して何かしらの処理*/ /*配列に0が含まれるかチェック*/ int i, j; for (i=0;i<10;i++) for (j=0;j<10;j++) if (array[i][j]==0) goto err; else; /*含まれていない場合の処理*/ printf("0は含ませません"); return 0; /*含まれていた場合の処理*/ err: printf("0が含まれています"); return 0; } これはあくまで例でif文やfor文がいくつもネストしている場合に ネストから抜けるようにしたいです
>>390 クラス宣言してメソッドを書くってのは知ってるけど、
>>387 のはそうじゃないでしょ。
まあ、いつものごとく、隙あらば揚げ足を取りたいひとが
わかってて釣ってるんだろうけど。
>>1 >★C++言語については避けてください。C++対応明記スレへどうぞ
398 :
396 :2011/05/05(木) 20:59:07.83
>>397 borlandで実行すると、書き込みはできるんですが
読み込みをするとバグが起きるんですが・・・・。
399 :
388 :2011/05/05(木) 21:01:39.86
feofの使い方が間違ってる気がする
401 :
400 :2011/05/05(木) 21:02:38.78
動かない件とは関係ないだろうが
>>393 まるっと関数にしちゃえば?そんでreturn使えば?
>>397 だから、あんなに口をすっぱくして言ったのに…変数の初期化を忘れたとは…トホホのホ。
どうでもいい
>>393 書き方が入門者ぽくない
1行だからってちゃんと{}を使いなさい
>>407 は?わかりましたじゃねーんだよ
goto使うなボケ
goto使うの?マジで?
多重ループからの脱出はgoto使うのが1番スマートでしょ
>>412 >printf("0は含ませません\n");
これ何回実行されますか?
多重ループでのエラー処理はgotoで一箇所にまとめた方がいいよ goto何でもかんでもダメダメ教信者は時代遅れ
>>416 コード読めないんだったら、実行すればいいのに
if (array[i][j]==0) goto err; else; /*含まれていない場合の処理*/ printf("0は含ませません");
セミコロンがあるんだw
>>415 >>417 ほとんどの場合がループ抜けたすぐ直下にラベル置くしな
一種の構文みたいなもんだな
On Error GoToは便利
ほっほっ
gotoダメダメ教の人はsetjmpのほうがまだいいの?
局所脱出はgotoみたいなもんでしょ
setjmpが何か理解できてないから文句をつけない gotoは最初に使うなって習うからそこで思考停止してる
オレが働いてるような底辺ITドカタの現場だとgotoは使えない。 レベルの高い人の書いたコードをみるとけっこう使ってる。
書き捨てのコードだったら goto 使う そうじゃなかったら、goto 版と関数を分けて return する版を両方書いてみて良い方を採用
goto 使わないと余計なフラグ設定と判断を入れないとダメなときがある スレチだけど python ってだから嫌い
393みたいのはどうかこうが大差ない 再帰でスタックが心配な時にはgoto無しではどうにもならんし free/close等のfinalize処理が必要な場合には gotoを使うとスコープを汚すことなくシンプルに書ける
無理やり goto 使わずに書くとどうしてもインデンドが深くなる時がある 但し、上の方(後方参照?)に飛んでループを実現するのは勘弁してくれって感じかな
>>393 こうか
int main(){
int a[10][10]= {
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
};
int i, j;
i=0;
j=0;
while (a[i][j]!=0&&i<10) {
j=0;
while (a[i][j]!=0&&j<10) {
j++;
}
i++;
}
printf("%d,%d",i,j);
if (i*j==100) {
printf("含まれません");
} else {
printf("含まれます");
}
}
gotoの利点は今やネットで議論ごっこをやって無限に暇を潰せるという一点だけになってしまったな。
441 :
デフォルトの名無しさん :2011/05/06(金) 00:04:25.89
>>437 のクソコードは条件を満たしてないだろw
printf("含まれます");が実行されるのは特定の箇所が0のときだけ
1000個の異なる数の整数をランダムに出力したいのですが、 b[1000] srand(b[i])だと20種類くらいしか数字出てこないです。他は かぶったりします。 どうしたらいいでしょう?
元のコードが糞だからな
どうでもいい
>>444 srand(b[i])ってなんか変じゃね
それとも「1000個の異なる数の整数をランダム」じゃなくて「1000個の異なる乱数系列」?
>>444 for(i = 0; i < 1000; ) {
b[i] = rand();
for(j = 0; j < i; j++) if(b[i] == b[j]) break;
if(i == j) i++;
}
>>449 1000個の異なる乱数形列です。
まぁ小数なんですけど、整数でもいいです。
123128
423231
232354
534534
・
・
ランダムです。
6桁。
プログラム(JAVA)やってんだけど、 なかなか上手くいかないんだ 頑張って、どのぐらいで習得できる?
どうでもいい
456 :
デフォルトの名無しさん :2011/05/06(金) 00:24:27.77
>>442 おまえがな
一瞬よさげに見えたが対象安価のまとめ方が菅政権なみの無能
どうでもいい
>>437 whileの使い方をまだちゃんと理解してないのかな?
もっとしっかり勉強してからここに書き込みましょうね
>>449 お願いします・・
while文の中でsrand()の()の中に1000種類の違うアドレスを入れれば
いいんですよね?配列だとかぶってしまいます・・・
>>455 今のところJAVAやってる
Cも将来的にする予定
>>393 #include <stdio.h>
#include <stdbool.h>
int main(){
int array[10][10] = {
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
};
int i, j;
bool flag = false;
for (i=0;i<10&&!flag;i++)
for (j=0;j<10;j++)
if (array[i][j]==0) {
flag = true;
break;
}
if (flag) {
printf("0が含まれています");
} else {
printf("0は含まれていません");
}
return 0;
}
>>461 プログラムはまだ作ってません。
とにかく1000個のアドレス・・
どうしたら。
for(i = 0; i < 100; i++) if(((int*)array)[i] == 0) break; if(i == 100) printf("0は含まれていません"); else printf("0が含まれています"); とか for(i = 0; i < 100; i++) if(array[i / 10][i % 10] == 0) break; if(i == 100) printf("0は含まれていません"); else printf("0が含まれています"); とか
>>465 別にアドレスじゃなくても…
for (i = 1; i <= 1000; i++) {
srand(i);
// ここで rand() で好きなだけ数字を生成
}
じゃだめなの?
>>468 それで1000個全部異なっているか確かめよう
c goto しごと
A〜Dは1桁の自然数で ABACA+BAD=BDADA となっているときのA〜Dを求めるという問題をC言語で解きたいんですけど どうしたらいいですか?
>>393 もうこれでいい
#include <stdio.h>
#include <stdbool.h>
int main(){
printf("0は含まれていますん");
return 0;
}
埒があかないので、srand(&i) とにかく1000個のアドレスを取得してwhile1000回ループで 送りたいです。どうしたらいいですか? プログラムは作ってません。 srand(&i)の形式じゃないとだめです。 約束だからです。
>>471 int a,b,c,d;
a=8;
b=9;
c=2
d=0;
printf("A:B:C:D=%d:%d:%d:%d",a,b,c,d);
>>474 もうなんか支離滅裂だな
>>444 に書いてある20種類くらいしか数字出てこなかったコードを貼ってみて。
>>477 めんどくさいっす。もう手痛いんで・・
とにかくmalloc使えば1000個取得できますよね?
教えてください。本当にお手数かけます。
めんどくさいてwwww
>>479 いやぁもう何もかも面倒くさいですよw
1000個違う数字を出すだけ、それだけなんですよ^^
12323
43556
34664
・
・
・
>>478 <(´・ω・`)> 知ってるが
( (
(((( く ̄く ))))
<(´・ω・`)> お前の態度が
) )
(((( > ̄ > ))))
<(´・ω・`)> 気に入らない。
) )
(((( / ̄ > ))))
ヽ(´・ω・`)ノ フゥゥゥゥーーーーー!!!
ノ ノ
((( < ̄< ))))
>>480 はぁ?乱数系列の話じゃないの?
ワシャ、これ最後で寝るから、もう付き合いきれん
>1000個違う数字を出すだけ、それだけなんですよ^^
なら
>>450 のコードでいいやん
標準ライブラリの乱数生成の周期って普通に千以上だろ 普通にrand千回呼べばいい
>>483 >>480 さんは、ひとつの重複も無いことが保証されている1000個の数字が欲しのだそうだよ、どうやら。。。
>>478 こういうこと言いだす質問者を甘やかす奴のせいで
スレがおかしいことになるのわからないのかな
擬似乱数は、非常に大きいけれども、周期 M があって、M 回乱数を生成すると元にもどる。 つまり、 x0 -> x1 -> x2 -> ..... -> x(M - 1) -> x0 -> x1 -> ... となる。そして srand() で変えることができるのは、たかだか x0 のスタート位置であるに過ぎない。 だから、プログラムの中で何回も srand() を呼ぶことは普通はなく、プログラムの最初に一回だけでいいと思う。
>>484 であれば、rand() を呼び出したときに、その答えを記憶しておき、次に rand() を読んだ結果が前と一緒だったら、その結果を
捨てればいい。
goto使わずに多段ネストから一気に抜けたいんでしょ どうしてもって言うんだから、各ネストでフラグの設定・評価しながらbreakで順次抜ければ
人を甘やかす人は何だかんだで良い人が多い。
たんに暇なんじゃね
ここで甘やかせば社会に出ても役立たずのままだしな
for の条件式に書いておけばオケ #include <stdbool.h> ... bool b = false; for(int i = 0; i < n && !b; i++) { for(int j = 0; j < n && !b; j++) { ... flag 使うとぷりぷり怒る人がいるので注意
ここで厳しくしても社会で役に立つ人間になる可能性は限りなくゼロに近いw