char *c[44] = {"C言語のことは漏れに聞け!"};
1 :
デフォルトの名無しさん :
02/11/20 21:47
5 :
デフォルトの名無しさん :02/11/20 21:49
い つ に な っ た ら C 9 9 完 全 準 拠 の 処 理 系 が 出 る ん だ ?
6 :
デフォルトの名無しさん :02/11/20 21:51
strcpy(*c, "乙カレー!");
8 :
manko_chinko ◆GLc2rpKRNM :02/11/20 21:57
.NET Framework SDKってC/C++対応してるのか?
タイトルつまんね。
>10 csc.exe, vbc.exe, jsc.exeしか見当たらないけど。 コンパイラのファイル名は?
割れ氏ね
フリーなのに割れるのか
分割コンパイルしないヤシ氏ね
#include "mylib.c" #include "mylib2.c"
#incude"コピー 〜 stdio.h"
#incude"stdio.h へのショートカット"
保守sage
cu??
age
保守sage
25 :
デフォルトの名無しさん :02/11/21 07:35
何事にも必死になれないおまえらよりはましだ。
#include "hspext.as"
gcc 2.95.4 on linux /* 簡単の為エラーチェックは無し */ #include <stdio.h> #include <dirent.h> #include <sys/types.h> int main(void) { char *path = "hoge"; DIR *dir = opendir(path); struct dirent *dp; while ((dp = readdir(dir))) { /* directory type to inode file */ printf("%u,%s\n", DTTOIF(dp->d_type), dp->d_name); } closedir(dir); return 0; } 上記のプログラムでファイルがディレクトリかどうかの区別ができるようなんだけど、 DTTOIF(dp->d_type)の値が全て0になってしまいます。 理由が分かる人がいたら教えて貰えたら嬉しいです。 因みにstat(2)を使ってst_modeを取得するとちゃんと判別してくれます。 環境依存なのでsage。
>>27 BUGS
Field d_type is not implemented as of libc6 2.1 and will
always return DT_UNKNOWN (0).
>>27 struct direntで保証されてるのはdp->d_name[NAME_MAX]だけです。
他に有用な情報が返ってくるという保証は無いdeath。
>>28 ,29
ありがとう御座います。
ここら辺は実装にかなり違いがあるようですね。
λ...... ここ変だよ・・ λ...... λ...... λ...... λ...... 失敗だったネ… λ...... λ...... λ...... λ...... 逃げていく… λ...... λ...... λ...... λ...... λ...... λ...... みんな逃げていく… λ...... ここ変だよ・・ λ...... λ...... λ...... λ...... 失敗だったネ… λ...... λ...... λ...... λ...... 逃げていく… λ...... λ...... λ...... λ...... λ...... λ...... みんな逃げていく…
32 :
デフォルトの名無しさん :02/11/21 17:51
C言語でベーシックの「CLS」のような命令は使えますか?
>>32 int i=10000;
while(i--) putchar('\n');
>>32 ありません。
CLS の機能は 「画面の全ての文字をを消去してカーソルをホームに戻す」 ですが、
C ではそもそも 「画面」 が定義されていません。
処理系依存なので、使っているコンパイラ等に頼る事になります。
ちなみに、33 の方法では 「画面の全ての文字をを消去」 を果たす事ができますが、
「カーソルをホームに戻す」 の標準的な方法はありません。
>>34 処理系依存じゃない方法もあるじゃん。
環境依存にはなるけど。
ちなみに、ANSI.SYS が動いてれば printf("\x1b[2J") で逝ける。
ansi.sys
この前から気になってたんだけどさ、 「ansi.sys」 ってなに? 何処で手にはいるの?
M$-DOSスレに逝け
putcharを無理して使う必要ってある? printfよりいいとこあるとか・・・ 例えば、ループで配列をどんどん画面に出力して、最後に改行したいってときに putchar使うのはよくあることでつか?
>>40 putchar( '\n' );
ですむとこを無理して
printf( "\n" );
にすることも無いよね
今の時代にはあわないかもしれんが、printfで""の中身を解析するのに時間かかった時代もあった putcharとかだと、解析の手間はないですよね。
質問してきた。
46 :
デフォルトの名無しさん :02/11/21 19:21
>>40 '\n' とかの定数だったら printf() に直せるけど、変数だったら putchar(c); で
済むところを printf("%c", c); って書かなきゃ逝けないだろ。
実際に printf() と putchar() と同じものを (出力は fwrite(stdout) を使って)
書いてみろ。
printf() がどれだけ無駄かがわかる。
>>43 (゚Д゚)ハァ?
printf() のコストが高いのは今も変わりませんが何か?
DR-DOSでもぐぐりなされ>38
改行だけなら俺はputs("");とやる。
49 :
デフォルトの名無しさん :02/11/21 19:31
register int i=100000; while(i--) putchar('a'); とやるよりも register int i=10000; while(i--) fputs("aaaaaaaaaa",stdout); とやった方が遙かに速い?
「時間がかかった」てのはマシンスペックのことでないか。
51 :
デフォルトの名無しさん :02/11/21 19:34
>>49 どうせなら fwrite() にしとけ。
52 :
デフォルトの名無しさん :02/11/21 19:52
>>51 fwriteの方が速いの?
例のlongバイトごとに処理するってやつ?
>>46 そんな使い方があったね。getchatとputcharってやっぱ一緒につかいませう。
さんくすべりべり。
>>52 memcpyと混同してない?
バッファ使わないからむしろ遅くなったりしないかな?>fwrite
そこまでくると処理系依存というオチですか?
>>53 getchat は解せんな
揚げ足取りゴメソ
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
(ω・ )ゝ < なんだって?
>>57 . ノ/ / \_______
ノ ̄ゝ
>>49 putchar()とputc()は「出力のバッファに空きがあったらそこに書き込む。
バッファがいっぱいになったらバッファを書き出す関数を呼ぶ」というマクロに
なってる場合が多いけど、fputs()は毎回普通に関数を呼ぶことになる。
だから「遥かに速い」というほどの違いはないかも。
はいはい、おれが悪かった。 謝りゃいーんだろ?謝りゃ? ごめんごめんでごめりんこ おしりペンペンボールペン
しかしCが出てもう30年も経とうというのに 未だにこんな低レベルな話題で盛り上がれるとはね。
>>60 > バッファがいっぱいになったらバッファを書き出す関数を呼ぶ」という
> マクロになってる場合が多いけど
昔はマクロの方が多かったけど、最近はスレッドセーフに対応せねば
ならんので、マクロになっていことの方が多いけどな
Cが出来てからは長く時がたっているが、 Cをはじめた人は後をたたない。
むしろ古い規格を引きずってるのが混乱の元と思われ。
>>62 いまだに大学で教えるプログラミングはCからだよ。
うちの学校じゃ2年になったらJavaやC++もやるけど、
大抵の学部だったらCのみだもん。
じじいは早くしんでくれや
>>64 なるほど。スレッド対応のことをすっかり忘れてたよ。
昔の常識は今の非常識か。
え”、大学って自分で勉強するとこじゃないの?
>>67 いまだにって...うちでは以前までPascalを初めに教えてて、
Cになったのは最近なんですが.......(;´Д`)
>>67 それはお前の逝ってる三流大学のじじい教授がCしかできないからだよ。
氏ぬのはおめーらだ。
72 :
manko_chinko ◆GLc2rpKRNM :02/11/21 20:35
>>67 ばーか、Cで十分なんだよ
だいたいc++ぐらい自分で勉強しろや!
大学でC#を教えてるとこなんて、日本には存在しませんが何か? というか大学でプログラムを教える必要なんてない! システム開発と運用について学べ!
>>69 >>71 >>72 大学にいけず、苦労したバカたち。哀れでつね・・・
さてと、彼女とドライブに行こうかな。
当方大学4年で、ソフトバンクに就職きまりましたが。ごめそ
そりゃ大学の干からびたじじいがC#なんて最新のもの知っているわけないなぁ。 知っててもボケた頭じゃ覚えられんだろうて。
79 :
manko_chinko ◆GLc2rpKRNM :02/11/21 20:43
>>75 大学どころか高校入試もあぶないよコノヤロウ!!
>>77 うちの大学には1人だけ若い教授がいて、C,C++,C#,Javaとかを使えるらしい。
というか、話をきくと、ジジイどもは覚えられないから
その教授一人に押し付けたそうな・・・
かわいそう・・・。PGだったら寿命なんさいなの?
イパーイ釣れた 特に81はおつかれさん
>>80 Java ぐらいジジイでも覚えられるだろ。
単にアフォなだけ。年のせいにするな。
高円宮って誰だよっ!!
オレ
>>67 そういうところはANSI通らないコンパイラ使ってるよ
昔のlatticeとか
隣の人の友達の奥さんの子供が行っている大学の子供の父
大学の子供?
こういうのはマ板でやれ。
クソSEどもはマ板へ(・∀・)カエレ!!!
92 :
manko_chinko ◆GLc2rpKRNM :02/11/21 21:05
やはりマブナとか真鯉がいるようにマ板も何ですよ
質問させてください typede unsigned long u32; #define REG_DISPCNT *(u32*)0x4000000 とあるんですが*(u32*)0x4000000のところがどういうことなのかよくわかりません どなたか細かく教えていただけませんか?
>>94 u32型へのポインタへキャストしてデリファレンス
DQNでないCerは存在しない。
REG_DISPCNT = 1; とかにすりゃ、メモリの0x4000000番地に1が入るというネタでは?
101 :
manko_chinko ◆GLc2rpKRNM :02/11/21 21:11
>>97 あなたには日本語の行く末がわからないようですね
こんなことだから「すれ立てるまでもない質問」スレに規格論争持っていかれるんだ。 情けない。
なんでエラーになるのかちゃんと説明できる奴はおらんのか。 自己満足厨ばかりだな。
106 :
manko_chinko ◆GLc2rpKRNM :02/11/21 21:18
>>104 まぁtypedeを説明されるまで気づかない厨がいるわけだが・・・
下らんっ!!!あまりにもレベルが低すぎるっっ!!! 儂が直々に手を下すまでもないわっっっ!!!! 行けっ!!手下共っ!!!この糞スレを燃やし尽くすのだっ!!! ぐわははははははhahahaha!!!
113 :
デフォルトの名無しさん :02/11/21 22:03
>>113 そう言いながらあげてるお前は何がしたいの?
sage入れ忘れただけなのに煽られちった。 ウザッ
λ...... ここ変だよ・・ λ...... λ...... λ...... λ...... 失敗だったネ… λ...... λ...... λ...... λ...... 逃げていく… λ...... λ...... λ...... λ...... λ...... λ...... みんな逃げていく… λ...... ここ変だよ・・ λ...... λ...... λ...... λ...... 失敗だったネ… λ...... λ...... λ...... λ...... 逃げていく… λ...... λ...... λ...... λ...... λ...... λ...... みんな逃げていく…
118 :
manko_chinko ◆GLc2rpKRNM :02/11/21 22:16
>>116 そんなこと気にしなくても
sageいれろいれろと口を酸っぱくして逝ってる人は自分の愚かさに気づいてないだけです
聖書を読み直しなさい
>>118 お前が JPS よりも格下なのはよくわかったから黙ってくれ。
>>119 格下であってバカと書いていないところに謙虚さが感じられる
122 :
manko_chinko ◆GLc2rpKRNM :02/11/21 22:27
一部の偏屈によってこのスレの雰囲気もだいぶ変わりましたねぇ。 まぁ、やはり、日本での布教活動を重要視してなかった大昔のヨーロッパ人が悪いんですかねぇ。
偽者ですが何か?
こちらも偽者ですが何か?
ちなみに123のトリップは非常に簡単だから誰か騙ってみてくれ。
2ちゃんねるってよく便所の落書きって言われるけど、本当に便所に C言語がつらつらと書いてあったらと思うと夜も眠れません。
rand()って関数はどうやって乱数をだしてるの? 疑似乱数ってやつですか?
またJPSのバカがきたよ。
あ、真面目に答えてはいけない相手だったのでしょうか
>>128 少なくともお前よりはバカじゃないがな(w
132 :
manko_chinko ◆GLc2rpKRNM :02/11/21 22:34
いまアルゴリズムの本借りてきて 1〜nの乱数を返す関数ってので int irnd(int n) { return (int)(rand()/32767.1*n+1); } ってのが出てきたんだけど、これはいったいなんなのかなって・・・ 普通にrand()%n+1と一緒でないのかな・・・
>>129 新事実!!rand()の実装はコンパイラ依存!!
>>133 rand()%n + 1
だと出る値に偏りが出るらしい
そろそろコテハンを放置するくらいの気構えを持とうじゃないか。
>>135 マジっすか。てことは浮動小数点で実装?
>>130 JPSは他人の振りしてクソすれと重複スレを立てた前科があります。
>>138 くそスレの経験はありませんが、このスレの前スレを立てました
>>130 いや、ここは JPS を育てるスレだから大丈夫だ。
>>137 簡易的な乱数生成器は、下位ビットがあまりランダムでないとされている。
なので、より多くの下位ビットを拾う % よりも、より多くの上位ビットを拾う
/ が使われる。
って、C FAQ に書いてなかったか?
142 :
デフォルトの名無しさん :02/11/21 22:52
質問です。 V=0.5*a*t*t V;速度 a:加速度 t:時間(秒) この式に対応して物体が移動するプログラムを作る場合 c言語において、時間tはどのようにして表すのですか? へたくそな説明ですみませんがどなたか教えてください。お願いします
> いや、ここは JPS を育てるスレだから大丈夫だ。 いつからここはJPSを育てるスレになったんですか? バカ、氏ね。
for(t=0.0; t<10.f; t+=0.1)
for ( t = 0.0; (10-t) < epsiron; t += 0.01 )
>>147 さんきゅ。
.0なら小数点以下は書かなくてもいいのか。
>>144 >>145 大変ありがとうございました。
ここでさらに質問したいのですが
144さん
10.fのfとはなんですか?
初心者過ぎてすみません
145さん
(10-t) < epsiron
epsironとは?
>>149 fはfloatであることを示す。つけないとdouble
セーラームーン
セーラーマーズ
セーラーマーキュリー
セーラージュピター
セーラームーン世代のオッサンが混じってるな.....
コンパイラによる、、というのは正しいのでしょうか、間違ってるのでしょうか
158 :
デフォルトの名無しさん :02/11/21 23:03
セーラーヴィーナス
セーラーネプチューン
163 :
デフォルトの名無しさん :02/11/21 23:05
セーラーウラヌス
>>163 少し前の話題も覚えてないのかと.....
セーラープルート
168 :
デフォルトの名無しさん :02/11/21 23:06
すみません、もう一つだけ質問させてください for(t=0.0; t<10.f; t+=0.1) なぜt<10なのですか? またt+=0.1ということはtは0.1秒ずつ増えていくということですか? また単にtという変数を宣言してやるだけでいいのですか?
セーラーちびムーン
>>168 だったら余計にアフォだ
過去ログも読まずに脊髄反射レスするな。ヴォケが
へぇ、回答者まで過去ログ読まないといけないんだ。
174 :
デフォルトの名無しさん :02/11/21 23:08
単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対 単発質問断固反対
174が、自分がアフォぶある事をカミングアウトしました。
>>169 for(t=0.0; t<10.f; t+=0.1)
は仮の話 t=0.0 のところには t の下限値、
10. には t の上限値を入れる
つれまつた。
>>183 おい、偽物!!179はおれっだっちゅーの!
ここも FORTRAN を語るスレになりますた。 ・・・0.1 を足し続けたら誤差が出るとオモタ
typedef 過去ログ読まない 175, 176; typedef 過去ログ見て見ない振りをする 182;
>>185 ということは、私はお礼言ったのに煽られたんですか?
なんかむかつく・・・・ もうくるのやめよう。
>>191 だったら、「もう来ねぇよ ウワァァン」 の AA でも貼ったらどうだ?
191おまえもうざい
はらたいらさんがテレビに出てるんですが
198 :
デフォルトの名無しさん :02/11/21 23:19
>>140 サンクス。その言葉の意味がよくわからんが・・・
今度は142と142の偽者が荒らさーですか?
>>197 __________
/ /|
/ / |
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| |
| | │
| | │
| | │
| | │
| | │
| | │
| | /
|__________|/
腹平?
>>199 「その言葉」 がどの言葉かはっきり言えとあれほど・・・
>>197 __________
/ /|
/ / |
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| |
| | │
| | │
| | │
| T V | │
| | │
| | │
| | /
|__________|/
>>203 自分で調べてみますた。
上位ビットと下位ビットをそれぞれよく使うってとこがわからんかった。
割り算だと上位ビットをよくつかう・・・
JPS は何気にいい大学に入れそうな気がする
>>206 n が 2 で割りきれる数だと、その傾向が顕著になる。
その理由を考えてみろ。
2chにはまっているようじゃダメ
まあ、ボケ具合はともかく、ある程度向上心やら探求心やらは持ち合わせているみたいだからな。
というよりその程度でいい大学にいけるなんて評価高すぎ。
大学に入るのに探求心が必要?
なんだ大学生じゃないって分かるんだ?
× なんだ ○ なんで
みんな黙っちゃった。
>>213 現在のやつの知的レベルを見れば分かるであろう
>>208 全くわからない・・・。ヒントください。
大学生ですが何か?
>>大学生ですが何か? ガ━━(゚Д゚;)━━ソ!
>>216 現在のやつの知的レベルでいい大学には入れるのか?
掲示板への書き込みだけで決めつけるな
前言を禿しく撤回します
やっぱ 一般人>>>>>>>>>マソコチソコ>JPS か
>>217 x のビット値が 1111111100000000 の時、x % n と x / n の結果がそれぞれ
どうなるか考えればいい。
それが 「より多くの下位ビットを拾う % よりも、より多くの上位ビットを拾う」
の意味。
224 :
manko_chinko ◆GLc2rpKRNM :02/11/21 23:44
>>222 僕のIQはそんなに低くないですよ。130ぐらいでしたし。
まぁ、IQだけで人の価値は決まりませんしね。
僕はEQ(心の知能指数)のほうが大切だと思いますが。
知的レベルって、ここ見てる限りみんなも大した事なさそうだけどな(藁
あ。言い換えるとさ、上位ビットの方が周期が長いってこと?
>>224 分かったから
そ ろ そ ろ 勉 強 し ろ よ ?
>>225 いや、君は違うよ。君はとても知的レベルが高いと思う。
Cやってる奴は概してIQも学歴も低いよ
>>229 その通り。高卒はCばっかりやっている。
>>231 俺はCやってないからIQも学歴も高いよ。
ぼくちんはまだAもしたことありません。
>>223 やってみますた。
65280(10)だったから、例えばn=12だと
65280 / 12 = 5440
65280 % 12 = 0
だから
0001010101000000と
0000000000000000になりますた。
つまり下位ビットは、nを多く含んでる?
えーと、わかんない・・・
だれかJPSに参考リンクでも紹介して黙らせろよ。
下位ビットで10進でも下の桁を表してるんだよね? ってことは、あまりを求めるときは、下位ビットの値が出るってことか? 割り算だと出るのは商だから、ビットがどうとか関係ない?
>>235 何かがおかしいと気づかないか?
mod12と比較するなら12/RAND_MAXを掛ける必要があるぞ
240 :
デフォルトの名無しさん :02/11/22 00:03
ム板にはトリップいらないだろと思う今日この頃。
>>241 とにかく下位ビットは偏りが大きいんだよ!それでいいだろ?兄弟
誰も(俺も)ちゃんとした説明が出来ないことが明らかになりました。
多分実装上の問題だよ 最近の実装なら関係ないらしい The versions of rand() and srand() in the Linux C Library use the same random number generator as random() and sran- dom(), so the lower-order bits should be as random as the higher-order bits. However, on older rand() implementa- tions, the lower-order bits are much less random than the higher-order bits.
「最近の実装」 と称して Linux C Library を持ち出すのは止めろ。
何故皆黙りこくってしまったかな?
つまり「最近の」ライブラリ使ってりゃ rand()%10+1 でもモウマンタイってこった
>>249 アフォですか?
特定の処理系を確認しただけで 「最近の実装なら」 と言い出すのは阿呆のすることだ
と言っている。
あと、漏れをオサーンと言うなら根拠を示せ。
>>250 ああ、「最近の Linux C Library」 を使っていればな。
>>251 (゚Д゚)ハァ?根拠示すべきなのはお前の方だろ?
「最近の」実装で下位ビットに偏りが出るってのを探してこいや。ハゲ
>>252 何を言っている?
「最近の実装なら」 を証明する義務があるのは、それを言い出したあんたの方だろう?
問1 最近の実装で線形合同法が使われて居ない事を証明せよ ってところか
>>254 おれはこの世にある全ての実装そ調べなければならない
お前はたった一つ反例を出せばいい
お前がさっさと探してくりゃ済む話だろーが。ヴォケ
>>256 ハゲだとかヴォケだとか・・・あんたは余計なものをつけたがるね。
> おれはこの世にある全ての実装そ調べなければならない 当たり前じゃん。
>>258 はぁ?反論できないんだったら、あーそうですかと聞き流しときゃいーだろーが
反論したけりゃ反例持ってこい。アフォが
>>256 「最近の実装なら」 と言い切るなら、普通すべてのコンパイラを調べなきゃ
いけないはずなんだが、思考回路は大丈夫だろうか。
まあ、たった一つ反例を出せば満足と言うなら出そう。
VisualC++。
VC++は時代遅れ とか言い出すんだろうか
>>259 VC++は時代遅れだろヴォケ
どこが最近の実装だ。
>>260 オレも色々調べたらVC++は偏りがあること判明しますた。
>>260 コンパイラ?思考回路大丈夫か?(w
根拠示せってーの。何がVisualC++だ?知るかハグェウンコ
VC.NET は最近の実装じゃないのか・・・。 263 が一体どの程度のスパンを求めているのかわからないな。
271 :
デフォルトの名無しさん :02/11/22 00:47
>>264 具体的にどんな偏りかをしめしなよ、実は調べていないのに口だけとしか見えないよ
何かエセ釣り師がイパーイいるなw
こんな明らかな偽物に騙されるとは とんだハゲオタぞろいだな(W 師ねよ
乱数もまともに生成できないCってほんと糞言語なのな
疑似でない乱数を生成しちゃう言語ってなんですか?
Cのせいにするなよ。
>>277 乱数もまともに生成できないCの実装が糞実装なだけです。
Perl とかでも同じ状況だと思うけどなぁ。
>>277 標準でまともな乱数を生成してくれる言語があったら教えてください。
つーか、「まともな乱数」 なんて重たい物は使いたくないが。
きちんと規格でrandの実装方法を規定すればよかったのにな!
285 :
デフォルトの名無しさん :02/11/22 00:53
>>281 すみませんがまともな乱数の定義をまずおしえてください。
>>271 保存しておいたシード値に、定数 A を掛け、定数 B を足している。
漏れは何でそうかは知らないが、この方法が下位ビットに偏りを産む事が
知られている。
文字列リテラルの型は一体何なのでしょうか。 void func(const char *s); があって、 func("abc"); として呼び出すと、「問題のあるポインタの変換」という 警告が出ます。 どのようにキャストしても警告が消えないのです。 アドバイスをお願いしますm(_ _)m
一様な乱数の生成方法も知らないのかよ ほんとお前らアフォだな int rand(void) { static int r; reutrn r++; }
>>287 const char *にはconst char *もchar *も問題なく入れられるだろ?
>>289 それは数の分布が一様になるが、数の出現規則が存在するので乱数ではない
>>292 それはプログラムで生成することは不可能ですが何か?
文字列リテラルの型はconst char *でつか?
>>293 srand ( ( unsigned ) time ( NULL ) );
i = rand ( ) % 10;
は?
>>287 文字列リテラルは char[n] 型。
>>294 ふつうはchar *だと思うけど・・・
書き換えようとしても文句言わないし。
>>291 >>294 >>297 ありがとうございます。どうも私の勘違いだったようです。
うまく警告が消えました。他のパラメタを渡していて、それが
おかしかったようです。
>>296 その式が 1 秒以内に複数回評価されたら全く同じ結果になるだろ。
無視されました。
文字列リテラルが const かどうかは処理系依存だった気がする。
うぅ。でもたしかさ、πみたいな数っていっぱいあるんでなかった? まあそれは使えないけど。なんつったけ・・・
>>310 そうですた。無理数ってめちゃめちゃ多いのに、
あ、でも無理数の中でも、繰り返すのがあんじゃん!
名前忘れた・・・。要するに自然界にはすごい乱数がイパーイてことですた。
>>304 まじで!?オレは文字列リテラルは書き換えちゃだめ
って覚えちゃった。
>>311 あんたホントに大学生?経歴詐称してないか?
循環小数は有理数デス・・・・・・・
ちなみに、VC6 はデフォルトで堂々と逝ける。 < 文字列リテラル書き換え
287です。
>>290 さん、無視したわけじゃないです(汗。見落としてました。
現在は警告もなく無事コンパイルできて動いています。
318 :
デフォルトの名無しさん :02/11/22 01:26
むりぽ数ってなんですか?
Borland-C++で同一文字列のマージというオプションをONにすると、 char *p = "abcdef"; char *q = "abcdef"; というのがあったとして、*pを書き換えると*qも変わってしまいます。
無理っぽい数です。
>>315 ,313
おれは311ではないが、繰り替えすの意味があいまいなんだよ
たとえば
0.101100111000... 以降繰り返し幅が繰り返すごとに1づつ増える繰り返し
なんてものが作れる。
>>232 ごめん。循環小数は有理数だね。
無理数ってあらわせない数だっけ?
0.313...とかなんとか、循環小数を表す記号があったような・・・
>>323 それは(曖昧さをなくすならば、周期的でないものは、とでも言おうか)
普通繰り返しと言わないと思う。
>>325 ポインタ変なとこ指してるし.....
ドット `.' だね>>循環小数を表す記号
うーん大学生なのか.......
#include <stdio.h> int main() { char *p = "abcdef"; char *q = "abcdef"; printf("%p %p\n", p, q); return 0; } -d-オプション時 0040B0A4 0040B0AB -dオプション時 0040B0A4 0040B0A4
319のように本人がマジなものをマジネタ、そうでないものをネタネタと呼ぼう。
/dev/randomを使う
>>331 ふむ.....これが噂に聞くマジネタというやつか....
「同一文字列のマージ」 の意味をわかっていれば 329 には納得できるはずなのだが。
すいませーん! ここがネタの宝庫だと同僚に聞いて、やってきたんですが。
#include <stdio.h> int main() { char *p = "abcdef"; char *q = "abcdef"; *p = 'X'; puts(q); return 0; } -dオプション時 Xbcdef うーんおもしろい。
gcc だとセグフォになる
337 :
デフォルトの名無しさん :02/11/22 01:45
*p = 'X';っていいのか?
ANSI規格では、文字列リテラルを書き換えた場合の振る舞いは不定と なっているね。
文字列リテラルの書き換えは糞、ということでよろしいか?
よろしい
どっちかと言うとネタネタよりマジネタの方がおもろいよな
果たしてそうかな?
規格を語る時、とりあえず不定という言い方はよせ。
お前等悪徳政治家みたいだな。なんか言われたら 処理系依存です。環境依存です。ってのらりくらりとかわす所が。
>>348 規格では不定という言葉を使っていないから。
規格は英語です。
>>351 訳したら不定
unspecified
un・spec・i・fied /nspsfd←/
特に指示してない,明示してない,不特定の
>>346 大事な事だから、しょうがない。
それに気づかないお前を晒しage
無指定と不定って微妙に違くないか?
未定義と不定の区別もつかないヤシがいたとは......
unspecifiedはJISでは「未指定」だったと思うが…
>>355 それは無と不の違いだな?
無ってのは「なし」って事だ
不ってのは「〜ない」って事だ。
指定なし、と指定がないは一緒ですが何か?
北野 欽一は不定っていってる まあたいしたかわんねーよ 未指定なんていったらばかにされそうだ
ISO規格に出てくる言葉で不定に一番近いのは indeterminateだと思うがどうだろう?
in・de・ter・mi・nate /ndtmnt|‐t‐←/ 1 不確定の,不定の. 2 明確でない,漠然とした,あいまいな.→ 3 未解決の,未定の. キタ━(・∀・)━!
で? 文字列リテラルの書き換えは 未定義 未規定 不定 どれなんだ?
JIS規格は日本語だよ。 で、不定という言葉は使ってない。
未定義ですた。
だれもJIS規格なんて見てないからちゃんとした答えが出ない。
板違いだからC板逝ってくれ。
ちょっとの間馬鹿は黙っててくれ
ちょっとの間黙りましたが何か
>>367 実装依存なんて言葉は規格に無い。
文字列リテラルの書き換えは未定義動作。(C99 6.4.5)
まさか用語論争まであるとは思わなかった・・・
日本語も出来ないやつにC言語を扱う資格無し!!
規格でどういう用語で表されるか知っているのと日本語が出来る出来ないは関係ない。
ちょっと前にC99の規格の日本語PDFの話が出てからというもの、 C99規格ヲタが増えた気がするのは俺だけか?
実装依存なのは、文字列リテラルが書き込み禁止領域にかかれるかどうか。 文字列リテラルを書き換えるのは未定義。 これでいいだろ。
同意?
↓ 規格ヲタさん文章の校正をお願いします。
>>文字列リテラルを書き換えるのは未定義。 まず日本語としておかしくないか?
ま、まあいいんでないか? ていうか文字列リテラルを書き換えるのは厨房がする事だと思われ
>>382 そんなつっこみいらねーんだよぼけ
おまえは理解力ってのがねーのか
チョソでつか?
>>383 そういや書き換えて楽しんでるやつらがいたな〜
1回まとめときましょう。 ・未規定の動作 (unspecified behavior) 規格が複数の動作の可能性を示し、どちらであるべきか何も要求しない動作。 例)関数呼び出しの引数の評価順序。 ・処理系定義の動作 (implementation-defined behavior) 未規定の動作のうち、どの選択肢を選んだか処理系が文書化しなければならないもの。 例)符号付き整数を右シフトしたとき、最上位ビットがどうなるか。 ・未定義の動作 (undefined behavior) 可搬性の無いまたは誤ったプログラム構文ないしは 誤ったデータまたは不定値のオブジェクトを使った動作。 結果について、規格では何も規定しない。 例)整数のあふれ
もう飽きたから寝ます。 明日の昼までに決着つけてね。 −−−−−−−−−−−−−−−−−−−−−−−−−− 俺様用しおり ∧_∧ ( ・∀・)< 今日はここまで読んだ。 −−−−−−−−−−−−−−−−−−−−−−−−−−
もう決着ついたじゃん
明日の昼といえば約35時間後か
395 :
デフォルトの名無しさん :02/11/22 06:40
こっちがアレの方だったのか!!マルチ失礼します。 ソースコードよんでたらexit(98);とかありました。exit(-1)とかならよく観るんですが、98は知りません。 この引数の意味がわからないです。おしえてください。
独自に日本語化した団体もあるけど実際に表には出てないな。< c99規格書
独自に日本語化した団体もあるけど実際に表には出てないな。< c99規格書
exit(status)はプログラムを終了させてstatus&0377と言う値を親プロセスに返す。
2重カキコスマソ。
二重カキコした397。あやまれ
401 :
デフォルトの名無しさん :02/11/22 07:35
文字列リテラルはもはや書き換え可能ではない(K&Rより)と言いながら、constにしないのは古いソースと互換性を持たせるため?
俺様用しおりってさ皆同じしおり使ったら誰が誰のか分からなくなるんぢゃない?
俺の詩織は他の奴には使わせん。
404 :
デフォルトの名無しさん :02/11/22 10:36
Cスレはマ板に引越ししる!
405 :
デフォルトの名無しさん :02/11/22 10:59
>>403 すまん、この間ちょっと使わせてもらった
>>403 ああ、俺もよく使ったよ。もう厭きたから君に返すよ
exit(-1)ねえ。びみょーだなあ。
exitの引数としてC言語的には
0およびEXIT_SUCCESS … 「正常終了」を表す処理系定義のステータスがホスト環境に返る。
EXIT_FAILURE … 「異常終了」以下同文
そのほかの引数 … 処理系定義の動作
とあるだけだから。
POSIX的には
>>398 のとおり。呼び出したプロセスには255が返る。
exit(98)がどういう意味かなんてのは、そのプログラムのドキュメント
に書いてないの? たとえばgrepやqmail-localなんてのは、いろんな
終了の仕方をexitステータスで通知するけど。
>>401 だろうね。
char *p = "string";
でいちいち警告が出たらうるさいよね。
>>409 最近のC++コンパイラはそれで警告が出るのでウザい。
だが、そのおかげて数カ所バグを見つけてしまったので、
const char *p = "string"; として、警告が出ないようにしてる。
411 :
デフォルトの名無しさん :02/11/22 16:19
−−−−−−−−−−−−−−−−−−−−−−−−−− 俺様用しおり ∧_∧ ( ・∀・)< 今日はここまで読んだ。 ID:0001392 −−−−−−−−−−−−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−− 俺様用さおり _,.'⌒ '´ ヽ ! 〈ノ )))) ノ! l.゚ ヮ^人 < ここまで〜 (´ノ⊂)H!つヽ −−−−−−−−−−−−−−−
413 :
デフォルトの名無しさん :02/11/22 18:40
−−−−−−−−−−−−−−− 俺様用かおり _,.'⌒ '´ ヽ ! 〈ノ )))) ノ! l.゚ ヮ^人 < ここまで〜 (´ノ⊂)H!つヽ −−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−−−−−−−−−−−− 俺様用しおり ∧_∧ ( ・∀・)< 今日はここまで読んだ。 ID:0001392 −−−−−−−−−−−−−−−−−−−−−−−−−−
#ifdef __俺様__ 俺様だけのしおり。今日はココから #else *"hoge" = 0; #endif
みんなの環境では、これの結果は何になる? printf("%d %d\n", sizeof("12"), sizeof("1234"));
−−−−−−−−−−−−−−−−−−−−−−−−−− 俺様用しおり ∧_∧ ( ・∀・)< 今日はここまで読んだ。 ID:0001392 −−−−−−−−−−−−−−−−−−−−−−−−−−
初期化されていない自動変数の読み出しが未定義 ってことは、何か。 char s[20]; *s = '\0'; とした後で、 s[0]以外を読んだらアウトなのか。memcpyもアウトか。 糞め。
>>420 *s = '\0'; は初期化じゃないから安心しろ。
>>420 アウトではありません未定義です。
氏んでね♥
>>425 out → 不適当な、間違っている、etc...
英単語くらい覚えて氏ね♥
−−−−−−−−−−−−−−−−−−−−−−−−−− 俺様用しおり ∧_∧ ( ・∀・)< 今日はここまで読んだ。 ID:0001392 −−−−−−−−−−−−−−−−−−−−−−−−−−
とりあえず ♥ 付けてる香具師は市ね
♥ってこうやるのかな?
つまんねーな JPS早く来ないかな
皆のcプログラマ歴は? おいら3年半位:まともに書いたコード数2万行位
3年もやっておいて未だに行数なんか気にしてんのかよ(プ
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 俺様用しおり ∧_∧ ( ・∀・)< 今日はここまで読んだ。 ID:0001392 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
JPSさん♣&diads;ご降臨ください!
♠♦
糞PGに限ってプログラム歴を気にするヤシが多いよな
C言語ってうんこするの?
歴はマ板行けよな。
>>436 > (゚Д゚)ハァ?間違ってねえよ。未定義なだけ。
ひょっとしてお前の頭は「間違い=文法エラー」のレベルですか?
> あと勝手に「不適当な」なんて訳考えて逃げうつなや。ハゲが。
ぎゃはは。自分が参照できる数少ない辞書に載ってなかったら
「勝手に」になるのか。すごいなお前。
真性厨房決定。
441 :
デフォルトの名無しさん :02/11/23 10:40
C の文法語るときの“未定義”という単語自身は Well defined ですが “アウト”はそうではないですね。
ansi.sysの前にコンパイラが駄目でした
int array[10]; int i; for(i=0;i<10;++i){ array[i] = i; } で数字を並べただけの配列arrayを ランダムに ソートできませんか? 結果として array[0]=7 array[1]=3 array[2]=5 : array[8]=8 array[9]=2 のようにする。
445 :
デフォルトの名無しさん :02/11/23 22:35
質問age。 #このすれって実質<45>だよね?
前スレのこっているけどな。
極東の話、未定義の処理をやってみて テポドンが飛んできてもチョソ系の責任には できないわけやな
はい質問!
>>444 > ランダムに ソートできませんか?
できるんですか?
ノドンやテポドンが飛んできそうなコードを書いたら警告してくれる処理系が良い。
>int array[10]; >>>int i,j,k; >for(i=0;i<10;++i){ > array[i] = i; >} randomize(); for(k=0; k<20; k++){//<-20は任意 i=random(10); j=random(10); int tmp=array[i]; array[i]=array[j]; array[j]=tmp; }
>>451 randomize() ってなに?
標準ライブラリに入ってる?
453 :
manko_chinko ◆GLc2rpKRNM :02/11/23 23:10
こんなんじゃないの #define randomize() srand((unsigned)time(NULL))
万小チンコ ウザイ
time_t t; srand((unsigned) time(&t));
出来ました?
>>451 Thax.
でもarrayの中身をぶち込んだ跡で
混ぜたいのです。
何度か混ぜる処理を途中に挟むので。
# マンチン@GLc2rpKRNMタン 出現あたりから
# ほぼ同時にPGはじめたのに結構佐賀で棚…
# 速度の違いなのか?チョト鬱w
>>457 > でもarrayの中身をぶち込んだ跡で
> 混ぜたいのです。
>>451 は俺には、
“中身の入った配列から、ランダムに決めた i 番目と j 番目の要素を
20回入れ替える”
コードに見えるんだが…
(でも相変わらずランダムに“ソート”は出来ていない)
ランダムに並び替えできてんじゃないの?
シャッフルの事をソートと呼ぶなよ・・・
ランダムにソートすることがシャッフルですが何か?
ランダムな順番にすることを整列とは言いませんが何か? #include <stdio.h> #include <stdlib.h> #include <time.h> void shuffle(int array[], size_t array_idx_max) { size_t r; int swap_tmp; if(!array_idx_max) return; r = (size_t)(rand() / (double)RAND_MAX * array_idx_max + 1); swap_tmp = array[0]; array[0] = array[r]; array[r] = swap_tmp; shuffle(&array[1], array_idx_max - 1); } int main() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; const size_t array_idx_max = sizeof(array) / sizeof(int) - 1; size_t i; srand(time(NULL)); shuffle(array, array_idx_max); for(i = 0; i <= array_idx_max; i++) printf("%d: %d\n", i, array[i]); getchar(); return 0; }
ループの中で呼び出される関数は、その関数内のローカル変数は、staticで宣言したほうが 効率がいいのですか。
関係ないっしょ
>>463 自動変数をスタックに確保する方式の場合、マシン語 0 〜 2 命令程度のコストしかかからない。
それを効率悪いと呼ぶのは自由だが、今日びの CPU は秒間数億を超える命令を実行できる。
>>463 staticだと必ずメモリ上に置かれるので、かえって効率が落ちる可能性もある。
autoなら、うまくするとレジスタに割り当てられて速くなる。
とくに、RISCだと絶対番地からロードするのは苦手なので。
あ。 前スレが dat 落ちしちゃったよ。 まだ 1000 逝ってなかったのに・・・。
おいっ!
>>444 「ランダムにソート」を
日本語か英語に一本化しろ!
通じないぞ!
そもそも 「sort」 = 「並べ替え」 と思っている時点で DQN なんだよな。 「sort」 は 「種類」、またはそれに応じて区分けする事。 転じて、コンピュータ用語では 「整列」。 「並べ替え」 は 「arrange」。
>「並べ替え」 は 「arrange」。 (ププ
今グラフの地点間の最短距離のプログラム作ってるんですが、 どうしても、うまく行かず、誰か助けてください。 template<class T1> structgraphVertex{//地点に関する定義 graphVertex<T1> *nextvertex;//次ぎの地点へのポインタ T1data; intindegree; intoutdegree; intpathlength; boolintree; graphEdge<T1> *edge; //地点からの枝に付いてのポインタ }; template<class T1> structgraphEdge{ graphVertex<T1> *destination; intweight; boolintree; graphEdge<T1> *nextedge; }; とりあえず、データセットの定義で、次は、関数の定義です。 あ、CLASSとTEMPLATEを使用してます。
template<class T1> bool graph<T1>::findshortest(T1 fromkey, T1 tokey){ if(!first) return false; Queue<char> que; graphVertex<T1> *locptr = first; graphEdge<T1>*locedge; while(locptr != NULL){ locptr->intree = false; locptr->pathlength = INT_MAX; locedge = locptr->edge; while(locedge != NULL){ locedge->intree = false; locedge = locedge->nextedge; }//end while locptr = locptr->nextvertex; }//end while
Stack<T1> stack,stackrev; T1 outs; graphVertex<T1>*chkptr; graphEdge<T1>*edgeptr,*minedgeptr, *pathptr; int newpathlen, minedge, minpath; bool treecomplete = false; locptr = first; while(locptr != NULL && locptr->data != tokey) locptr = locptr->nextvertex; if(locptr == NULL) return false; locptr->intree = true; locptr->pathlength = 0; stack.push(locptr->data); while(!treecomplete){ treecomplete = true; chkptr = locptr; minedgeptr = NULL; pathptr = NULL; newpathlen = INT_MAX;
>>473 -
それC言語のプログラムじゃねーんだわ。
C++のスレあるからそっち逝ってくれ。
ごめんなさい
C と C++ の区別がつかない人が居るのか・・・。
区別が付かないのではなく、書くべき場所を間違えたと言った方が正しいでしょう
480 :
デフォルトの名無しさん :02/11/24 13:47
IEEEにC言語の規格はありますか?
481 :
デフォルトの名無しさん :02/11/24 13:53
>>480 POSIXにCのヘッダや標準関数も含まれてるが、
言語自体はないと思う。
482 :
デフォルトの名無しさん :02/11/24 13:57
例えばTurbo Cで定義されているグラフィック関数などを、LSI C-86で 使ったりすることは不可能なんでしょうか?
>>482 コンパイラが互換を謳っていない限り、基本的に処理系依存の事は不可能だと思ってくれ。
>>482 それはC言語の話じゃなくて
処理系の話なので、
処理系に詳しい人に聞いて。俺は知らん。
486 :
デフォルトの名無しさん :02/11/24 14:16
if ("false") printf("false\n"); だとfalseが表示されてしまいます。
if("false") ↑これってなに?
if 文
>>489 そりゃそうだ。誰もこれがwhile文に見えたりはしません。
俺が言いたいのはなんでfalseを""で囲んでるのかってこと。
>>490 文字列リテラル(文字列定数)を知りませんか?
>>490 文字列にすれば真になるというつまらないネタだろ・・・
>>490 囲まなかったら(false を定義してないと)エラーになるだろーが
>>491 だけど""で囲んじゃったらif文が通るのは当たり前じゃなくて?
禿しく勘違いしてた。 ネタでしたか・・・
if(0[""]) print("false"); とするとfalseとプリントされません。
#define print(x)
いや、printfでも""[0]==0なんだからプリントされないか
500ゲt
C言語でGUI使いたいんで、情報ください。
すまん。ここスレ違いだった。
506 :
デフォルトの名無しさん :02/11/24 15:05
507 :
知りたい人 :02/11/24 15:25
テキストファイルから漢字を読み込むことはできるのでしょうか? できるなら、そのやり方の手ほどきを、
なさりたいことがよくわからないのですが、 fopenあたりを調べると幸せになれるかも。
509 :
知りたい人 :02/11/24 15:32
いつも、c = getc(fp)等で英数字一文字を読み込んでいたのですが、 漢字の場合、半角でなく、全角なのでどうすればよいのかと、
>>509 全角か判定して、全角ならもう一回読み込む。
>>504 スゲ−な 12535まで見る事が出来たぞ。↓
12534 名前: ゲームセンター名無し 投稿日: 2001/08/04(土) 17:27
あしあと
12535 名前: 1001 投稿日: Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
--------------------------------------------------------------------------------
2ちゃんねるは、ここのサーバを使ってるです。。。
C言語で脱初心者と言えるには、どんな事ができればいいんでつか?
Cコンパイラを作れる。
ソートとかサーチとか、データ構造とかも 一応ひととうりやったんだけども・・・
なら2ch名物リバーシでも作ってみたら? 人間とCOMがそれぞれ先手・後手を選べる奴。
そりゃC言語のスキルとは関係ないんじゃ?
C言語である程度の規模の構造化されたソフトウェアを 設計・実装できるってのは重要だよ。
パズル解くプログラムでも造れ
極端な話、変数全部が大域変数とかいうメチャクチャなコード でもリバーシぐらいだったら作れちゃう訳で。 プログラミングのスキルとC言語のスキルは別だと言いたかっただけ。
まずは、「一通り」 を 「ひととうり」 と書かない事だ。
だからといって滅茶苦茶なコーディングでは 破綻してしまうくらい大きな模の例題なんて既に例題ではないし stdio.hを自前で実装なんてのも現実的とはいえない。 C言語の中級者とは文法・アルゴリズムとデータ構造・ ソフトウェア開発サイクル全体を一通り経験している人間のことだと思うよ。
524 :
デフォルトの名無しさん :02/11/24 16:26
C言語でhostコマンド似たような実行をするプログラムって、 どんなプログラムになるんでしょう? よろしければ、解いてみてくださいm(__ __)m
gethostbyname使え
リバーシってオセロみたいの?
オセロは登録商標だから。
528 :
デフォルトの名無しさん :02/11/24 16:38
include <stdio.h> int main(void) {int s; int i, j; s = 1; for(i=0; i<5; i++){ for(j=0; j<s; j++){ printf("*"); } printf("\n"); s++; } return 0; } このコードを実行すると * ** *** **** ***** と出るわけですが、どうもわかりません。 forですからi=0 j=0 *1つ s=1 i=0 j=1で(j=1)<(s=1)でここは終わり。 次にi=1 j=0 * s=2 i=0 j=1 (j=1)<(s=2)ですからもう1つ*, i=0 j=2 (j=2)<(s=2)でここは終わり 次にi=2 j=0 * s=2 , i=2 j=1 * s=3, i=2 j=2 * s=4, i=3 j=3 * s=5, i=3 j=4 * とどこまでも続いて行くような、、、、、 納得させて下さい。お願いします。
>次にi=2 j=0 * s=2 , i=2 j=1 * s=3, i=2 j=2 * s=4, i=3 j=3 * s=5, i=3 j=4 * とどこまでも続いて行くような、、、、、 もうちょっとがんばれ(藁
530 :
デフォルトの名無しさん :02/11/24 16:43
わかりました。forのなかだけで計算してしまい、終わると段落ができてsが加算されるのですね。これでいいですか?
531 :
デフォルトの名無しさん :02/11/24 16:44
>>513 漏れは↓を C++ の STL で作ったが、これを C で書いてみたらどうだ?
http://pc.2ch.net/test/read.cgi/unix/1025600265/367-385 単語に対する読みの集計。
入力は 1 行 1 レコードのファイル (自分で作る)。
レコードは、単語\t読み\n のフォーマットで、単語も読みも重複する。
この読みを集計して出力する。
出力は単語を大文字小文字区別しないでソート。
単語内では数の多かった読みの順、同じ数の場合は読みの文字コード順でソート。
あとは、fputc() と fgetc() を除く全標準ライブラリを自分で書いてみるとか。
533 :
デフォルトの名無しさん :02/11/24 16:54
530です。 せっかくですのでもう1つ質問です。僕は今年の11/12から「やさしいC」という本で勉強中ですが、一日二時間は最低勉強して何年すればC原語が使いこなせるようになるでしょうか?今は答をみないと練習問題も分かりません。 またこの入門書は繰りかえし勉強するべきでしょうか?_そしてどのくらいしたら今度は「アメリカの大学の教科書の本格的なCの入門」という入門から中級(おそらく)あたりの本へすすむべきでしょうか?またこれじゃなくお勧めの本はありますか?
C原語はしらんが C言語なら何年もの必要は無いだろう。 使いこなすってのがどのくらいのことを言うのかにもよるが。 言語自体は数ヶ月。一人前にプログラミングするのに必要な計算機の知識は、 まあ最低5〜6年の勉強が必要だろう。
536 :
デフォルトの名無しさん :02/11/24 17:13
何回か繰りかえしたほうがいいですか?それとも入門から中級の本格的な本をやったほうがいいですか?
>>533 その、分からない、つーのは間違っているとしても自力で解くこと自体が出来ないのか?
そういう奴はプログラムするのに向いているとは言えないな。
何年かかるか予想も出来ない。もしかすると一生出来ないかもよ。
とりあえず、分かるようになるまで何度でも繰り返しやれ。
そんな状態では本格的な本に進んでもやっぱりわからんままだわ。
>>536 まともなプログラマになりたいなら情報系の大学院に逝きなさい。
ただ食えればよいならとにかくWinでコード書きなさい。
趣味なら自分の楽しいことだけやりなさい。
間違って書きこんでしまった鬱だ死のう。 とりあえず、はじめてのCでポインタと構造体まで読んだら あとは、オンラインマニュアルの使い方を覚えて K&Rを手元においておき、仕事をしながら覚える。
>>533 次の本に進むという以前に問題が解けないのは痛い気がする・・・
本の内容はわからないけど、たぶん入門書ならそこまで長いプログラム
はないと思うから、大まかなプログラムの流れを考えてみるといいかも。
それから実際にコーディングしてみると解けるかもしれないよ。
543 :
デフォルトの名無しさん :02/11/24 17:37
>>539 アホですか?
まともなプログラマになるのになんで情報系の大学院に行く必要があるわけ?
すみません、書いたコードが上手く動かなくって、 上手くいかない原因が分かりません。 どこがおかしいのか教えて下さい。
#include <stdio.h> //関数の宣言 int tokuten(float, float *); int beki(float, int,float *); main(){ //変数の宣言 float daritu; float kekka; //開始 printf("全ての打者の打率がnと仮定したときの一試合辺りの得点の期待値を計算します。\n"); printf("打率nを入力して下さい。【0.000-0.999】\n"); scanf("%f",&daritu); printf("打率が入力されました。\n"); tokuten(daritu, &kekka); printf("打者全てが打率%fの時、一試合辺りの得点の期待値は%fとなります。\n",daritu,kekka); getch(); printf("END"); return 0; }
//関数の定義 int tokuten(float a, float *b) { int i,k; float c; *b=0; for(i=1;1<100;i++){ c=0; k=i+2; beki(a,k,&c); c=c*(1-a)*(1-a)*i*(i+4)*(i+3)/2; *b=*b+c; }; } int beki(float a, int b,float *c){ int j; *c=1; for(j=1;j<=b;j++){*c=*c*a;}; }
これまた恐ろしいほどのクソコードなりね.......
printf("打率が入力されました。\n"); までは上手く表示されるのですが それ以降ストップしてしまいます。 どこに原因があるのかがよく分からないのです。
550 :
デフォルトの名無しさん :02/11/24 17:43
>>543 まあ、大学院に行ってみれば分るよ。
学部では入門しかやらない。まともにOSやコンパイラを作れるような
知識が身につくのは大学院に行ってから。
>>nanashi >for(i=1;1<100;i++){ 1<100 は永遠に真だろがヴォケ
>>549 得点の期待値をどうやって計算しているのか
説明してください。
コード読むの面倒くさい。
うぉ解決されてしまった。恥
>551 上手くいきました。 ありがとうございます! こんな書き間違いをしていたとは・・・・
>>547 > int tokuten(float a, float *b)
> int beki(float a, int b,float *c)
何も返さないならvoidでいいんじゃないかな?
あとgetch使うならconio.hwpインクルードした方がいいんじゃない?
556 :
デフォルトの名無しさん :02/11/24 17:58
>>550 大学で学ばなきゃ出来ないと考えている時点であんただめだめだよ。
自分で調べて自分で習得しろ。
俺は情報系じゃなかったけど、大学2年までにCのコンパイラぐらい作ってたぞ。
>555 分かりました、勉強してみます。 アドヴァイスありがとうございます。
>>558 すまん、間違えた。
>あとgetch使うならconio.hwpインクルードした方がいいんじゃない
『これconio.hをインクルードした方がいいんじゃない?』に訂正
>>556 その後、ちゃんとした大学院に行けばもっと磨けたのにもったいない。
>>557 大学院に行けば、高校のころにProlog作ったなんてやつは珍しくない。
そういう奴等が刺激しあって向上していく。
大学院ヲタウザい
「でも自分で勉強しても限界が来るときがある。その時に大学院なんかに 行って勉強した方がいい」 こんな話しを聞いたことがあるよ。
趣味で食えるまともなプログラマになりたい
>>561 Prologて.....
大学2年でCコンパイラ作れたら
卒業するころにはOSの2つ3つ作ってんだろうなぁ
俺や同輩以上はだいたい学部卒だが、たしかに部下や後輩を見てると 大学院出たやつは違う。 もちろん個人差はあるけど、傾向としてははっきりしてる。 格が違う。
「blogの創世記は〜」とか云ったりするんでしょうか。 やはり格が違いますね
568 :
デフォルトの名無しさん :02/11/24 18:16
まったりと大学院の話をしているところに割り込んでわるいのですが、質問です。 システム日付を取得する方法ってどんなのがあるのでしょうか?
>>565 OSは一人では作れないと思うよ。
>>561 高校生でPrologのインタプリタ/コンパイラってすごいな
ざらにいると書いてるけど、実はひとりしかしらんだろ?
>>569 Cコンパイラだって一人で作ったら相当すごいと思うけどなぁ
でもさそうやって自作されたコンパイラが出てきてしょっちゅう話題になる ってこと遭遇していないんだけど。マイナーなマシンでの話? それともコンパイラみたいなものは、できたけど吐くのは全然最適化できてない 糞コードか。できの悪い車輪の再開発だったら自己満足のレベル。
Prolog なんて今どき使ったことあるやつ探すだけも一苦労だぞ(w
>>561 どこの大学院なんだ?
574 :
デフォルトの名無しさん :02/11/24 18:28
>>572 コンパイラを作ることでたくさんえられるものがあるだろ。
おまえさんには一生作れないだろうからなにが得られるかわからんだろうが。
はぁ・・・最近マ板用の話題ばっかだな・・・
なんだやっぱり糞レベルか。
577 :
デフォルトの名無しさん :02/11/24 18:33
とりあえずマ板行け。
まさかtinyCみたいなサブセットをもってCのコンパイラなんて言ってないよねぇ? struct も typedef も sizeof も 関数ポインタやなんかも当然使えるよねぇ? そのコンパイラでLinuxのkernelのコンパイルもできるよねぇ? ちょっと見てみたいなぁ。ソースうpキボンヌ。
> ソースうpキボンヌ。 ワロタ。
わかりやすく言うとだな、 1.コンパイラを作れないレベル 2.糞コンパイラを作れるレベル 3.すばらしいコンパイラを作れるレベル に分けると、俺は1で、その大学院の奴が2ってこった。 で、1の奴は2の奴が3でないことを馬鹿にし、 2の奴は1が2でないことを馬鹿にし、 3の奴はいない。
>Prolog作った Prolog[で何か]作った
しかし「Prolog作った」と言われれば普通 「Prologの言語仕様を考え出した」と思うよなぁ
プ) 糞コンパイラも作れないヤツが何言ってんだか。 俺は2番ね
>>584 ソ ー ス う p キ ホ ゙ ン ヌ
あーつまんねースレ。 っつか、どこがC言語やねん。
>>580 のおかげで3以外のレスは糞レスにしか見えなくなってきた。
キャッシュメモリとレジスタってどう違うんでつか?
590 :
manko_chinko ◆GLc2rpKRNM :02/11/24 18:40
>>580 そもそも3はひとりじゃ作れないだろう。
591 :
デフォルトの名無しさん :02/11/24 18:41
とりあえず、消えろ。オマイラ
>>589 さっきの時刻ってどうやってにしろ、
てめぇで調べるということを、きさまら知らんのか
くそコテが2人同時に降臨しますた
595 :
デフォルトの名無しさん :02/11/24 18:43
>>590 変態が参加すんな。ここはおまえがきていいスレじゃない。2度とくんな!!
596 :
デフォルトの名無しさん :02/11/24 18:44
597 :
デフォルトの名無しさん :02/11/24 18:44
/\ | /|/|/| ドドドドドドドドドドドド!! | / / |// / /| | / / |_|/|/|/|/| (´⌒(´⌒`)⌒`) | / / |文|/ // / (´⌒(´祭だ!!祭だ!!`)⌒`) |/ /. _.| ̄|/|/|/ (´⌒(´∧ ∧⌒`)`)`)⌒`) /|\/ / / |/ / (´⌒(´(,゚Д゚ )つ `)`) /| / / /ヽ (´⌒(´⌒ (´⌒( つ |〕 /⌒`)⌒`) | | ̄| | |ヽ/| 遅れるな!! ( | (⌒)`)⌒`) | | |/| |__|/. ∧_∧ ⌒`).ドし'⌒^ミ `)⌒`)ォ | |/| |/ (´⌒(´( ´∀` )つ ド ∧_∧⌒`) | | |/ (´⌒(´( つ/] / ォと( ・∀・ ) 突撃――!! | |/ ( | (⌒)`) ォ ヽ[|⊂[] )`) | / (´ ´し'⌒^ミ `)`)ォ (⌒) |
Cスレはどこももう終わったな。 みんなさようなら。 今まで厨な質問に親切に答えてくれたり逆に叩かれたりといろいろな思い出ができたよ。 俺みたいな奴はほとんど回答する側に回れなかったけど、それでも、 こんな俺でも答えられるような質問があって、質問者から「ありがとう」って 言われたときはとてもうれしかった。 規格論争には俺みたいなレベルじゃ加われなかったけど、論争を見てるだけでも 少しは俺の血となり肉となったと思う。 でももうさようならを言わなくてはならない時期にきてしまったんだね。 ここで出会った人たちとまたいつかどこかで出会えたらいいな。 みんな、本当にありがとう。
600 :
デフォルトの名無しさん :02/11/24 18:45
/⌒~~~⌒\ ( ,,) (,,・Д・) / ( ゚>t≡ )y─┛~~ 〜(___ノ 〜(___ノ ,γ_ (_ ノγ U ∩_∩) THANK YOU 2ch ┌───────┐ \ α___J _J and (| ● ● | ヽ / ̄ ̄ ̄ ̄\ GOOD-BYE 2ch WORLD! /.| .┌▽▽▽▽┐ .|____|__||_| )) / ● ●、 ( ┤ .| | .|□━□ ) |Y Y \ またどこかで会おうね \. .└△△△△┘ .| J |) |.| | .▼ | | \あ\ | ∀ ノ | \/ _人|∧∧∩゛冫、 .∧_∧ | \り.\ . | - ′ | _/)/)/( ゚Д゚)/ ` . (´∀` )..ヽ(´ー`)ノ \が\ . | ) \ / 〔/\〕 U / ∩∩ ( ) (___) \と.\ .|/ | | | c(*・_・) | |ヽ(´ー`)ノ_| | | | |〜 /\.\う\| (-_-) (__)_) UUUU /∪∪ (___)(_(__) ◎ ̄ ̄◎─┘ .└──┘.(∩∩)
これはすごい IE ですね
>>599 はいはい、さっさと消え失せろ。ウザイ
603 :
デフォルトの名無しさん :02/11/24 18:47
キャッシュメモリ:CPUに近いかつアクセスの早いメモリ。 メインメモリーに比べてな。 レジスタ:CPUが直接操作できるビット列。
604 :
デフォルトの名無しさん :02/11/24 18:51
レジスタ:CPUの作業領域
またCの話じゃないんだよなこれが。
607 :
デフォルトの名無しさん :02/11/24 18:57
>>606 C言語ってどうしてCの名前が付いたのですか?
月並みな質問ですみません。
ありがとん
>>608 BCPLという言語があって、
次にBという言語があって、
その後継がC。
だから、次はP。
>>609 自分で調べることが大切だって事覚えろよ。
612 :
デフォルトの名無しさん :02/11/24 19:02
A・・・アセンブラ B・・・Basic C・・・C言語 D・・・Delphi E・・・ F・・・Fortran G・・・ H・・・HSP ですか?
E ... Eiffel
614 :
デフォルトの名無しさん :02/11/24 19:04
A・・・アセンブラ B・・・Basic C・・・C言語 D・・・Delphi E・・・Eiffel F・・・Fortran G・・・ H・・・HSP I・・・ J・・・Java K・・・ L・・・Lisp ですか?
615 :
manko_chinko ◆GLc2rpKRNM :02/11/24 19:06
>>612 A・・・Ada
B・・・Basic
C・・・C
D・・・Delphi
E・・・沖田浩之
F・・・Fortran
G・・・スポット
H・・・HSP
なんか低レベルなスレになってる・・・
A ... Ada, B ... Basic, C ... C, D ... Delphi, E ... Eiffel, F ... Fortran, G ... German, H ... Haskell, I ... Italy, J ... Java, K ... Korean, L ... Lisp, M ... ML, N ... , O ... O, P ... Python, Q ... , R ... Ruby, S ... Smalltalk, T ... , U ... , V ... , W ... , X ... , Y ... , Z ... うーん限界か...
G…Gedanken I…Icon K…KL/1 N… O…Oc Q… T…Tという言語は2つ知ってる。 Z…Zという言語はあるね。
619 :
デフォルトの名無しさん :02/11/24 19:16
T...Tonyu Y...YGS
621 :
デフォルトの名無しさん :02/11/24 19:28
V...VHDL
U ... U-BASIC
623 :
デフォルトの名無しさん :02/11/24 19:30
っていうか、呆れ・・・
625 :
デフォルトの名無しさん :02/11/24 19:37
A〜Zを埋める論争はスレ立てるまでもない。に移動しますた。
よし、じゃあ次はアイウエオで。
つーか答えはネットに埋まってるぞ
庭に埋まってるぞ
便所で詰まってるぞ
630 :
デフォルトの名無しさん :02/11/24 20:56
_,.. -,.='''''''' ー- 、_,/ _,,.,-ヽ, ,.-彡,.-',...ミ_ -、 '_,く / _ノ-ニ_`> /_,/.i- 、く ~`ヽ、 、.\,.彡'ム,∠..,,_ /r‐./ l \\ \ ヽ r'゙,,.-‐''゙~ l, ,r一‐-'/, ' l l.ヾ 、ヾ 、\ ヽ \ ヾ, .,._=ニニ=l, ノ'''゙゙゙゙`// .| | l ヽヽヽ,ヽ _ヾ、 ヾ, ヽ. `ーtヮ-'_ノ| /,. -─/ l | |'、 l、ヽ,ヽ V\_ヽゝ l'、 | l r'`゙゙゙~ ,. ヘ  ̄>-| | l | .|ヽ l\ヽ'、i /f"{、)`ヾ.}.|ノへ-_‐;ニ-t'゙,, ∠~-'''''| | .l .ヾ、 ,キ' ヾ、 `ヾjl. ゙ ヽ キ ヒミ、},-、__,...ヅ! | _,,....l .l | ヽ V、_lr゙,-'、 \_ヅ 〉リヾ、-‐ニ-'ノ ゙-_つヾ、ヽヽ `ヽキ t‐゙ \ lン'`!| L.. -'" )ー--`ヾ、t、`ミ!、` ヽ、_ヅ ' ,. ヘ. /" j,! (__-_-一'''ツヽ~|.|'`ヽ、 ヽ、. } ,イ__ r-‐゙''_'.ヅ .|.l`'ー-ゝ、...,,,______"/ |_ <`lニ!''''''''''''''/ニ、ー、_ Lミ_`ー=ヮ ヾ、. ,ム,,,,,,,/~コ ヽi ヽt--,-,,,,_ l",/ l ゙`‐ 、 _ `ー‐'" r'T~/,'./~r゙==ー-、,/ /,'.,'//, '`く l `) / -'〉゙,'/ .l l |"O `/ /,'.,'/'゙,べ ヽ. l _,.-'" /_,_./,'./ヾ、l l.| /_,..-_ニレ-| ん ヽ、. |. .l~ ̄ |/_,,,,゙Yー`-、_l | /_,,,,-ニ、レ-ー、ヽ, h.. .l
(;´Д`)ハァハァ
632 :
デフォルトの名無しさん :02/11/24 21:05
以前に下記のような質問をした者です。 V=0.5*a*t*t V;速度 a:加速度 t:時間(秒) この式に対応して物体が移動するプログラムを作る場合 c言語において、時間tはどのようにして表すのですか? そして「for(t=0.0; t<10.f; t+=0.1)」 上記のような答えをいただいたのですが、これでは時間tが1〜2に増加した時 実際に1秒たっていないので、映像上で物体が異常に早く動いてしまいます。 どうすれば良いのか、どなたか対処方法を教えてください。
>>632 余った時間はほかの処理をするか時間がたつまでループ
>632 デジタル微分解析だっけか? 冲がどーのこーの。 いずれにせよC言語の話じゃないよなー。
>>632 clock() でミリ秒、time() で秒が取得できるから、それを使って何とかしろ。
636 :
デフォルトの名無しさん :02/11/24 21:19
637 :
デフォルトの名無しさん :02/11/24 21:19
>>632 時間がたつまでル−プですか・・・
1秒というのは正確に計れるのですか?
638 :
デフォルトの名無しさん :02/11/24 21:21
>>635 やっぱりそれしか無いですよね、
がんばります。皆さんありがとうございました。
clock() はミリ秒ではなかったな。 clock() / CLOCKS_PER_SEC が秒になるんだとさ。
処理系依存だが、Windows なら Sleep()、Unix なら sleep() を使う手もある。
641 :
デフォルトの名無しさん :02/11/24 21:28
ライブラリ何使うか知らないけどあの程度だったらsleepで十分だろ。 ヘタに重く回られたらたまったものじゃない。
643 :
デフォルトの名無しさん :02/11/24 21:40
プログラム実行中にこっちがなんらかの制御を加える場合 どのような方法がありますか? 関数名でもそれについてのHPでもいいので教えて欲しいです。 具体的には例えばボールが左から右へ行くようなプログラムで プログラムを実行してボールが画面中央に行ったときに こちらがキーボードから例えば”S”を押すとボールが止まるって いう制御を行いたいのです
OSとコンパイラは?
645 :
デフォルトの名無しさん :02/11/24 21:42
646 :
デフォルトの名無しさん :02/11/24 21:42
>>644 Windows2000
Borlandのフリーのものです
647 :
デフォルトの名無しさん :02/11/24 21:46
>>643 stopTheBall(char c);
648 :
manko_chinko ◆GLc2rpKRNM :02/11/24 21:57
while(getch()!='s'){ /*ぼーるを転がす*/ } こういうやつ?
650 :
デフォルトの名無しさん :02/11/24 22:02
一方向リストと単方向リストの違いは何ですか?
表現
一方向リストなんて聞いたことないべや
653 :
デフォルトの名無しさん :02/11/24 22:12
>>650 単方向リストと双方向リスト
の違いだべ。
>>653 単方向リストは、次へのポインタをもつ。
双方向リストは、次へのポインタと、一つ前のポインタをもつ
単方向 struct mono{ hoge nanika; mono* pNext; }; 双方向 struct di{ hoge nanika; di* pNext; di* pBefore; }:
線型リストとの違いは?
657 :
デフォルトの名無しさん :02/11/24 22:19
今調べた結果、一方向リストを単方向リストと言うみたいです。
658 :
デフォルトの名無しさん :02/11/24 22:22
リストカット
>>655 エラー
hogeは任意の型として、monoなんて型もdiなんて型もない。
>>660 分かんないよぅ。単方向リストとどう違うのさ?
双方向リストとは?
653は一度もプログラムを書いたことがないことが判明しました。
>>656 線型リストってのは、構造体をポインタで結んでるようなデータ構造の総称でつ。
>>662 線型に対して、線型じゃないものを比べてみればよい。
>>665 間違いました。すいまそん。
えーと、線型リストってのは、直線上にデータを並べてる感じでつ。
それの総称で。
二分岐は木構造
つまり 線型リスト⊃単方向リスト、双方向リスト ってことでつね!
遅レスですが、ミリ秒のやつです。 #include <stdio.h> #include <time.h> #include <conio.h> int main(void) { clock_t cs,ce,ces;/*long*/ time_t ts,te,tes;/*long*/ ts=time(NULL); cs=clock(); printf("\x1b[1;1H終了するなら何かキーを押してください"); printf("\x1b[3;1Htime :"); printf("\x1b[4;1Hclock :"); for(;;) { te=time(NULL); ce=clock(); tes=te-ts; ces=ce-cs; printf("\x1b[3;9H%ld",tes); printf("\x1b[4;9H%ld.%ld",ces/1000,ces%1000); if(kbhit()!=0) break; } return 0; }
>>669 たぶん。あとスタックとかキューとかっていうデータ構造もありまつ。
668のサイトのほうが詳しいとおもうけど。
ついでに質問だけど、アセンブラの知識とかあった方がいいでつか?
春に情報処理技術者試験受けるのに、今レジスタとか勉強してるんだけども。
プログラム作るときとか役にたちます?
>670 なんか分からんがすごい!
677 :
デフォルトの名無しさん :02/11/24 23:25
単方向リストについて詳しく解説してあるHP知ってたら教えて 下さい。
双方向リスト ┏━━┓┏━━┓ ┃データ┃┃データ┃ ┣━━┫┣━━┫ ┃ ==> ┃ ┣━━┫┣━━┫ ┃ <== ┃ ┗━━┛┗━━┛ 単方向リスト(一方通行) ┏━━┓┏━━┓ ┃データ┃┃データ┃ ┣━━┫┣━━┫ ┃ ==> ┃ ┗━━┛┗━━┛
■->■->■ ■<->■<->■
>>679 データ圧縮しすぎると情報が伝わりません・・・
通信とは「通じたと信じる」のだっ! 伝達とは「伝えて達する」のだっ!
達するって何だよ達するって
>>680 単リ:■->■->■
双リ:■<->■<->■
684 :
デフォルトの名無しさん :02/11/25 00:05
勉強っていうのは、知識を身に付ける事じゃないんだね。 勉強っていうのは、知識をどう使うかを身に付ける事なんだね。 19年間オレは勉強もどきをしてきたけど、 今日から勉強をします。
CodeWarriorってコンパイラ使ってる人いる?
>685 今ごろ気づいたのかよw
>>684 「情報」とは「伝達」された「通信」の内容のうち、
真に必要となる部分を意味する。
ちなみに、内容のうち、情報に含まれないものは「冗長」という。
49 点。
>>685 > 勉強っていうのは、知識を身に付ける事じゃないんだね。
勉強というのは知識を身につけることだと思うけどな。
で、勉強することにより、自分の考え方や行動が進歩したら
勉強したことが身に付いたのだろう。
ま、身に付いたかどうかは自分ではわかりにくいけどな。
タイトルの*が余計な気がする
const を付けるべきだと思うがどうか。
695 :
デフォルトの名無しさん :02/11/25 19:29
malloc()について質問です。 下のプログラムのように、func()でmalloc()してメモリを確保し、 関数の外でそのデータを見ると壊れているようなのです。 free()するまでは有効だと思うのですが、どうなんでしょう? #define SIZE 30000 int main() { char *p; func(p); // p[0]-p[SIZE]を表示する関数 PrintData(p, SIZE); // データが壊れてる free(p); } int func(char *p) { FILE *file; file = fopen("tmp.txt", "rb"); fread(p, 1, SIZE, file); PrintData(p, SIZE); // データは正常 fclose(file); }
>>696 どこでmallocしている?
それと、funcの引数ははchar **にして呼び出し時にfunc(&p)としてやらないとpにはfunc内でmallocしたものが入らないよ。
>>697 malloc()はfread()の前に書き忘れてました・・・
char **にしたらできました! ありがとうございました。
何故そうなるのかはまだ考え中ですがw
699 :
デフォルトの名無しさん :02/11/25 20:11
Cで、Perlのsplitのようなことをしたい (ファイルから1行読みこんで、適当な区切り文字で分割して配列に入れる) のですが、どうするのが一番効率的でしょうか? fscanfでやると、各行のデータの数がそろっていないと 変なことになりそうなので使いにくんですが。
>>699 strtok()
関数リストには一度目を通しておくことをお勧めする。
>>699 > どうするのが一番効率的でしょうか?
Perlのsplitを頂戴して適当に改造する。
scanfは改行文字を配列に格納するんでつか?
格納しないんじゃない?
宣言 -char *strtok(char *s1, const char *s2); -char far * far _fstrtok(char far *s1, const char far *s2); 説明 strtok と _fstrtok は,文字列 s1 を,分離文字列 s2 から 1文字以上の間隔で区切られた,0 個以上のトークンからなるもの とみなします。 TURBO C++ FOR WINDOWS Version3.1
配列に入れた文字列はどうやって表現するんですか? 例えば変数名を変数で表したい時とか int ABC; char s[10]; strcpy(s, "ABC"); s=12; とかやっても変数ABCに12が代入されるわけではないんですよね?
>>706 それは構造体&共用体でやるんじゃあござんせんか?
708 :
デフォルトの名無しさん :02/11/26 13:47
>>707 構造体&共用体ですか?
具体的にはたとえばどのようにすればいいのでしょうか。
>>708 ある1箇所に来る変数を状況によって変えるとか…です。
>>709 Perl の $afo = 1; $x = "afo"; $$x = 2; みたいなことしたいんじゃないの?
union U { int i; char s[4]; }; U u; int a; u.i = 0x12345678; for(a = 0; a < 4; a++) printf(" %02x", u.s[a]); strcpy(u.s, "ABC"); printf(" %08x", u.i);
>>706 711がマブい答えをくれましたよ。ちなみに、711のは共用体ですな。
711は完全に勘違いしてるわけだが。
説明不足ですいません。 つまるところは変数名を直接記述せずに 何か変更可能な方法で表現したい、っていうことなんですが…
int a1; int a2; int b; a1=1; a2=2; b=( )+3; ↑ ここには状況に応じてa1かa2のどちらか入る、みたいな…
>>715 それくらいのことだったら配列使えば?
int a[2];
int b;
int a[0] = 1;
int a[1] = 2;
こういうことか? int a1; int a2; int b; int *a12; a1=1; a2=2; if (rand() & 1) a12 = &a1; else a12 = &a2; b = (*a12)+3;
変えたい部分が配列とかだったらどうなのでしょうか? int abc[5]; int def[3]; int ghi[6]; ... int j=3; int k; k=( )[j]+3; ↑ ここにくる配列を上の3つから選びたい時とか…
2次配列にする
>>719 なるほど。目からウロコですた。
なんとかできそうです。
みなさんありがとうございました。
…くだらねぇ
723 :
デフォルトの名無しさん :02/11/26 16:47
>>722 なんか嫌なことでもありましたか?(・∀・)
んん〜?なんか間違ったこと教えたっけ?
サイズ違ってるだろ
ふんふん。だからな〜に?(・∀・)
おまえ見苦しい
∧_∧ / ̄ ̄ ̄ ̄ ̄
(ω・ )ゝ < えっ?
>>728 . ノ/ / \_____
ノ ̄ゝ
>>711 処理系依存だが。
>>718 int* xxx = abc; /* or def/ghi */
k = xxx[j]+3;
>>730 それでいいなら初めっから
k = abc[i]+3;
にしろよ....
int *の配列にいれてやればいいじゃん・・・
main関数がintを返すのは規格で決められてるんでつか? void main(void)ってのは間違ってるって書いてあったんだけど、 K&Rにはmain()って書いてあるし・・・ あとアドレスを表示するときの変換していしで%dを使うのは未定義でつか?
何度も出ているFAQだがトリップをつけると厨房と言われずにすむ。 かもしれない。
>main関数がintを返すのは規格で決められてるんでつか? int main(void)とint main(int argc, char *argv[])は(mainがないような 環境を除けば)どんな処理系でも使える。 そのほか、処理系定義の形式も、処理系によっては使えるかも。 >void main(void)ってのは間違ってるって書いてあったんだけど、 まあ、ポータブルなプログラムのつもりなら間違いと言ってよいだろう。 >K&Rにはmain()って書いてあるし・・・ これはint main()と同じ意味。 >あとアドレスを表示するときの変換していしで%dを使うのは未定義でつか? Yes. 処理系によっては、ポインタを整数にキャストしてやればよい。 (結果は処理系定義) また、%pを使えばポインタ値が処理系定義のフォーマットで 出力される。
thanx main()がint main()と同じなのは知らんかった・・・。 なんも書いてないとこは全部voidになるわけじゃないんだね。 たとえば自前の関数で返り血省略したときも、 intを返すってなるの? でもそれだったらint main()って書いた方がいいと思うのは俺だけ・・・?
アセンブラっていわばコンパイラのことでないの? アセンブリ言語でしょ?
>>736 返り値の型を明示しない関数の宣言はintと書いたのと同じ。
まあ、昔からの互換性だけが理由。intと書いておけば?
>>737 Assembly languageだね。
アセンブラはアセンブリ言語を機械語に翻訳するソフトのこと。
>>740 どうせ「まただまされたわけだが」だろ?
省略できる所をわざわざ書く奴はDQN。 intを返す関数なら省略したほうが玄人。 それで通じない奴は素人。
>>742 変数は全て int a,b,cですか?w
>>743 省略できると書いてあるだろうが。馬鹿が。
>>744 釣りはしたことが無いから初心者とも言える。
>>745 じゃあdo { } while ( );の{ }も省略するんだね?
演算子の優先順位も全部おぼえていて、
省略できる( )は全部省略するんだね?
>>747 はあ? 当たり前だろうが。
優先順位? そんなもの覚えてない奴がC言語なんか使ってんのか?
……748は必死に教科書で優先順位のレベル数を数えています……
>>749 何段階あるかなんて覚えていない。というか数えたこと無い。
どれとどれを比べてどっちが優先順位が高いかなら分かるが。
……教科書が見つからなかったようです……
>>751 何段階あるかなんて覚えていない?
そんなもの覚えてない奴がC言語なんか使ってんのか?
>>752 答えたら答えたで「教科書が見つかったようです」と書くだけだろうが。
つまらんレスしてんじゃねーぞ。
>>753 優先順位さえ覚えていれば何段階あるかなんか覚える必要ないだろ。
無駄なもん覚える必要はない。
while( (ch = getchar()) != EOF) putchar(ch); これだと、putcharは改行するまで実行されてないってこと? それとも実際処理はしてるっていうか、そこは通ってるけど、バッファにためてるから 改行文字くるまで通り過ぎてるの?
優先順位を覚えるのはなぜ無駄じゃないの? よく使うやつ以外はかっこつけとけば覚える必要ないじゃん。 覚えるのは無駄だろ?
優先順位は15段階のようでう。
保守がアホかもしれないので、あまり知られていない演算子順位 に基づくような式記述は、全部括弧つけてますが・・・ どうせコンパイルすれば性能には影響ないんでしょ。
あ、バッファってのは入出力処理のためにあんだもんね。 演算とかはやってるんだ、きっと。 でも入出力は\nくるまで待ってんだ
>>757 普通の環境だと、改行を入力するまでは
getchar()が返って来ない。それまではバッファに入るだけ。
>757 今まで教えて貰ったこと/教えて貰うことをすべてFAQとして 公開するなら、教えてやるよ。
1+2*3を1+(2*3)なんて書くのか? +と*の優先順位を覚えておけば何段階あるかなんて覚えておかなくてもいいだろ。 そんなことも分からんのか?
767 :
デフォルトの名無しさん :02/11/26 22:17
>JPSがウザイと思う人の数>1
>>764 でも実際はchには1文字づつ入ってるんだよね?
だから\tとかスペースの数とか、数えられし。
>>774 同じだろ。正確には先に書いたほうが先に評価されるが。
おっとごめん前置++と前置--に見えた。 後置++の方が優先順位上。
高知が?スリーセブン?
>>766 おみゃーは足し算引き算を普段使ってないのか?
775は776を書き込むまでの1分間に教科書をみてしまいますた。
>>780 文章を書く時間を含めると難しいんじゃない?
>>781 そうとう ++ と -- は見間違えないと思うがな。
教科書見ないにしても絶対言い訳やな
>>782 バカ、教科書見ながらやってたから見間違えちゃったんだよ!
>>775 の
>先に書いたほうが先に評価されるが。
は前置の方が先に評価されると読める。
>おっとごめん前置++と前置--に見えた。
なのでこの言い訳はとても恥かしいと思う。
すなおに間違えたって書けばいいのに。プ
>>785 > >先に書いたほうが先に評価されるが。
> は前置の方が先に評価されると読める。
それは流石に、そう読めてしまうあなたの方が恥ずかしいと思うが。
>>786 「先に書いたほうが先に評価されるが。」
ってどういう意味かわからないんですが
どう読むんでしょうか?
788 :
ポインタ初心者質問です。 :02/11/27 00:16
int *a,b; b=100; a=&b; /*質問1*/ printf("%d\n",b); printf("%d\n",a); /*質問2*/ printf("%d\n",*a); printf("%d\n",&a); 質問1:この場合、bのアドレスをaに代入するわけですよね? 質問2:そうするとこの文の実行結果はbのアドレスだと思ったんですが、aのアドレスが出ました。 なぜですか? たぶん、初歩的なところが理解できていないのだと思うんですが、 1行目で宣言してるaに*がついているということは、 aはポインタ変数なんですよね。ここまではわかります。 で、ポインタ変数ってなんですか???ってことなんです。 メモリ内に*aの領域が作られるわけですよね。その内容にはアドレス以外入らないわけですか? とりあえず、質問2でなぜaのアドレスが出てくるのかが知りたい。
>>788 「C言語ポインタ完全制覇」を買って来い
↓先生、正解を教えてやってくだせい
790 :
デフォルトの名無しさん :02/11/27 00:20
>>788 漏れの環境での実行結果
100
1245048
100
1245052
794 :
ポインタ初心者質問です。 :02/11/27 00:33
実行結果は 100 6618620 100 6618624 です。 &aの実行結果6618624がbのアドレスですから、 6618620はaのアドレスでは?
&a が a のアドレスで
a (=&b) が b のアドレスに木マット労が!
>>794
すいません、もう一度頭の中を整理してきます・・・。
>>794 printf("%d\n",b); ←bの値
printf("%d\n",a); ←aの値(=bのアドレス)
printf("%d\n",*a); ←ポインタaが指すアドレス(=b)の値
printf("%d\n",&a); ←aのアドレス
>&aの実行結果6618624がbのアドレスですから、 違う。 aの"値"がbへのポインタ。
800!
!800
800!!
804 :
デフォルトの名無しさん :02/11/27 00:47
そろそろ次スレのことを決めといたほうがいいと思う。 続けるか、合流するか。
分離してる理由は?
<46>で立てちゃえ(w
(800 & 0xfe)!
810 :
デフォルトの名無しさん :02/11/27 00:56
>>805 俺に聞けのタイトルが気に食わなかった先走り厨が、勝手に次スレを立てた
って説と、
論争でスレ消費しまくるので純粋な質問スレを次スレと称して先走って立てた
って説と、
どっちかだったような気がする。
どちらにしろ、次にFULLになるであろうココが次をたてなければ問題にもならないのでは
813 :
デフォルトの名無しさん :02/11/27 01:01
>>811 このスレを立てたのは、
「俺に聞け」ってタイトルで伝統守れゴルァ派
が立てたので次が立たない保障はどこにもなし。
>>810 いずれにせよ先走り厨の糞スレってこった。
815 :
デフォルトの名無しさん :02/11/27 01:13
H・M・ダイテル+P・J・ダイテル著の「C言語プログラミング」 の練習問題解答集とか出てないんですかね・・・。調べたらなさそうな 感じですが、知ってる方いたら教えてください。
PJ抱いてる!?
どうせ、俺に聞けスレ続けるなら 入門書レベルの質問はC言語質問所スレに行ってくれ。 を1に加えればいいと思う。同種のスレが2つあることはあまり いいことじゃないしね。
ねぇねぇ、なんで opendir や stat はANSI標準じゃないの?
POSIX依存だから
>>818 特にstatなんて、かなりOSに依存するだろ。
>>817 初心者用に作られたスレならいいけど今の質問所スレは明らかにここの次スレを
騙ってるのが問題。
>>821 向こうに初心者、入門書レベルを任せればいい。となると、スレの
性質は質問所の方が正統になるわけで・・・。この際、「新・C言語は俺に聞け(仮)」
として1から始めるのもいいかもしれない。初心者お断りを掲げて。
新・C言語だとC99とかいろいろ勘違いするので、、 素直に「C言語〜聞けpart45」でいいんじゃ
K&R/ANSI Cは俺に聞け(パワーユーザ)
>>822 いや、だからむこうが勝手に初心者向けをうたって「質問所」を作ったのだから、
こっちが変えることはない。
こっちは質問も論争もあり。
あっちは質問のみ。
実質、差はないけどな(w
どっちが残ろうがいいんだけどよ。 迷惑被るのはこだわってる人以外の全員じゃねえか。 この質問はこっちだなとか考えるUSERはいねーっつーの こっちがとかあっちがとかいってねーで、統一してもらいたいもんだね それとも、もう一つ作るかぃ?
831 :
デフォルトの名無しさん :02/11/27 11:23
ふざけてスレを乱立させて面白いつもりかもしれないが、 やはり迷惑なので、このスレに統一する努力をしよう。 他のスレへの書き込みのたびに、こちらへ誘導する書き込みを 繰り返すのが良いんじゃないか?
おまいら 常にこっちのスレを上にあげとけ(任意) スレタイに「本舗」を付けとけ(強制)
厨どもが「元祖」や「本家」を付けるだけだろう。
あーあ、これじゃDel厨やRuby厨と大差ないな。
そもそも、スレタイがいけないんだよ。 スレタイにポインタ配列なんかつかうから、こっちがネタスレみたいになって・・・
>>835 同意。せめてポインタ配列は止めて、できるなら俺に聞けなんて
ネタみたいなスレタイもやめよう。
ということで新スレタイ案 C言語質問場
今、まだ // がコメントにならないCコンパイラってあります? あるなら具体的に名前を教えてほしいんだけど。
cc
さくら
はにゃ〜ん
MS-C は DOS 時代から // 使えてたしな。
843 :
デフォルトの名無しさん :02/11/27 12:21
LSI-C86試用版
845 :
デフォルトの名無しさん :02/11/27 12:28
あげ
ということで新スレタイ案 C言語留置場
ふっくら
いいこと思いついた! ここはC言語らしく C言語質問所 <45> (33) < このスレを上位byteとして、 対応するスレ(num)に char *c[45] = {"C言語のことは漏れに聞け!"}; < を or演算... …フッ
2 点。
とりあえずs=12が間違ってるな
/* Dim struct class c[45] != "C言語のことは漏れに聞け!" at Integer; */ ってどうよ?
>852 いつのレスだよ!
お前ら! 海原雄山はどうした!!
/* C言語質問所 <45> */ こいつはコメントにしとけばいいだろ
858 :
JPS ◆M0LaMzf5rY :02/11/27 16:54
質問だけど、ほとんどの関数でつかうような変数で、しかも値を変化させるものだったら、 いちいち関数の仮引数に渡すよりも、グローバル変数として宣言した方がいいでつよね? scanf("%s",&answer); if(answer == yes) だとしたら、mainとひとつの関数だけでいじる時は、その関数のstatic付きローカル変数として 定義したほうがいいんでつか?それともその場合もグローバル変数? else そうでつか・・・
>>859 誰がどこでその値を変更するかわかったもんじゃないので地獄を見ます。
>>858 どの程度までモジュール間の情報隠蔽を徹底するかと言うことだが、
場合によるとしか言いようがない。
ある程度大きいプログラムを書くときや、再利用まで考えたモジュール
を作るときは、グローバル変数で情報を受け渡すのは一般に良くない。
しかし、短いプログラムや、非常に頻繁に使われる共有情報まで
getter関数みたいなものを使ってアクセスする必要はないかも知れない。
たとえば、errnoとかPOSIXのgetoptみたいに、グローバル変数を使う場合もあ
る。
迷うようならグローバル変数はやめとけば無難。
>>858 本当にそうするべきだという場合を除き、グローバル変数は使うべきではない。
仮引数は、その関数の実行にどんなデータが必要かを明示してくれる。
引数の数が増える事が気になるようであれば、それは構造体を使うべき場合だ。
引数で渡す事によるオーバーヘッドが本当に深刻である場合には、グローバル変数
にする価値はあるが、それは最終手段であり、その前に改良できるロジックはそう
しておく事だ。
本当にそうするべきだという場合の例。 コールバック関数で、値を引数経由で渡す事ができない場合など。
863 :
デフォルトの名無しさん :02/11/27 17:23
独学でCを勉強中なのですが、いくつか質問。 ○×だけでもかまわないのでお答え願えたら有り難いでつ。 1,配列を使うメリットは、プログラムが読みやすい&簡潔になる事だけである。 2,構造体を使うメリットは、プログラムが読みやすい&簡潔になる事と、 関数間で受け渡しが可能な事だけである。 3,全てのプログラムをint main(void){ここ}に書くのであれば、ポインタを使う必要性はまったく無い。 4,プログラミングを行う中で、16進数を使う局面はポインタを除けばまず無いと言っていい。 5,C言語でプログラムを行う者(このスレッドで解答しているような方々)は、 1000個近くあるヘッダファイルの内容(関数定義)を全て記憶している。 以上です。どうかお願いします。
864 :
JPS ◆M0LaMzf5rY :02/11/27 17:23
>>860 なんだかむづかしい話だな・・・。
おれが思ったのは、値を変える関数に渡すときはポインタを渡さないとだめでしょ?
おれがよくデバックして思うのはポインタはやっぱむずいってことで。
(*pointer)++ってやるべきとこを
*pointer++ってしてたり。
それだったらグローバル変数使ったほうがいいのかなって。今までぜんぜん使わなかったから。
メモリを動的に確保したり、配列との関係以外でポインタを使うのと、グローバル変数を使うのって
セキュリティ以外の部分で、違いってあるの?実行速度が速いとか・・・
>>863 4、=> IOポートの入出力でつかわんか?といってみるテスト。
>>863 「読みやすい&簡潔」というのがどこまでを指してるのもよるが、
たぶん全部×。
>>865-867 ありがとうございました。1から出直してきます。
とりあえず、5が×なのでほっとしました。
869 :
JPS ◆M0LaMzf5rY :02/11/27 17:41
>>863 なけなしの知識で回答します
1、2
配列や構造体を使わないと、木とかリストとか出来ないし、
そもそもソートという概念が意味をもたなくなる。
3
たとえば可変長の配列を使うときには、ポインタ(配列の先頭)だけ宣言しておいて
その後ろをムクムクと伸ばしていくのに必要。
4
おれにはよくわからんが、このスレでその昔、ビット演算の話をしていたときに出てきたかもしれない。
5
たぶん覚えてはいないと思うけど、すべて実装できる人はいると思う。
すべて最後に(かもしれない)を付けて読んでね!
揚げ足取り。 1. char a[2]; と char a1, a2; では一般に前者の方が確保に必要なメモリが小さい。 2. 構造体を使った場合、一般にコードは煩雑になる。 3. 全ての処理を main() に詰め込んではいけない。 4. アドレスを低レベルで操作する場合を除き、ポインタを 16 進数で操作する事はまず無い。 5. C 標準のヘッダファイルは 1000 も無い。
>> 1000個近くあるヘッダファイルの内容(関数定義) そんなに無いだろ。 ANSI-Cで定義されている関数はせいぜい200個以下 日常的に使う関数はせいぜい100個以下 大体、君だって日本語の漢字や単語は1000以上覚えているはず、 で知らない言葉が出てきたら辞書で調べるだろ? プログラマも同じ、知らない関数やあやふやな関数が出てきたら マニュアルを読んで覚えていくんだよ。
872 :
JPS ◆M0LaMzf5rY :02/11/27 17:45
>>870 1ってどういうこと?一般にってことは実装依存?OSかな・・・
>>872 実装依存。
VC++ では、前者は 4 バイト、後者は 8 バイト食う。
コンパイラのオプションによっても違うし。
875 :
JPS ◆M0LaMzf5rY :02/11/27 17:51
>>873 マジ!?sizeof(char)が1ってのは規格だよね?
それってどういう事?配列だと連続して確保するから、前後の隙間がないとか?
てかsizeof(char) == 1でも、実際はそんなに違うもんなんだ。
>>864 実行速度は一概に言えないが、グローバル変数を直に読み書きする方が
速くなることが多いかな。
グローバル変数をなるべく持たない方が良いというのは、他のモジュールにつ
いて知る必要のあることが少なくて済むようになるからだ。
たとえば、extern int a, b, c; という外部変数を
int calc(int x) { ... }の中から参照していたとすると、
calcの動作を理解するためには引数だけでなくて、
プログラムの他の部分がa, b, cに何を代入するか、
極端に言えばすべて把握しないといけない。
しかし、もしextern変数で値を受け渡さないなら、calcのコードを見ただけで
その働きは完全に理解できる。
>>870 > 1. char a[2]; と char a1, a2; では一般に前者の方が確保に必要なメモリが小さい。
揚げ足取りのツバメ返し。68000系は「一般的」なのかな?
char a[2];
char c1, c2;
printf("a:%p %p\n", &a[0], &a[1]);
printf("c:%p %p\n", &c1, &c2);
結果
a:0x22feee 0x22feef
c:0x22feed 0x22feec
追加: OS:win2000 コンパイラ:gcc
>872 コンパイラのオプションでアセンブラコードに直せば判るよ
>>874 スタックの取られ方ってオプションで変わったっけ?
>>875 結局、char でも 32bit でアクセスした方が速いという事らしい。
3 バイト余計に取ってるという事だ。
881 :
JPS ◆M0LaMzf5rY :02/11/27 17:57
>>864 確かにグローバル使ったら、どこで何やってんのかわかりづらいよね。
んー。やっぱポインタ使うかー。
前に色んなソートの計算回数と比較回数を比べるソース作ったら
仮引数が7,8個ある関数できちゃって、しかもおれ変数の名前長いから
逆にわかりづらくなりそうだったんだけど。
それでもポインタってことね。納得しますた。
882 :
JPS ◆M0LaMzf5rY :02/11/27 17:58
>>880 DQNな質問だと思うけど、32bitCPUとか64bitCPUとかあるしょ?
あれって処理単位を32bitでやるって事?
>>881 > 仮引数が7,8個ある関数できちゃって
その引数って構造体で纏められないのか?
68kだと無いみたいだが、i386用のgccなら -mpreferred-stack-boundary=3とかやると、 スタック上のauto変数は8バイト境界にalignされたりする。
885 :
JPS ◆M0LaMzf5rY :02/11/27 18:02
>>883 今おもえばね。その時はとりあえず問題といてらくらいで、自分のソースには使わなかったから。
たぶん3,4個まで縮められる。家帰ったらやってみます。
てかマージソートの説明がどこにものってない・・・
886 :
JPS ◆M0LaMzf5rY :02/11/27 18:05
のってないってかわからない。 すれ違いかもしんないけど、ソートの実装方法っていろいろあるしょ? 微妙に違うとことかは、自分のわかりやすいのでいいのかな。 アルゴリズムが正しければいいよね?
>>877 VC4 の話だった。
VC6 は 1 バイト単位で取られてるみたいだ。
888 :
JPS ◆M0LaMzf5rY :02/11/27 18:06
「グローバル変数を使わない」以外にもうひとつ モジュール間の依存を少なくする手が「詳細を隠す」こと。 たとえば、ハッシュ表を使う関数があるとすると、 typedef struct hash *hash_t; hash_t hash_create(); void hash_add(hash_t, const char *key, const void *value); void *hash_get(hash_t, const char *key); void hash_del(hash_t, const char *key); みたいに、ハッシュ表の中がどうなっているかはモジュールの外に 見せないようにする。
>>873 嘘つくな
構造体と同じレイアウトにアラインメントされる。
とりあえず謝っとく。 正直、すまなかった。
>>869 わかりやすい説明ありがとうございました。2と3は特に助かりました。
>>870-871 ANSI-Cの関数を全部覚える事を目標にして頑張ります。
>>894 覚えるんじゃなくて、理解する事を目標にね。
ライブラリを見て、アルゴリズムを理解したら、自分で実装。
あとはこれの繰り返し。だれもすぐに出来る香具師なんていないよ。
がんがれ、プログラマの卵。
スレタイのことだけど、誰かふさぎこみたいなAAきぼんぬ あと、雑談スレほしいな。ここ質問スレだからやりづらい。
ここを雑談スレ、C言語質問所が質問スレ。
K&Rの演習1-9 二つ以上の空白文字を1つの空白に置換して出力ってのはこれでいいの?一応出来てるけど。 #include <stdio.h> int main(void) { int ch,flag = 0; while( ( ch = getchar() ) != EOF ) { if(flag == 0) { if(ch == ' ') flag = 1; putchar(ch); continue; } else { if(ch != ' ') { putchar(ch); flag = 0; continue; } } } return 0; }
>>898 C言語雑談スレじゃないじゃん。てきとーなこと言ってんじゃねーぞ。
>>896 > スレタイのことだけど、誰かふさぎこみたいなAAきぼんぬ
AAなどCには不要、Cには飾りなどいらない。
> あと、雑談スレほしいな。ここ質問スレだからやりづらい。
雑談してもかまわんよ。
「結 果 は 未 定 義 だ け ど な」
>>899 > if(flag == 0)
キモイ。if(!flag)にしろ。
904 :
デフォルトの名無しさん :02/11/27 19:53
>>903 分かりますた。
あとさ、'\b'ってバックスペースでしょ?
このソースうまくいかない・・・ #include <stdio.h> int main(void) { int ch; while( ( ch = getchar() ) != EOF ) { if(ch == '\b') { putchar('\\'); putchar('b'); } putchar(ch); } return 0; }
908 :
デフォルトの名無しさん :02/11/27 20:03
>>899 do {
ch = getchar();
putchar(ch);
while (ch == ' ')
ch = getchar();
} while (ch != EOF);
910 :
デフォルトの名無しさん :02/11/27 20:05
というか激しくバグ餅だな
912 :
デフォルトの名無しさん :02/11/27 20:08
while ( (ch = getchar()) != EOF ) { putchar( ch ); while ( ch == ' ' ) ch = getchar(); }
>>913 (・∀・)イイ!
さすがでつね。
ばぐる可能性なし?
916 :
デフォルトの名無しさん :02/11/27 20:13
>>913 下のgetcharでEOFになったら?
918 :
デフォルトの名無しさん :02/11/27 20:15
getcharでEOFが返った後、再度getcharした場合の挙動って どうなってたっけ?
とあるサイトに「獲得したメモリを free しなくても構わない、という考え方の方 が一般的であるようです」 と、書いてありましたが本当なんでしょうか?
920 :
デフォルトの名無しさん :02/11/27 20:17
はい先生質問! 913ので下のgetchar()でEOFになると下のwhile抜けて 上のwhileの ( (ch = getchar()) != EOF ) にいきまつよね? オレの考えだと、EOFはここで上書きされてしまうと思うんですが。
規格書で定義されている関数とマクロを数えてみたら、500以上あるな。 思ったより多い。ぜんぜん知らないやつもいっぱいある。 ↓どんな関数(マクロ)か分かる? conj fesetenv wcstoumax islessgreater raise snprintf bsearch strxfrm strcspn strpbrk vswprintf wcsrtombs
>>913 スペース直後の文字が漏れなくスキップされないか?
冗長に見えるが、これ以上簡略化できんだろう。
ch = getchar();
while(ch != EOF){
putchar(ch);
if(ch == ' ')
do { ch = getchar(); } while(ch == ' ');
else
ch = getchar();
}
>>923 bsearch() 知らんのは、qsort() 知らんのと同じくらいまずくないか?
>>926 bsearchは知ってたが規格に入ってたとは知らなんだ。
bsearch なんか知らんかった 自分で作った方が早くない?
>>924 925は嘘ですた。すまそ。
スペース後の文字出力されず・・・
>>925 907 と比べられても全く意味無いんだけど・・・。
913 と比べてくれよ。
ブランクって何?調べたら改ページってあるんだけど。 \fのこと?入力するときはなんてやればいいの?
垂直タブ! \v
938 :
C言語は俺に聞け45 :02/11/27 20:33
質問は、「通じる」 日本語で書け。 ↑ これも追加してくれ。
while((ch = getchar()) != EOF){ putchar(ch); if (isspace(ch)) { while (isspace(ch = getchar())) ; ungetc(ch, stdin); } }
#include <stdio.h> int main(void) { int ch, flg = 0; while(( ch = getchar()) != EOF ) { if(ch == ' ') { if(flg) { putchar(ch); flg = !flg; } continue; } putchar(ch); flg = !flg; } return 0; }
>>940 > if (isspace(ch)) {
おいおい・・・
system( "sed 's/ +/ /g'" );
int ch, flg = 0; while(( ch = getchar()) != EOF ) { if(ch == ' ') { if(flg) goto JUMP; continue; } JUMP: putchar(ch); flg = !flg; }
while ((c= getchar()) != EOF){ if (isspace(c)){ while (isspace(c= getchar())) ; putchar(' '); } putchar(c); }
>>943 入力に" xx xx xx xx"を与えたら、出力が"xxxxxxxx"になったけど?
>>950 ブランク文字の後にEOFになったらどうすんの?
K&Rはungetc大好きだからな。 ungetc使ったやつがおそらく著者の想定した答だろう。
>>950 だ〜か〜ら〜。
Tab 文字とか来たら仕様通り動かないでしょうが次スレよろしく。
while ((c= getchar()) != EOF){ if (isspace(c)){ while (c != EOF && isspace(c= getchar())) ; putchar(' '); if (c == EOF) goto OUT; } putchar(c); } OUT:
K&Rで「空白」といったら「ホワイトスペース文字全般」じゃないの? まあ、いずれにせよ本質的な問題じゃないね。
はい。じゃこれで決定版ということで。 while((ch = getchar()) != EOF){ putchar(ch); if (ch == ' ') { while ((ch = getchar()) == ' ') ; ungetc(ch, stdin); } }
>>956 空白の次に改行があったら、その改行はスキップされるがよろしいか?
int ch, last_char_was_space = 0; while ((ch = getchar()) != EOF) { if (! last_char_was_space || ch != ' ') putchar(ch); last_char_was_space = (ch == ' '); }
962 :
デフォルトの名無しさん :02/11/27 21:32
>>958 ungetcってEOFも戻せるんだっけ?
ungetc(c, fp)で、cがEOFだと失敗して、fpは影響を受けない。
#include <stdio.h> int getchoo(void) { static int last = EOF; int ch; if ( last != EOF ) { ch = last; last = EOF; return ch; } ch = getchar(); if ( ch != ' ' ) return ch; while ( (last = getchar()) == ' ' ); return ch; } int main(void) { int ch; while ( (ch = getchoo()) != EOF ) putchar(ch); return 0; }
戻せないらしい
>>965 ん?
>>958 はだから正しく動くよ。
・ungetcが失敗してstdinはEOF状態のまま。
・次のgetcharでもう一度EOFが返る。
968 :
デフォルトの名無しさん :02/11/27 21:39
誰か次スレよろ。
質問します。 int *a,b; ここで宣言した*aは「ポインタとして使うためにaというスペースを作る」という意味ですか? このaに普通に数字を代入すると、その数字もアドレスとして認識されるのですか? ですよね?
だまれ
971 :
デフォルトの名無しさん :02/11/27 21:51
>>969 「普通に数字」って?
整数型の値なら、そのまま代入はできないよ。
972 :
デフォルトの名無しさん :02/11/27 22:00
if(c == ' ') と if(isspace(c)) ってなにかちがうのですか?
>>971 本当ですか?
int *a;
a=1000;
ではエラーがでるのですか?
974 :
デフォルトの名無しさん :02/11/27 22:02
>>969 int *a; ってのは、int *型の変数aを宣言する、と読む。
で、変数aに代入できるのはint *型の値だけ。だから
a = 10 とかは出来ないよ。10はint *型じゃなくてint型だから。
>>973 「本当ですか?」と聞く前にやってみやよ。
>>972 isspace() が何なのか調べてみようとは思わないのか?
>>973 とりあえず、「数字」 と 「数値」 を区別してくれ。
978 :
デフォルトの名無しさん :02/11/27 22:06
>>977 知らないなら知らないっていいなよ、お・ば・か・さ・ん
次スレのテンプレ、自助努力というキーワードを盛り込んでくれ。
>>975 どんな処理系だ?そりゃ? gccでやってみたら、
> warning: assignment makes pointer from integer without a cast
って出た。
>>977 違う。
isspace() は C 標準の関数だから、普通に C を勉強していれば知っているはずだ
と言った。
誰か次スレ〜!! 漏れ立てらんね
984 :
デフォルトの名無しさん :02/11/27 22:12
次スレのタイトルは以下でお願いします char (*c)[44] = "C言語のことは漏れに聞け!";
986 :
デフォルトの名無しさん :02/11/27 22:14
>>984 いいけど、それ文法違反やんか。型が違うぞ。
1000!
990
>>986 文法違反ではありません。数字は45でお願いします。
>>974 わかりました、ありがとうございます。
具体的にint *型の値というのはどのようなものなんでしょうか?
つまり具体的なアドレスならば代入可能なんですか?
>>794 のような6618624とかでもダメですか?
994 :
デフォルトの名無しさん :02/11/27 22:17
995 :
デフォルトの名無しさん :02/11/27 22:18
1000
_ハ、 _ハ、 (- ・ ヾ (- ・ ヾ  ̄\ ヾ  ̄\ ヾ (  ̄ ̄ ̄ヽヾ、 (  ̄ ̄ ̄ヽヾ、 | 〈 ゞ | 〈 ゞ / /| | ̄ ̄/ / | | / /| | ̄ ̄/ / | | // ヽニニ// ヽニニl. // ヽニニ// ヽニニl // //. // // ` ` .` `
998 :
デフォルトの名無しさん :02/11/27 22:19
1000
>>974 重箱の隅だが、void* 型や int[] 型も代入できるぞ。
1000 :
デフォルトの名無しさん :02/11/27 22:19
このままスレが立たずに1000までいったら終了としましょう。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。