トップページtech
134コメント25KB

C言語ですがfor文とwhile文って・・・。

■ このスレッドは過去ログ倉庫に格納されています
0001 NGNG
どっちがマイナーですか?
一般参考書などではfor文から記載していて学校の先生なんかも
for文から教えています。

でも俺はwhile文からfor文にした方が分かり易いんです。
みなさんどうですか?こんな俺はC歴3ヶ月です。
0002デフォルトの名無しさんNGNG
すざーーー!
0003デフォルトの名無しさんNGNG
俺はwhileから教えるのが正しい姿だと思う、
だがクソスレ立て1は氏ね。
0004デフォルトの名無しさんNGNG
マイナーかどうかってレベルの話じゃないと思う
for文の方がお約束が多くてめんどくさいのは確かだけど
歴史的なもんだと思って諦めるしか
0005デフォルトの名無しさんNGNG
どっちも使うな!
ifとgotoがあれば事は足りる。
0006デフォルトの名無しさんNGNG
>>1に質問です。
日本語の助詞の「が」と「は」はどちらがマイナーですか?
英語の前置詞の"on"と"in"はどちらがメジャーですか?
0007デフォルトの名無しさんNGNG
>>6
それはチト的外れかと
forやwhileは書き方次第で無理やり相互に(まーif、gotoでもいいけど)書き換えることが可能だが
が、は、on、inでは無理でしょ
0008デフォルトの名無しさんNGNG
ねぎとながねぎはどちらがまいなーですか???
0009デフォルトの名無しさんNGNG
俺は
for(int i = 0; i < n; i++)
以外にforを使ったことがない。
上のより複雑になる場合はwhile使う。
0010デフォルトの名無しさんNGNG
for( FooArray::iterator i = array.begin(); i< array.end(); i++ )トカ
for( char *p = strtok(str, ','); p; p = strtok(NULL, ',') )トカ
for( char *p = str; *p; p++) トカ
0011デフォルトの名無しさんNGNG
for(; hogehoge ;){
}

while(hogehoge){
}
0012デフォルトの名無しさんNGNG
for(;;) ;

int T_T=1;
while(T_T) ;
0013デフォルトの名無しさんNGNG
for()覚えればwhile()覚える必要無し
while()覚えればfor()覚える必要無し
0014デフォルトの名無しさんNGNG
>>13
ざけんなゴルァ!
0015デフォルトの名無しさんNGNG
このスレに行ってくれ。

C言語なら、俺に聞け! <19>
http://pc.2ch.net/test/read.cgi/tech/1020756993/
0016デフォルトの名無しさんNGNG
forは文法的に変。
0017デフォルトの名無しさんNGNG
>>16
非国民
0018デフォルトの名無しさんNGNG
>>1の頭にウソコぷりぷり。
0019デフォルトの名無しさんNGNG
>>16
ネタと分かりきっているが、一応聞いてやる。
何が変なんだ?
0020デフォルトの名無しさんNGNG
for(;;)
  ↑丸括弧の中に;が入ってるのが変

といってみる。
0021デフォルトの名無しさんNGNG
>>20
だよなぁ。
0022デフォルトの名無しさんNGNG
>>20
forも悲しんでいるので、許してやってください。
0023デフォルトの名無しさんNGNG
>>19
for(i = 0, j = 0; i < 10; i++, j++){
}
普通一つの文はセミコロンで終わるのに、forの中ではカンマで終わる
ことがある。
この辺がキモチワルイ。
0024デフォルトの名無しさんNGNG
>>1
 どっちかなあ(笑)。

 多分、BASICやFORTRANから入った人は while がマイナーだと思う。
 おいらも当初は while を使えなかった。

 しかしそれよりも、do { } while の方がマイナーと思われるが、どうか?(^^;
0025デフォルトの名無しさんNGNG
構造的には
・goto label;
・do;while();
・while();
・for(;;);

の順番でやるのが正しいと思う、
ただfor教えちゃえば他のは適当に出来るから、便宜的にforを先に教えてるんだと思われ
0026デフォルトの名無しさんNGNG
カンマは別にforじゃなくたって使えるが。
0027デフォルトの名無しさんNGNG
n=10;
do{
}while(--n);

do{}while();大好き♪
コンパイラがプア―なときには最速!
0028棄教者 ◆witdLTi2 NGNG
while( 式 ) ステートメント
for( ; 式 ; ) ステートメント
上と下は同じ動作をする?
0029デフォルトの名無しさんNGNG
Cのfor文は最高だろ。
>>16みたいなマヌケは一生for文使わんでよし。
0030デフォルトの名無しさんNGNG
>23
C系言語の式について勉強しなおすべき。

>28
同じ
0031デフォルトの名無しさんNGNG
for(i=0;i<10;++i){};
の後にiを参照したいときって頭こんがらかりません?
0032デフォルトの名無しさんNGNG
Delphiも使うのでループ終了後にそのままループカウンタを使わなくなった。
0033デフォルトの名無しさんNGNG
やっぱそうなるとwhileだよね。
0034デフォルトの名無しさんNGNG
全部使えるようになれよ。
0035 ◆dh.Xm/EI NGNG
>>34
思わずワラタ
0036棄教者 ◆witdLTi2 NGNG
>>1
どんなときもどんなときもfor,while,do-whileを使わないでgotoでハックし続けたら
あなたのことを神と呼びます。
0037棄教者 ◆witdLTi2 NGNG
やべ。くそスレageちゃった。ごめそ。
0038デフォルトの名無しさんNGNG
そもそも>>1は何が知りたいんだろう。
マイナーだったら使わない気なのだろうか。
0039デフォルトの名無しさんNGNG
>>37
ageるにしろsageるにしろ
お前の書き込みが面白かったことって一度もないよ。
0040デフォルトの七資産 ◆N88lfDGw NGNG
BASICかPascalあたりで勉強すれば自明であryoe?
Cはforが強力すぎるし。
0041デフォルトの名無しさんNGNG
>>1はCやってんだから初めからCで覚えろよ
0042デフォルトの名無しさんNGNG
>>41
いきなりCなんて・・・せっかちさん(はぁと)
0043デフォルトの名無しさんNGNG
最初はアセンブラからっすね。(素人道程)
0044デフォルトの名無しさんNGNG
涙の無限ループ

for(;;);

int T_T = 1;
while(T_T);
0045デフォルトの名無しさんNGNG
while があれば for はいらない
0046デフォルトの名無しさんNGNG
ifとgotoがあれば何もいらない。
0047デフォルトの名無しさんNGNG
>>46
if ififififif

goto if gotoifgotogoto


確かに、ifとgotoで2つの状態を表せるからコンピュータで扱える情報はすべて扱えるな。
逆に、これ以上の符号は無駄であると。なるほど。理にかなっている。

でも、これでプログラムを書けないことはないが死ぬほど非効率的。
0048デフォルトの名無しさんNGNG
今、For i=1 To 10 Step 2 とかやってる漏れは逝ってよしですか?
0049棄教者 ◆witdLTi2 NGNG
>>48
ifとgotoを使って

10 i = 1
30   ....
40   i = i + 2
50 if( i <= 10 ) 後藤 10
0050デフォルトの名無しさんNGNG
mov EAX,1
add EAX,2
cmp EAX,10
jle 後藤さん
0051デフォルトの名無しさんNGNG
#define _ true
for(;_;)printf("うわーん\n");
0052goto嫌いNGNG
...
0053デフォルトの名無しさんNGNG
>>52
基本的にはそのスタンスで問題ない。
0054デフォルトの名無しさんNGNG
>>1
k&rの本(Cを作った奴の本)だと、whileから教えてる。
で、for を教えて、for は while でも実現できるよー。
って教えてる。forの方がwhileでやるよりエレガントに間違いが
少なく書けるみたいな感じで。
forは実際、whileのfor形を良く使うから for として定義したっぽい経緯がうかがえる。
0055デフォルトの名無しさんNGNG
goto大好き。longjmpはもっと好き。
0056デフォルトの名無しさんNGNG
>>55
あんた、遠足に酢昆布とか梅干しとか大量に持っていった口だろ?
0057デフォルトの名無しさんNGNG
Cでgoto使わないでまともなプログラムがかけるの?
0058デフォルトの名無しさんNGNG
>>57
>まともな
主観。
0059デフォルトの名無しさんNGNG
goto嫌う人って何百行もある関数を書いちゃう人?
0060デフォルトの名無しさんNGNG
>>57
try...catch() はどうよ?
0061デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/linux/1025448524/
linux板住人との戦争がはじまったYO
0062デフォルトの名無しさんNGNG
>>60
なにそれ?
0063デフォルトの名無しさんNGNG
>>57
まじっすか、>>60もいまいちよく分からんし。

>>59
んじゃ、君はgoto使わないとまともに書けないのかと(略)
006460NGNG
>>62-63
構造化例外処理じゃ
006562NGNG
>>64
なんの言語だよ!!
0066デフォルトの名無しさんNGNG
>>63
Cで例外時に敢えてgoto使うのは常套手段だろ。
0067デフォルトの名無しさんNGNG
Cになかったっけ?
もしかC++だけかも...スンマソ
0068デフォルトの名無しさんNGNG
>>67
Cって良くも悪くもそんなに高級じゃない。
0069デフォルトの名無しさんNGNG
入れ子ループから一気に抜けるときはフラッグ立てるよりもgoto使った方がわかりやすいよね?
0070デフォルトの名無しさんNGNG
>>69
それ以外に利用例を聞かないな。

いっそallbreakみたいなのを作れば良かったね。
0071デフォルトの名無しさんNGNG
寧ろ、goto文の使い方いまいち分からないぐらいが幸せだと思います。
これ俺だけど
0072名無しさん@カラアゲうまうまNGNG
>>70
途中まで抜けたいときに困るだろう。
どっちかといえばPerlみたいにブロックにラベルをつけるとか。
0073デフォルトの名無しさんNGNG
try...catch()はコストがかかるからassertでお願いします。
0074デフォルトの名無しさんNGNG
gotoを使ってエラー処理を後ろにまわして、関数の大部分に正常処理だけを書いていく
というスタイルを見たときは感動とともに目から鱗が落ちた。

0075デフォルトの名無しさんNGNG
入れ湖ループを一気にbreakさせたいなんて
そんなないと思うんだけど…。
0076デフォルトの名無しさんNGNG
>>74
じゃあ例外見たときは万々歳でしょ。
ONERRORGOTOの欠点がすべて解消されてて。
0077デフォルトの名無しさんNGNG
>>75
ある。
0078デフォルトの名無しさんNGNG
>>72
FF風にw

breakga(3);
ループ3つ抜ける。

みたいなw
0079デフォルトの名無しさんNGNG
whileってどういう時に使う?forで事足りないか?
0080デフォルトの名無しさんNGNG
gotoよりはthrowの方がsafetyなんだよなぁ
C++限定だけど。
0081デフォルトの名無しさんNGNG
>>78
やだ。名前の方がわかりやすい。
008274NGNG
>76
いや、(C++の)例外は知ってたけど使い方とかいまいちぴんとこなかった時に
>>74のコード見て悟った。

あ、もちろんgotoと例外の違いは理解してるよ。
0083名無しさん@カラアゲうまうまNGNG
>>78
ネスト数えんのはイヤ。
0084デフォルトの名無しさんNGNG
完全に>>1がおいてけぼりです
0085デフォルトの名無しさんNGNG
>>79
後置評価。
0086デフォルトの名無しさんNGNG
処理系依存のTRYとかならある。
0087デフォルトの名無しさんNGNG
gotoでエラー処理ってVBの書き方だね。
C++に慣れてる漏れには非常に違和感を覚えるよ
0088デフォルトの名無しさんNGNG
>>79
while(File.read())
{
}

for(;File.read();)
{
}

にすりゃ言いじゃんって言うのはナンセンスかと。
0089デフォルトの名無しさんNGNG
>>85
do{}while();?
0090デフォルトの名無しさんNGNG
void foo(void) {
  try{
   hoge();
  } catch(const char* s) {
   printf(s);
  }
}

void hoge(void) {
  throw "エラーだゴルァ!!!";
}
0091デフォルトの名無しさんNGNG
goto文なんてBASICでしか使わないよ。
0092デフォルトの名無しさんNGNG
>>91
アセンブラは?大抵JUMPっていうけど。
0093デフォルトの名無しさんNGNG
>>88
ナンセンスになっちゃうかー(w
0094デフォルトの名無しさんNGNG
>91
自分に使う能力が無いとはっきり言えよ。
0095デフォルトの名無しさんNGNG
後藤はつかわなくてよろしい。
0096デフォルトの名無しさんNGNG
舞台がC言語のことなら・・・スレじゃなくてよかった。
0097デフォルトの名無しさんNGNG
for(;File.read();)
{
}

こんなの書く人は変人だな
0098デフォルトの名無しさんNGNG
例えば1つのプログラムの中にエラーを検知する部分が何箇所かあって
そのエラー時には全て同じ処理をする場合どうする?

1.同じ処理を書く
2.関数にする
3.gotoを使う
4.質問が良くわかりませんがなにか?
0099デフォルトの名無しさんNGNG
2
0100デフォルトの名無しさんNGNG
>>97
同様に
i=0;
while(i<10){
/* なにかやる */
i++;
}
もな。場合によってうまく書ける方を使えばよいとおもう。
0101デフォルトの名無しさんNGNG
C++なら

for(int i = 0;i < 10;i++)

がデキルのは十分メリットだと胸を張って言えるけどね。
0102デフォルトの名無しさんNGNG
>>98
フラグ立てる。
0103デフォルトの名無しさんNGNG
>>100
>場合によってうまく書ける方を使えばよいとおもう。
それを逝ったらイカンザキ
0104デフォルトの名無しさんNGNG
>>98
5,質問の意味はわかるが低能な俺には解決法が思い浮かばない。
0105デフォルトの名無しさんNGNG
>>98
C言語だと仮定して。
関数内で確保したリソースの開放なんかを考えると、3.が楽でいいと思うがどうか?

C++だとデストラクタに任せられるけどな。
0106デフォルトの名無しさんNGNG
>>98
プログラムってことは様々な関数の中に同じエラー処理をするべき検知場所があるんだよね?
0107デフォルトの名無しさんNGNG
>>101
Cじゃできなかったのか…変数宣言は最初だもんな…
つーかVCが標準に準処してないから(正確には違う)

{for(int c; c < 10; c++){
}}
とか書くけどどうよ。
0108デフォルトの名無しさんNGNG
>>106
いや一つの関数限定&C限定。
0109デフォルトの名無しさんNGNG
>>108
じゃあgoto。
0110デフォルトの名無しさんNGNG
>>107
ブロックの最初だっけ?
って言うかあのint iのスコープはforのブロック内でいいの?
0111デフォルトの名無しさんNGNG
エラー地返してシランプリ
0112デフォルトの名無しさんNGNG
>>107
{int c;
for(c = ?;c < 10;c++){
...
}
}
でないかい?
0113デフォルトの名無しさんNGNG
>>98
何箇所(3箇所以上)かあって、
そのブロックが十行以上なら、多分俺は関数にする。
0114デフォルトの名無しさんNGNG
>>112
いや、漏れC++厨だから、Cに準処させない(藁
pascalみたいな構文ならともかくな〜
0115デフォルトの名無しさんNGNG
じゃあlongjmpで決まりだな
0116デフォルトの名無しさんNGNG
>>115
setjmpが面倒。jmp_bufを広域変数にしないといけないし(関数の引数にするとか言うなよ)・・
0117デフォルトの名無しさんNGNG
int foo(x,y,z)
int x;
int y;
char *z;
{...}
萌え〜
0118デフォルトの名無しさんNGNG
>>117
最近のコンパイラではとおらない罠
0119デフォルトの名無しさんNGNG
>>117 前時代的
0120117NGNG
A80(不治痛)のUNIXにはこうするしかなかった...
0121デフォルトの名無しさんNGNG
>>120
あんたも不治痛と書くのか。奇遇だな。
0122117NGNG
>>121
仕様書にはまさか書けないけどね...
0123名無しさん@カラアゲうまうまNGNG
>>118
通るだろ、Cコンパイラなら。
0124デフォルトの名無しさんNGNG
腐痔痛
0125デフォルトの名無しさんNGNG
>>123
gccでこけました
0126名無しさん@カラアゲうまうまNGNG
バージョンは? C++としてコンパイルしてるわけじゃないよな、もちろん。
0127デフォルトの名無しさんNGNG
>125
何もせずに通ったが。ちなみに2.96
0128デフォルトの名無しさんNGNG
K&RスタイルがこけたらANSI非準拠。
0129デフォルトの名無しさんNGNG
エラーじゃなくて警告じゃない?
0130デフォルトの名無しさんNGNG
>129
-Wall で何も出なかったよん。
-ansi -pedantic -Wall でも何もなし。
0131lisp名無しさんNGNG
(λ (for とか while とかってプププ。
(男は再帰だろ。))

0132デフォルトの名無しさんNGNG
>>131
はっきり言ってスタック浪費のコストを考えるとバカらしい。
0133名無しさん@カラアゲうまうまNGNG
>>131
閉じてない
0134lisp名無しさんNGNG
;;>>132
(read-this 'http://www.shiro.dreamhost.com/scheme/docs/tailcall-j.html)

;;>>131
(sumaso)
)
■ このスレッドは過去ログ倉庫に格納されています