C言語なら俺に聞け(入門編)Part 83

このエントリーをはてなブックマークに追加
393デフォルトの名無しさん
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文がいくつもネストしている場合に
ネストから抜けるようにしたいです
394デフォルトの名無しさん:2011/05/05(木) 20:50:25.63
>>390
クラス宣言してメソッドを書くってのは知ってるけど、
>>387のはそうじゃないでしょ。

まあ、いつものごとく、隙あらば揚げ足を取りたいひとが
わかってて釣ってるんだろうけど。
395デフォルトの名無しさん:2011/05/05(木) 20:53:43.88
>>1
>★C++言語については避けてください。C++対応明記スレへどうぞ
396デフォルトの名無しさん:2011/05/05(木) 20:54:17.12
http://codepad.org/J38vNxq1
http://codepad.org/x63n9HhE

途中でエラーが起こって書き込んだファイルがうまく読み込めないんですが
なぜでしょうか?
397デフォルトの名無しさん:2011/05/05(木) 20:55:07.02
>>396
codepadだからだろ
398396:2011/05/05(木) 20:59:07.83
>>397
borlandで実行すると、書き込みはできるんですが
読み込みをするとバグが起きるんですが・・・・。
399388:2011/05/05(木) 21:01:39.86
>>389
>>394
ラムダ(匿名"関数")のことね

400デフォルトの名無しさん:2011/05/05(木) 21:02:16.68
feofの使い方が間違ってる気がする
401400:2011/05/05(木) 21:02:38.78
動かない件とは関係ないだろうが
402デフォルトの名無しさん:2011/05/05(木) 21:06:50.71
>>387
pascal
403デフォルトの名無しさん:2011/05/05(木) 21:07:49.21
>>393
まるっと関数にしちゃえば?そんでreturn使えば?
404 ◆/91kCCQXBo :2011/05/05(木) 21:15:32.90
>>397
だから、あんなに口をすっぱくして言ったのに…変数の初期化を忘れたとは…トホホのホ。
405デフォルトの名無しさん:2011/05/05(木) 21:18:00.87
どうでもいい
406デフォルトの名無しさん:2011/05/05(木) 21:25:27.49
>>393
書き方が入門者ぽくない
1行だからってちゃんと{}を使いなさい
407デフォルトの名無しさん:2011/05/05(木) 21:43:31.39
>>403
>>406
わかりました
408デフォルトの名無しさん:2011/05/05(木) 21:48:55.71
>>407
は?わかりましたじゃねーんだよ
goto使うなボケ
409デフォルトの名無しさん:2011/05/05(木) 21:59:49.48
>>408
死ね
410デフォルトの名無しさん:2011/05/05(木) 22:06:28.11
>>409
溺死しろ
411デフォルトの名無しさん:2011/05/05(木) 22:07:31.29
>>393
素直に goto を使え。
412デフォルトの名無しさん:2011/05/05(木) 22:07:57.24
goto使わずに書きなおしてみました!
これでどうでしょうか!

http://codepad.org/0E61BTOd
413デフォルトの名無しさん:2011/05/05(木) 22:09:02.35
>>411
圧死しろ
414デフォルトの名無しさん:2011/05/05(木) 22:09:37.25
goto使うの?マジで?
415デフォルトの名無しさん:2011/05/05(木) 22:10:38.85
多重ループからの脱出はgoto使うのが1番スマートでしょ
416デフォルトの名無しさん:2011/05/05(木) 22:12:35.27
>>412
>printf("0は含ませません\n");

これ何回実行されますか?
417デフォルトの名無しさん:2011/05/05(木) 22:13:59.17
多重ループでのエラー処理はgotoで一箇所にまとめた方がいいよ
goto何でもかんでもダメダメ教信者は時代遅れ
418デフォルトの名無しさん:2011/05/05(木) 22:16:11.49
>>415
>>417
焼死しろ
419デフォルトの名無しさん:2011/05/05(木) 22:19:53.83
>>416
コード読めないんだったら、実行すればいいのに
420デフォルトの名無しさん:2011/05/05(木) 22:19:57.91
>>416
どう見ても1回だけどどうしたの?
421デフォルトの名無しさん:2011/05/05(木) 22:21:19.37
if (array[i][j]==0)
goto err;
else;
/*含まれていない場合の処理*/
printf("0は含ませません");
422デフォルトの名無しさん:2011/05/05(木) 22:21:56.87
セミコロンがあるんだw
423デフォルトの名無しさん:2011/05/05(木) 22:24:41.88
>>415
>>417
ほとんどの場合がループ抜けたすぐ直下にラベル置くしな
一種の構文みたいなもんだな
424デフォルトの名無しさん:2011/05/05(木) 22:30:29.46
On Error GoToは便利
425デフォルトの名無しさん:2011/05/05(木) 22:30:44.81
ほっほっ
426デフォルトの名無しさん:2011/05/05(木) 22:31:44.29
>>423
>>424
爆死しろ
427デフォルトの名無しさん:2011/05/05(木) 22:35:28.34
>>416=>>421はめくら
428デフォルトの名無しさん:2011/05/05(木) 22:39:44.71
>>427
悪かった.勘弁しろよ
429デフォルトの名無しさん:2011/05/05(木) 22:41:45.73
gotoダメダメ教の人はsetjmpのほうがまだいいの?
430デフォルトの名無しさん:2011/05/05(木) 22:44:54.66
局所脱出はgotoみたいなもんでしょ
431デフォルトの名無しさん:2011/05/05(木) 22:45:06.38
setjmpが何か理解できてないから文句をつけない
gotoは最初に使うなって習うからそこで思考停止してる
432デフォルトの名無しさん:2011/05/05(木) 22:54:51.07
オレが働いてるような底辺ITドカタの現場だとgotoは使えない。
レベルの高い人の書いたコードをみるとけっこう使ってる。
433デフォルトの名無しさん:2011/05/05(木) 22:59:05.10
書き捨てのコードだったら goto 使う
そうじゃなかったら、goto 版と関数を分けて return する版を両方書いてみて良い方を採用
434デフォルトの名無しさん:2011/05/05(木) 23:00:18.00
goto 使わないと余計なフラグ設定と判断を入れないとダメなときがある
スレチだけど python ってだから嫌い
435デフォルトの名無しさん:2011/05/05(木) 23:05:02.37
393みたいのはどうかこうが大差ない
再帰でスタックが心配な時にはgoto無しではどうにもならんし
free/close等のfinalize処理が必要な場合には
gotoを使うとスコープを汚すことなくシンプルに書ける
436デフォルトの名無しさん:2011/05/05(木) 23:08:10.25
無理やり goto 使わずに書くとどうしてもインデンドが深くなる時がある
但し、上の方(後方参照?)に飛んでループを実現するのは勘弁してくれって感じかな
437デフォルトの名無しさん:2011/05/05(木) 23:36:43.84
>>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("含まれます");
}
}
438デフォルトの名無しさん:2011/05/05(木) 23:38:57.31
>>437
gotoのほうが100倍読みやすいな
439デフォルトの名無しさん:2011/05/05(木) 23:41:50.72
gotoの利点は今やネットで議論ごっこをやって無限に暇を潰せるという一点だけになってしまったな。
440デフォルトの名無しさん:2011/05/05(木) 23:49:36.68
>>437
実行してみろw
441デフォルトの名無しさん:2011/05/06(金) 00:04:25.89
>>439
ということにしたいのですね
442デフォルトの名無しさん:2011/05/06(金) 00:05:04.18
443デフォルトの名無しさん:2011/05/06(金) 00:09:21.70
>>437のクソコードは条件を満たしてないだろw
printf("含まれます");が実行されるのは特定の箇所が0のときだけ
444デフォルトの名無しさん:2011/05/06(金) 00:12:18.19
1000個の異なる数の整数をランダムに出力したいのですが、
b[1000]
srand(b[i])だと20種類くらいしか数字出てこないです。他は
かぶったりします。
どうしたらいいでしょう?
445デフォルトの名無しさん:2011/05/06(金) 00:13:42.72
元のコードが糞だからな
446デフォルトの名無しさん:2011/05/06(金) 00:14:49.56
>>444
死ねタコ
447デフォルトの名無しさん:2011/05/06(金) 00:14:51.19
どうでもいい
448デフォルトの名無しさん:2011/05/06(金) 00:15:59.83
>>444
srand は一回だけ呼べばいい
449デフォルトの名無しさん:2011/05/06(金) 00:16:25.00
>>444
srand(b[i])ってなんか変じゃね
それとも「1000個の異なる数の整数をランダム」じゃなくて「1000個の異なる乱数系列」?
450デフォルトの名無しさん:2011/05/06(金) 00:16:56.85
>>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++;
}
451デフォルトの名無しさん:2011/05/06(金) 00:18:20.17
>>449
1000個の異なる乱数形列です。

まぁ小数なんですけど、整数でもいいです。


123128
423231
232354
534534



ランダムです。
6桁。
452デフォルトの名無しさん:2011/05/06(金) 00:21:37.74
プログラム(JAVA)やってんだけど、
なかなか上手くいかないんだ
頑張って、どのぐらいで習得できる?
453デフォルトの名無しさん:2011/05/06(金) 00:22:28.75
>>437=>>445
赤っ恥だね
454デフォルトの名無しさん:2011/05/06(金) 00:22:44.76
どうでもいい
455デフォルトの名無しさん:2011/05/06(金) 00:23:24.03
>>452
JAVA?C?
456デフォルトの名無しさん:2011/05/06(金) 00:24:27.77
>>442
おまえがな
一瞬よさげに見えたが対象安価のまとめ方が菅政権なみの無能
457デフォルトの名無しさん:2011/05/06(金) 00:26:11.59
どうでもいい
458デフォルトの名無しさん:2011/05/06(金) 00:26:59.80
>>437
whileの使い方をまだちゃんと理解してないのかな?
もっとしっかり勉強してからここに書き込みましょうね
459デフォルトの名無しさん:2011/05/06(金) 00:28:24.53
>>449
お願いします・・

while文の中でsrand()の()の中に1000種類の違うアドレスを入れれば
いいんですよね?配列だとかぶってしまいます・・・
460デフォルトの名無しさん:2011/05/06(金) 00:32:06.36
>>455
今のところJAVAやってる
Cも将来的にする予定
461デフォルトの名無しさん:2011/05/06(金) 00:33:31.97
>>459
ホントに >>444 == >>451 == >>449
冗談で「1000個の異なる乱数形列」って書いたんたんだけど、マジレスされると返す言葉がない…
取り敢えず http://codepad.org/ にソース貼ってみ
462デフォルトの名無しさん:2011/05/06(金) 00:34:14.56
>>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;
}
463デフォルトの名無しさん:2011/05/06(金) 00:34:30.92
>>444 == >>451 == >>449 じゃなくて >>444 == >>451 == >>459 だった orz
464デフォルトの名無しさん:2011/05/06(金) 00:35:49.79
>>462
典型的な >>434 ですね
465デフォルトの名無しさん:2011/05/06(金) 00:40:28.52
>>461
プログラムはまだ作ってません。

とにかく1000個のアドレス・・
どうしたら。
466デフォルトの名無しさん:2011/05/06(金) 00:41:38.71
>>465
アドレスってなんだ?
467デフォルトの名無しさん:2011/05/06(金) 00:42:37.07
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が含まれています");

とか
468デフォルトの名無しさん:2011/05/06(金) 00:48:50.42
>>465
別にアドレスじゃなくても…

for (i = 1; i <= 1000; i++) {
srand(i);
// ここで rand() で好きなだけ数字を生成
}

じゃだめなの?
469デフォルトの名無しさん:2011/05/06(金) 00:49:59.20
>>468
それで1000個全部異なっているか確かめよう
470デフォルトの名無しさん:2011/05/06(金) 00:50:21.85
c goto
しごと
471デフォルトの名無しさん:2011/05/06(金) 01:02:14.46
A〜Dは1桁の自然数で
ABACA+BAD=BDADA
となっているときのA〜Dを求めるという問題をC言語で解きたいんですけど
どうしたらいいですか?
472デフォルトの名無しさん:2011/05/06(金) 01:03:10.09
>>471
覆面算でググる
473デフォルトの名無しさん:2011/05/06(金) 01:03:58.72
>>393
もうこれでいい
#include <stdio.h>
#include <stdbool.h>

int main(){
printf("0は含まれていますん");
return 0;
}
474デフォルトの名無しさん:2011/05/06(金) 01:05:31.84
埒があかないので、srand(&i)

とにかく1000個のアドレスを取得してwhile1000回ループで
送りたいです。どうしたらいいですか?
プログラムは作ってません。
srand(&i)の形式じゃないとだめです。
約束だからです。
475デフォルトの名無しさん:2011/05/06(金) 01:07:21.47
>>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);
476デフォルトの名無しさん:2011/05/06(金) 01:09:23.08
>>472>>475
ありがとうございます
たすかりました
477デフォルトの名無しさん:2011/05/06(金) 01:09:45.24
>>474
もうなんか支離滅裂だな

>>444に書いてある20種類くらいしか数字出てこなかったコードを貼ってみて。
478デフォルトの名無しさん:2011/05/06(金) 01:11:40.10
>>477
めんどくさいっす。もう手痛いんで・・

とにかくmalloc使えば1000個取得できますよね?
教えてください。本当にお手数かけます。
479デフォルトの名無しさん:2011/05/06(金) 01:13:17.32
めんどくさいてwwww
480デフォルトの名無しさん:2011/05/06(金) 01:17:17.09
>>479
いやぁもう何もかも面倒くさいですよw

1000個違う数字を出すだけ、それだけなんですよ^^

12323
43556
34664



481デフォルトの名無しさん:2011/05/06(金) 01:17:48.28
>>478
  <(´・ω・`)> 知ってるが
   (  (
(((( く ̄く ))))

  <(´・ω・`)> お前の態度が
    )  )
((((  > ̄ > ))))

  <(´・ω・`)> 気に入らない。
    )  )
(((( / ̄ > ))))

  ヽ(´・ω・`)ノ  フゥゥゥゥーーーーー!!!
   ノ ノ
((( < ̄< ))))
482デフォルトの名無しさん:2011/05/06(金) 01:22:43.01
>>480
はぁ?乱数系列の話じゃないの?
ワシャ、これ最後で寝るから、もう付き合いきれん

>1000個違う数字を出すだけ、それだけなんですよ^^
なら >>450 のコードでいいやん

483デフォルトの名無しさん:2011/05/06(金) 01:27:58.02
標準ライブラリの乱数生成の周期って普通に千以上だろ
普通にrand千回呼べばいい
484デフォルトの名無しさん:2011/05/06(金) 01:31:02.09
>>483
>>480さんは、ひとつの重複も無いことが保証されている1000個の数字が欲しのだそうだよ、どうやら。。。
485デフォルトの名無しさん:2011/05/06(金) 01:32:07.16
>>478こういうこと言いだす質問者を甘やかす奴のせいで
スレがおかしいことになるのわからないのかな
486デフォルトの名無しさん:2011/05/06(金) 01:37:41.75
擬似乱数は、非常に大きいけれども、周期 M があって、M 回乱数を生成すると元にもどる。
つまり、 x0 -> x1 -> x2 -> ..... -> x(M - 1) -> x0 -> x1 -> ...
となる。そして srand() で変えることができるのは、たかだか x0 のスタート位置であるに過ぎない。
だから、プログラムの中で何回も srand() を呼ぶことは普通はなく、プログラムの最初に一回だけでいいと思う。
487デフォルトの名無しさん:2011/05/06(金) 01:39:01.29
>>484
であれば、rand() を呼び出したときに、その答えを記憶しておき、次に rand() を読んだ結果が前と一緒だったら、その結果を
捨てればいい。
488デフォルトの名無しさん:2011/05/06(金) 01:41:01.02
>>393 は、どうしたいのか?
489デフォルトの名無しさん:2011/05/06(金) 01:45:20.06
goto使わずに多段ネストから一気に抜けたいんでしょ
どうしてもって言うんだから、各ネストでフラグの設定・評価しながらbreakで順次抜ければ
490デフォルトの名無しさん:2011/05/06(金) 01:51:20.27
人を甘やかす人は何だかんだで良い人が多い。
491デフォルトの名無しさん:2011/05/06(金) 01:53:04.35
たんに暇なんじゃね
492デフォルトの名無しさん:2011/05/06(金) 01:54:01.84
ここで甘やかせば社会に出ても役立たずのままだしな
493デフォルトの名無しさん:2011/05/06(金) 01:54:15.52
for の条件式に書いておけばオケ

#include <stdbool.h>
...
bool b = false;
for(int i = 0; i < n && !b; i++) {
for(int j = 0; j < n && !b; j++) {
...

flag 使うとぷりぷり怒る人がいるので注意
494デフォルトの名無しさん:2011/05/06(金) 01:59:48.77
ここで厳しくしても社会で役に立つ人間になる可能性は限りなくゼロに近いw