1 :
v(^o^i)d :
04/04/27 12:51
2 :
デフォルトの名無しさん :04/04/27 12:53
3 :
デフォルトの名無しさん :04/04/27 12:54
因数をちなみすうと呼べばいいんだよ
ヒッキー数
これから引数はヒッキーってことで。
6 :
デフォルトの名無しさん :04/04/27 13:41
>>996 > 独学の人もインスウになりがちだろうな。
あと、その人が本を書いたりして、それを読んだやつもなるな...以下再帰的に...
7 :
デフォルトの名無しさん :04/04/27 13:43
同感。 ちなみにオレは、引数を「いんすう」と読んだり、 カッコの内側をあけているようなやつの書いたコードは信用しないことにしている。 ろくにCを理解していない可能性高いので。いままでの経験則で、1回も例外がない!
8 :
デフォルトの名無しさん :04/04/27 13:46
>>6 本に読み方なんか書いてないだろ。ふつう。
独学ってのは、自分で本読んでやるのも含めての話だ。
だれか人にならったのなら、「音声」で聞くから思い込みしないだろうけど、
本だけ読んで自分でやったやつは「いんすう」と読んでしまいがち、だという話題なのだ。
規約スレ逝け阿呆
10 :
デフォルトの名無しさん :04/04/27 13:50
うちの学校で教科書につかってる 「作ってわかるCプログラミング」技術評論社/日下部陽一著 ISBN477411328X 2.289円 には、ちゃんと読み方が書いてありましたよ。
11 :
デフォルトの名無しさん :04/04/27 13:54
うちの学校のR子先生は、若くてかわいいんですが、 改行のエスケープ(バックスラッシュのあとにnを書いたもの)を 「えんえぬ」って言うんですー 誰かなんとかしてください! 野郎の教師だったらけり入れてやるんだが...。
12 :
デフォルトの名無しさん :04/04/27 13:57
3項演算子の正式名を述べよ(1点)。 演算子「.」の名前を言え(1点)。 演算子「->」の名前を言え(1点)。 単項演算子を8種類あげよ(8点)。
13 :
デフォルトの名無しさん :04/04/27 13:58
11種類書いたら減点でしょうか?
15 :
デフォルトの名無しさん :04/04/27 14:01
ホワイトボードにもわざわざ円記号書くんですよ...もうあほ^H^Hかと...
スレ違いを続けるお前もアホ
やれやれ、えんえぬが業界用語だってことも知らんとは
18 :
デフォルトの名無しさん :04/04/27 14:09
若くてかわいい先生にC言語を教えてもらえるとは・・・・
>>11 に殺意を覚えた。
訳した人間にセンスがないんだな。 横文字をカタカナでそのまま読むと無難。 パラメターとか オペレーターとか オペランドとか ニーモニックとか アーギュメントとか アサインメントとか ファンクションとか。
エムネモニック
21 :
デフォルトの名無しさん :04/04/27 14:13
あ、Javaなのですが > 18
若くて可愛い先生はCなんてやらんってか!!!
23 :
デフォルトの名無しさん :04/04/27 14:15
Cなどもはや若くてかわいい先生の眼中にはないか。
24 :
デフォルトの名無しさん :04/04/27 14:17
Cは某男性講師です。
ファイルをオープンして、そのファイルの中の、ある1行を削除したい場合、どうすればよいのですか?
ファイルAの5行目を削除したい場合 1. ファイルBにAの5行目以外をコピーする 2. ファイルA削除 3. ファイルBをファイルAにリネーム
mv file file.orig sed '5d' file.orig > file
↑それはC言語じゃないんじゃないか?
そのうちperlとか出てくるのかも。
30 :
デフォルトの名無しさん :04/04/27 15:02
仕事に合った道具を選ぶ、という意味ではawkに優るものなし。
31 :
デフォルトの名無しさん :04/04/27 15:40
縦5×横5のマスに○×をランダムで表示させる。 毎回同じであってはならない マスの左と上には座標数字を表示 マスの2行下に座標指定を‘XY’で入力する ‘00’を入力したら現在状態を破棄し、最初から始める ‘001’のように入力したらエラー、再入力 ‘Z’を入力で終了する 座標指定入力において何を入力しても不正な動作はしない。 ‘66’とか入力したら再入力にする 座標指定された位置、及び上下左右のマークを反対にする 指定された位置の上下左右が範囲外の時、何もしない。該当する部分のみ反対にする。 全マス同じマークになったら‘You win’を表示 全マス同じマークになったら何を入力しても最初から始める 条件は グローバル変数はマスに使うtableのみ ほかの変数はグローバルは認めない メイン関数の中身は 初期化処理する関数 ランダムで○×を表示する関数 座標を入力する関数 マークを反転させる関数 その結果を表示する関数 全マス同じマークか判定する関数 You winを表示する関数 どうかお願いします。m(_ _)m 本当に泣きそうです・・・
Do your best !
ummm, I can't ...
「入力」は手書き文字で入力する必要があります
マスを表示するというのがさっぱり解からん。 やはりネタか・・・。
マスをカくんだろ。
マスカケ!マスカケ!マスカケーーーーーーー!!!
R子先生お願いします(;´Д`)ハァハァ
くだらんことでスレのばすな。
マスを表示させるんじゃなくて、 5×5で○×表示だと思うぞ
でもそれだと「グローバル変数はマスに使うtableのみ」ってのが わからない。も〜どうでもいいか〜。
○と×に対応させる値を格納するマスがいるんだろ、多分 勉強し始めて日が浅いから分からんが
47 :
デフォルトの名無しさん :04/04/27 18:02
> ↑それはC言語じゃないんじゃないか? main() { system("mv file file.orig"); system("sed '5d' file.orig > file"); }
↑流れ読めよ・・・
49 :
デフォルトの名無しさん :04/04/27 18:39
読んだらそうなるだろ。 (おれも同じコード書こうと思ったら先にかかれた)
>>29 の時点でsystem()使うって分かるだろ。
こんなだからR子先生が相手してくれないんだ
\\ はーるがきーたー♪はーるがきーたー♪どーこーにーきたー♪ // ♪ \\ にちゃんにきーたー♪ム板にきーたー♪このスレにーきたー♪// ♪ ♪ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧ ∧∧ ♪ ♪ ∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*) ♪ (゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧ ♪ ∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)♪ ─♪──(゚0 ゚*)| ∪(゚0 ゚*)| ∪(゚0 ゚*)| ∪(゚0 ゚*)| ∪(゚0 ゚*)| ∪(゚0 ゚*) | ∪ ─♪── | ∪ | | ∪| | | ∪. | | | ∪| | .| ∪| | | ∪ | |〜♪ ♪ | | U U .| | U U | | U U. | | U U .| | U U | | U U ♪ U U U U U U U U U U U U
↑それはC言語じゃないんじゃないか?
55 :
デフォルトの名無しさん :04/04/27 21:13
で,共用体ってなんに使うわけよ 応用例キボンヌ
union REGS { struct XREGS { unsigned short ax, bx, cx, dx, si, di, bp, ds, es, flags, cflag; } x; struct HREGS { unsigned char al, ah, bl, bh, cl, ch, dl, dh; } h; }
レジスタ操作するときとか。
でも、実際問題キャストあるから、共用体は無くても困らない。
?
データ節約
variant 型作るときとか。 union event { struct mouse_event { int type; int x; ... } mouse; struct keyboard_event { int type; int key; ... } key; ... };
共用体が本当に活躍するのは、コンピュータ言語を 作成しているときだと思う。
63 :
デフォルトの名無しさん :04/04/27 22:27
char hoge[1024]; struct AAA *aaa; struct BBB *bbb; aaa = (struct AAA *)&hoge[0]; bbb = (struct BBB *)&hoge[0]; 実際上記のようなやり方と、共用体の違いってなんだ?
共用体の方がスマート。
>>56 の例でやってみてよ。
共用体の方が直感的。
でた、魔法のキーワード「直感的」
共用体の方がデバッグが楽。
共用体のほうが官能的。
>>66 FILE *fp より FILE *out の方が良くなーい?
共用体のほうが猟奇的。
>>63 charだとアライメントが保証されない。
72 :
デフォルトの名無しさん :04/04/28 04:46
「アライメントが保証されない」が意味不明だな。 かなり知ったかぶりっぽいな。 ちゃんと知識を整理して出直してこい。
74 :
デフォルトの名無しさん :04/04/28 08:59
いいや71のほうが理解していないね。
システムにメモリ管理機能がなくて、メモリが足りない時ぐらいしか、使わなくて良いんじゃない? 共用体って。
メッセージ長が可変なデータグラムで通信する場合 (UDP/IP でも Mailslot でもいいんだが) に使わないか?<union
エンディアン変換とかに使える<union
78 :
デフォルトの名無しさん :04/04/28 13:00
変換じゃなくて判断だろ。
79 :
デフォルトの名無しさん :04/04/28 14:57
あのう、質問がありまつ。。。 ウンコの臭さを測るプログラムってどうやって作るんですか? ちなみに、ウンコの臭さ基準としては、以下の通りです。 level 1 周りの草木を枯らす。 level 2 山がなくなる。 level max 測定不能。。。
80 :
デフォルトの名無しさん :04/04/28 14:58
仮説によると、level maxでは、ビックバンが生じるそうです。。。
ポインタ使い方は分かったけどイマイチ有効的な利用法が分からんす どんな時にどんな風に使えばいいのか頭の中で上手く思いつかない…
全く面白くない厨房のネタは要りませんのでお引き取り下さい。
全く面白くない厨房の回答は要りませんのでお引き取り下さい。
85 :
デフォルトの名無しさん :04/04/28 15:10
>84 お前がそんな偉そうな事言える資格なんてどこにあるのかねぇ。
87 :
デフォルトの名無しさん :04/04/28 15:13
88 :
デフォルトの名無しさん :04/04/28 15:18
全く面白くない厨房の回答は要りませんのでお引き取り下さい。
ネタか?だるいわあ
90 :
デフォルトの名無しさん :04/04/28 16:00
#include <stdio.h> #define FILENAME "temp.txt" int main(void) { FILE *fp; fp=fopen("FILENAME", "a"); fp=fopen("FILENAME", "w"); long int buff=0; while(1) { fprintf(fp, "%ld\n", buff); buff++; } fclose(fp); return 0; }ココまで書いたんですけど、「一部数字として読めないよう」にという 要求があったときにその数字の先頭に抹消フラグを立てるか 何かその数字を読めなくするプログラムを教えてください 例えば if(とある番号の削除) fprintf("その番号の先頭にchar文字をつけ%ld") とか。どうやれば良いでしょうか?
91 :
デフォルトの名無しさん :04/04/28 16:08
> fp=fopen("FILENAME", "a"); > fp=fopen("FILENAME", "w");
>>90 そんなもん、読み込む側の仕様次第でどうとでも変わる。
>>91 何か?ファイルが無ければ作り、作った後でwriteモードにしてるのだが
>>90 数字の先頭にその数字を数字として読めなくするフラグを立てたいだけですよ?
読み込む側の仕様って?
>>93 FILENAME という名前のファイルが出来るであろう。
つか、態々"a" で開いといて (しかもクローズしないまま) "w" でまた開くってのはどーゆー了見だ。
出来るだけでしょう?確かに書き込まれるが w は念のため作っておいたまで
97 :
デフォルトの名無しさん :04/04/28 16:52
>>95 しかもこの馬鹿は"w"だと新規作成は行われないと思っているぞ。
#define FILENAME "temp.txt" としているのに、 fp=fopen("FILENAME", "a"); というのは、アフォとしか思えないのだが。
粗探しに精一杯で肝心の 数字の先頭にその数字を数字として読めなくするフラグを立てたいだけですよ? に何も言わない御前等のほうがアフォだw
>>96 おまいが作りたいファイルの名前は "temp.txt" じゃないのかと。
あと、念の為っていうなら fopen が成功したかどうかのチェックくらいしろ。
まだ突っ込みドコロがあるが (無限ループとか) 置いといて、
結局何がしたいのか判らん。
>一部数字として読めないよう」にという
>要求があったときにその
どうやってそれをプログラムに伝えるんだ?
101 :
デフォルトの名無しさん :04/04/28 16:56
>>99 92が「読み込む側の仕様次第でどうとでも変わる。」と言っているだろう。
>>101 それに対して数字の先頭にその数字を数字として読めなくするフラグを立てたいだけですよ?
といってるだろ
どうやら、「数字」なるものが書き込まれるようだ。
104 :
デフォルトの名無しさん :04/04/28 16:59
>>102 そのフラグについて具体的になにも言っていないだろ。
105 :
デフォルトの名無しさん :04/04/28 17:01
数字として読めないようにしたいなら、数字でないもので上書きすれば。
>>104 そのフラグについてはじゃあ数字の先頭に"?"をつけてやってみてくれ
これで良いか?
107 :
デフォルトの名無しさん :04/04/28 17:03
>>106 while(1)
{
if(よめないようにしたい)
fputc('?',fp);
fprintf(fp, "%ld\n", buff);
buff++;
}
>>90 はプログラムの前に日本語を学んで欲しい。それで問題の
半分は解決するであろう。
傍から見てる人間にとっちゃ良スレだあ
>>99 この手の 「自分の考えを人に伝える能力が欠落しているタイプの人」 に
「どういう意味?」 などと訊いても、正しく伝わるまでには 100 レス程かかる
可能性が高いです。
>>107 それだと読めないようにしたくない行にまで"?"がつくYO
イタタタタ・・・
このスレ、いつの間にこんなに香ばしいスレになったの?
自分の間違いを指摘されても逆に噛みつく>90に萌え
「春か…」「春だな…」 とか言ってるうちに GW 突入か…
結局出来ない>114に萌え
ここはC言語だけじゃなくて日本語も教えてくれるんですか?
教えません。Cで訊きたいことがあったら日本語を勉強してからおながいします。
(´・д・`)さっきから何が出来ないんだろう
粘着ウザ
すっかり宿題スレになっちまったなあ。 こんなのより、「scanf() 使うな」でループしたほうがよほどマシ
別にGWでなくともこの時間帯は学生さんが多いですからねぇ。 自然にそうなるでしょうw
#include <stdio.h> #define FILENAME "temp.txt" int main(void) { FILE *fp; fp=fopen("FILENAME", "w"); long int buff=0; //デフォルトで作られる数字 long int cchange=0; //抹消用変数 while(1) { fprintf(fp, "%ld">\n", buff); while(1) { if(数字抹消) /*ここに読みたくない数字探索をして 数字を書き換えするパターンマッチングを用意*/ fprintf(fp, "?%ld">\n", buff); cchange=buff; } buff++; } fclose(fp); return 0; }こんな感じでいいんじゃないでっしゃろか
(´-`).。oO(どこが改善されたんだろう…?)
129 :
デフォルトの名無しさん :04/04/28 19:09
しかもエラーだし
あほか。おまいは。概要を書いただけでコード書いたわけじゃないし
>>90 >>127 何がしたいのかぜんぜんわかんねえ
とりあえず「抹消なんとか」機能がないバージョンの
全ソースさらしてみ(もちろんちゃんと動くやつ)
テレパス同士でやらせとけ。
133 :
デフォルトの名無しさん :04/04/28 21:12
コマンドプロンプトでコンパイルしたんですが、 エラーインクルードファイル’stdio.h’をオープンできない と表示されました。 何でできないんでつか?
無駄な行間から察するにネタでしょ?
多分君が使ったのはコマンドプロンプトじゃなくて、○マン○プロンプトだったんだよ。
136 :
デフォルトの名無しさん :04/04/28 21:19
いえ。汁。ほんとに困ってるんでつが。 環境はボーランドの無償のやつと、メモ帳を使ってみたんでつが。 インクルードフアイルがオープンできません。 涙
138 :
デフォルトの名無しさん :04/04/28 21:25
開発支援ツールか。いってみます
139 :
デフォルトの名無しさん :04/04/28 21:26
なんで漏れが猿Cにいたのがわかったんだろう
140 :
デフォルトの名無しさん :04/04/28 22:03
133でつ。支援ツールのおかげでできますた。39
>>136 781:デフォルトの名無しさん []:04/04/28 18:06
こんにちは。
ボーランドC++えじたとコンパイラパス(必須)が
わかりません。汁。
汁って何?
143 :
デフォルトの名無しさん :04/04/28 23:48
141さん>>誤解ないようにいいますと 「汗」です。いや、場が楽しくなるかとおもって、、、
確かに、たった一名だけ楽しくなったようだ。
145 :
デフォルトの名無しさん :04/04/29 00:20
そう言えばいまだにorzの意味がわからん香具師がいるらしい。 汁。........orz
OTLとか_noとかもなあ
147 :
デフォルトの名無しさん :04/04/29 00:29
で、汁ってなに?orzはわかるが。
あー汗のつもりか。
149 :
デフォルトの名無しさん :04/04/29 00:54
OTLがSTLの仲間だと思ってる人いたなあ
いや、OTLってあるよ。OracleのTemplate Library そこそこ有名だとは思うんだけど。
まじか・・・OTL
Oracle, Odbc and DB2-CLI Template Libraryというやつだな。
すみません、学校の宿題で、 「ソースプログラムをコンパイラしようとして失敗した。 具体的にどういう処置をとればよいか」 ってでたんですけど、どう答えればいいんですか?
どこに行けばいいですか?
スレ一覧から宿題スレ探せ
えらいあいまいな宿題だな
159 :
デフォルトの名無しさん :04/04/29 12:40
あきらめて醤油にする。
160 :
デフォルトの名無しさん :04/04/29 16:42
つか、問題文がその通りに書かれてたのだとしたら、まずその訂正 からやりたくなるのだが。
遅レススマソ
>>83 なるほど、少しやってみます
>>86 まだ勉強中なので構造体受け渡しまで行ってないす…
>>87 は自分とは別人なので誤解しないで…スタックなんて使えません(´д`;)アセンブラ?
質問するのも一度、一通り勉強してからでないと駄目ですね、失礼しますた
勉強でそこまで行っていないなんて、何の言い訳にもなりませんよ?
小学生なら真っ当な言い訳になります。
やってない事聞かれてもやってないとしか言えないよ…(つД`)
小学生でもできるやつはでき(ry
小学生でOS組んでる奴いるらしいね
169 :
デフォルトの名無しさん :04/04/29 18:39
windowsxpでborlandのbccを使っているんですが、グラフをしたいのですが、graphics.hがないのでそれに変わるのはありませんか?
スレタイも読めよ
自分で突っ込むが、も、ってなんだよ・・・。
>>171 スレタイも空気も読め
ってことかと思った。
173 :
デフォルトの名無しさん :04/04/29 22:58
こんばんは。質問です。 プログラムファイルのあるディレクトリを取得するにはどうしたらいいんでしょうか。
174 :
デフォルトの名無しさん :04/04/29 23:08
つまり、カレントディレクトリがどこであっても、 実行ファイルのあるディレクトリを知りたいというわけなんです。
どうもありがとう。 とりあえず自分の環境ではargv[0]で入ってきました。
char **hoge と char *hoge[] に見た目の違い以外の違いはありますか? mainの引数はint,char **で決まりですか? const intとか、const char *const *constとか、上記と全く違ったりとかしないんですかね? 戻り値はvoidとかintとか、環境依存でイロイロあるようですが。 unistd.hというのは、UNIXの標準なんたら、の略ですか?システムコールと何か関係があるような雰囲気があるきがしますが。 プログラム歴があさく、ほとんどわかりません。よろしくお願いします。
>>177 あります。
関数の引数の場合は、配列はポインタと同義なので、それです。環境によってはenvironとかあったりします。
全く違うということはないでしょう
戻値はintです。
そんな感じです。
179 :
デフォルトの名無しさん :04/04/30 01:16
> 関数の引数の場合は、配列はポインタと同義なので これはあやまりです。
同義ならば、例えば配列の配列、ポインタの配列、ポインタのポインタが
同義になってしまう。
>>179 ではないので真意はわからんが。
でも引数で渡された場合、区別ないよね。 -------------------------------------------- #include <stdio.h> void test(int *p, int a[]){ printf("sizeof(p) = %d\n",sizeof(p)); printf("sizeof(a) = %d\n",sizeof(a)); } main(){ int *px; int ax[100]; printf("sizeof(px) = %d\n",sizeof(px)); printf("sizeof(ax) = %d\n",sizeof(ax)); test(px,ax); } ------------------------------------------- >結果 sizeof(px) = 4 sizeof(ax) = 400 sizeof(p) = 4 sizeof(a) = 4
>>177 宣言
extern char **hoge;
と
extern char *hoge[];
は全く異なる。
あとは
char **hoge;
という定義はできるが、
char *hoge[];
という定義はできない。
せっかく
"関数の引数の場合"
って書いてあるのに
>>179 と
>>181 の馬鹿がアホなこと書きやがって。
俺は
>>179 は関数の引数でも同じなのは
一番外側のインデックスだけという意味かと思ったが。
実際先走ってしまったのかどうかはわからん
>>184 アホなことは書いてないだろ。
>> 関数の引数の場合は、配列はポインタと同義なので
「配列はポインタと同義」じゃなくて「int a[], は int *a, と同義」
って書いてあれば別だけど。
そして名古屋の一角でウェイトレスがカクテルをこぼす
188 :
デフォルトの名無しさん :04/04/30 05:32
パーセント(%)を計算してprintfで表示させると「cl」でコンパイルすると%がうまく表示されません。 「bcc32」でコンパイルするとちゃんと表示されます。原因がわからなくてこまってます。 printf("plynum[%d]=%d, %2d%, ", ply, plynum[ply], 100*plynum[ply]/916797); これで4番目、一番右の%が問題の箇所です。
%%
>>189 レスありがとう
printf("plynum[%d]=%d, %2d%%, ", ply, plynum[ply], 100*plynum[ply]/916797);
にしましたが状況はかわりません。意味を取り違えてるんでしょうか?
>>190 すみませんわかりにくくて
たとえば15%と表示させたいのに15としか表示されないってことです
>>191 それでいいと思うけど。
ちゃんとコンパイルしなおした?
>>193 コンパイルするファイルをまちがえてました。
やりなおしたらちゃんとでました。
Thanks!
BCCでDLL作ってるんだけど、 fp_output = fopen("hoge.txt", "w"); fprintf(fp_output, "test text\n"); fclose(fp_output); とかやってもちゃんと出力されないのよ。 fprintfの戻り値をチェックしても書き込んだ数と同数だし、 どっかに出力はされてるらしいんだけど…。 DLLでファイル出力(テキスト)する場合、 fprintf fput fputs とかのどれがいいの? なるべくfprintf使いたいんだけど…。
196 :
デフォルトの名無しさん :04/04/30 08:56
> でも引数で渡された場合、区別ないよね。 ぼけ。 それは2つの事実によって「そうなる」だけ。
197 :
デフォルトの名無しさん :04/04/30 09:03
つまり、仮引数にfunc(char *a)とかいてあろうが、 func(char a[])とかいてあろうがどちらも「ポインター」であり「配列ではない」という ことだ。それがわかってないくせにCを理解しているとかいうのはぼけである。 もっとわかりやすくいえば、foo(int a)と宣言してある関数に、 foo(b);のように実引数としてbという変数を渡そうが、 foo(10);にように定数を渡そうが、 仮引数側ではaという「変数」にそれらがそれぞれコピーされているわけであり、 仮引数aが定数なわけではなく、aは変数なわけだ。
198 :
デフォルトの名無しさん :04/04/30 09:05
>>186 > アホなことは書いてないだろ。
>>> 関数の引数の場合は、配列はポインタと同義なので
> 「配列はポインタと同義」じゃなくて「int a[], は int *a, と同義」って書いてあれば別だけど。
いや、むしろ後者のほうが正解だ。
こいつは正真正銘のぼけだな。
199 :
デフォルトの名無しさん :04/04/30 09:09
なにやら朝からもめているようですが、 そのあたりは日下部先生の『作ってわかるCプログラミング』(技術評論社)が 詳しくていねいに説明してありますよ。 ほかの入門書も数冊読んだことあるが、そのあたりの説明が全然足りないか、 もしくはひどいのは著者自身が理解していなくて、いいかげんなウソが書いて あったりする。 うちの職場で新人用に独習書を選定した3年前の話なので、いまではもっと いい本がでているかもしれないけどね。
>>195 スタート → 検索 → ファイルやフォルダ
で、"hoge.txt"を検索。
見つかるなら、スレ違い。
fprintf() の使用は、問題ない。
>>200 195です。
ファイルの生成までは行くんです。
問題は、そのファイルに何も書き込まれていないの。
念のために、w+ とか a , a+ とかでもやってみたけど、ダメでした。
fprintf の使い方間違ってないよねぇ…なんでだろう…。
なんか質問する側なのに日本語がヘンだ… つまるところ 1. fprintf の戻り値は書き込もうとしている文字数と同じ 2. hoge.txt はちゃんと生成される 3. hoge.txt には何も書きこまれていない で、ここで疑問なのは、 fprintf は書き込み成功した数を戻すはずなのに エラーが戻ってきていない事。 どっかで使い方を間違えているのか、 それともこの処理方法が愚かなのか。
>>202 hoge.txt を削除してから実行しても、生成される?
"w"ならすでに存在するファイルはサイズが0になるはず。
>>203 はい、生成されます。
中身はやっぱり何も書いてありません。
(テキストエディタで開いても空白すら無くEOF)
>>204 そうなんですよね、最初はそれも考えたんですけど
生成は一応されるからそのへんの問題ではないみたいです。
206 :
デフォルトの名無しさん :04/04/30 12:16
fopen( filename, "wt" );とか?
>>206 それもだめでした。
う〜ん、 BCC コンパイラ特有の問題ですかねぇ…。
Cの書き方は間違っていないみたいなので、
BCC関連で原因調べてみます。
相手してくれた方、ありがとう。
>>195 Windowsの環境の事は良くわからないが、デバッガとかで追いかけられないのか?
ホントにfclose()まで実行されてるのか?
そもそも共有ライブラリでランタイムライブラリの後処理(fclose()の後処理)まで実行されるのか?
ありがちな罠でfflush()を挟んだらファイルに書き込まれたりしてないか?
if(NULL==(fp_output = fopen("hoge.txt", "w")) { printf("Not Open\n"); exit(1); } fprintf(fp_output, "test text\n"); fclose(fp_output); とするとどうなる? 大域変数 errno の値は?
>>207 ちなみに昔BCCのDOS版統合環境持っていたが、それでいいと思ったよ。
コンパイラの固有の問題ではないとおもゆ。
>>208 大正解です、fflush()挟んだら行けました。 orz
ミンナゴメンヨ…そして本当にありがとう。
>>211 fcloseは内部でfflushと同じことをやっている。
つまりfcloseに到達していないということが分かったわけだよな?
>>212 そのようです…一から勉強し直してきます… orz
214 :
デフォルトの名無しさん :04/04/30 16:01
215 :
デフォルトの名無しさん :04/04/30 16:14
本をちらちら読みながらCで組める程度のものですが サンプルプログラム程度(単体で動いているある程度小さな量のプログラム)なら 問題なく読めるのですが、例えばLinuxのデバイスドライバとかだと どの関数から始まってどの構造体がどういう働きを持ってるかとかがよみとれません こういった場合のソースの追っかけツールとかノウハウ見たいなのがあれば 教えてもらえないでしょうか?
216 :
デフォルトの名無しさん :04/04/30 16:17
>>215 Doxygen使っとけ
どの関数がどこから呼び出されてるのかとかもわかるし。
218 :
パワフル小心者 :04/04/30 17:26
CというかC++というかヴィジュアルシーというかコードのことでお伺いしたいです。 CinternetSessionのゲトファイルっていう関数を使ってるんですが アプリケーションを終了せずに同じファイルを連続して取得してみると なぜかファイルがサーバーから削除されていても、あるいは更新されていても 同じバージョンのファイルを取ってきます。何かの初期化が悪いのか コードが悪いのか頭が悪いのか ちょっと解りかねますが コードはりますので助けてもらえないでしょうか?
219 :
パワフル小心者 :04/04/30 17:31
EXPORT short int __stdcall FtpFileGetToVMS( LPSTR gHostName,LPSTR gUserName,LPSTR gPassWord,LPSTR gDirName, LPSTR gFileName,LPSTR gDirFile,short int ChgFlg){ char WorkgFile[MAX_PATH]; char WorkgDir[MAX_PATH]; char WorkrDir[MAX_PATH]; strcpy(WorkgFile,gFileName); strcpy(WorkgDir,gDirName); strcpy(WorkrDir,gDirFile); //ソケットの初期化実効 if (!AfxSocketInit()){ AfxMessageBox("ソケットの初期化に失敗しました。"); return FALSE; } while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){ //ループ処理中でもメッセージハンドルを制御 TranslateMessage(&msg); DispatchMessage(&msg); }
220 :
パワフル小心者 :04/04/30 17:31
CInternetSession *gpSession = new CInternetSession(); if (gpSession != NULL){ CFtpConnection *gpFtp = NULL; TRY{ //セッションの確立 gpFtp = gpSession->GetFtpConnection(gHostName,gUserName,gPassWord); //接続のステータス判定処理 } CATCH(CInternetException,e){ AfxMessageBox("リモートホスト接続に失敗しました。"); return FALSE; } END_CATCH if(gpFtp){ //カレントDIR移動の処理 if(!gpFtp->SetCurrentDirectory(WorkgDir)){ AfxMessageBox("リモートDIRが存在しません。"); return FALSE; } strcat(WorkgFile,";"); //リモートファイル取得処理 if(!gpFtp->GetFile(WorkgFile,WorkrDir,FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_ASCII,1)){ AfxMessageBox("ファイル取得に失敗しました。"); return FALSE; }
221 :
パワフル小心者 :04/04/30 17:32
} //FTPのクローズと破棄 gpFtp->Close(); delete gpFtp; } //セッションのクローズと破棄 gpSession->Close(); delete gpSession; //SJIS変換フラグがONの場合はEUC->SJIS変換呼出し if (ChgFlg != 0) ChengeEucToSjis(WorkrDir); memset(WorkrDir,'\0',MAX_PATH); return TRUE; } です どうかお願いしました
222 :
デフォルトの名無しさん :04/04/30 17:41
コマンドプロンプト(Dos窓)に表示される行数って限界があるみたいだけどそれを もっと表示させる方法はありませんか?fprintfでファイル出力させる方法は知ってるんですが できればDos窓で直接みたいんです。
初心者という名のアラシが…
224 :
パワフル小心者 :04/04/30 17:58
いえ 初心者では なく小心者(しょうしんもの)です しかも嵐ではなくマジマジです。どうかお願いします
227 :
デフォルトの名無しさん :04/04/30 18:08
しかし、 a.exe > file とやれば済むんだろうな。
228 :
デフォルトの名無しさん :04/04/30 18:46
w
>>224 CとC++の区別もつかない奴は初心者ダロ
板の名前見直して、一昨日出直してこい
しかも環境依存
231 :
デフォルトの名無しさん :04/04/30 20:56
数字羅列したファイル ------------------------------ 1 2 3〜(続く) ー---------------------------- ってな感じであってなんらかのメッセージがあって(if (a=1)でも何でも良い) 例えば2をchar文字にしたい場合どうやれば良いでしょか? 出来ればファイルそのものをいじるのではなく、 ファイルの中に書かれている数字だけをいじりたいのだが…
232 :
デフォルトの名無しさん :04/04/30 21:00
2は文字です。
誰か、質問の意味理解できる?
日本語に見えるけど、日本語じゃないね。
235 :
デフォルトの名無しさん :04/04/30 22:15
#include <stdio.h> わかんないので適当に。 #include <stdlib.h> #include <string.h> #include <ctype.h> int main(void){ FILE *f; char buf[1024], *p; int sum=0; if ((f=fopen("test.txt", "r")) == NULL) puts("open error"), exit(1); while (fgets(buf, sizeof buf, f) != NULL){ if ((p=strchr(buf, '\n')) != NULL) *p = '\0'; if (isdigit(buf[0])){ sum += atoi(buf); puts(buf); } } printf("sum = %d", sum); return 0; }
i = ? i>'0' i-'0' : i ; 見たいな事を聞きたいのではなかろうか?
237 :
デフォルトの名無しさん :04/04/30 23:11
>>236 つーかお前が何を言いたいのか判らない。
ダビスタを、MX,NY以外で落とせるところを教えてください。
あ、間違い。正直、すまなかった。 が、 デリミタの位置くらい気にするな。
そういう問題なのかな・・・
243 :
デフォルトの名無しさん :04/04/30 23:36
> fcloseは内部でfflushと同じことをやっている。 ふつうはそうだ。 > つまりfcloseに到達していないということが分かったわけだよな? ところがそれは甘い! その昔のMSCなんかはそこに有名なバグがあり、flocseの中でときどきうまくフラッシュ されないことがあったのだ。で、そのせいで、その時代のMSCを使ってたコーダーは、 書き込みのfcloseの前にfflushをいちいち呼ぶクセがある。
>>243 流れ読もうぜ。
ただでさえ妙なやつらが溜まってきて、ごちゃごちゃしてんだし。
doubleとfloatってどっちの方が速いですか?
部分部分は日本語だが、自分が承知している事は 全て他人も承知していると錯覚しているから要点を はしょり過ぎて暗号みたいになる。
247 :
デフォルトの名無しさん :04/05/01 09:45
248 :
デフォルトの名無しさん :04/05/01 11:07
>>245 floatは一旦doubleに変換して計算を行うので一般的にはdoubleのほうが速い
>248 自分でやったことないだろ でも、CPU依存、コード依存の部分もあるので自分で試すしかない 四則演算ならばfloatの方が早い場合が多いだろうが
251 :
デフォルトの名無しさん :04/05/01 12:14
>>245 環境依存。まぁ普通はfloatの方が速いが。
しかし、floatでは精度に問題が出ることもママある。
>>247 ルールブックて何だ?
>>246 のことか?
>>248 最近は変換しないのが普通。
252 :
デフォルトの名無しさん :04/05/01 12:14
テキストモードとバイナリモードの違いは 改行コードの処理の差だけなんでしょうか?
253 :
デフォルトの名無しさん :04/05/01 12:16
>>252 そうだと思う。って、そんなモードがある環境の数自体はかなり少ないと思うけど。
テキストファイルをそういうモードのある環境で読み書きするなら何も考えず
テキストモードとやらで扱うのが吉...
254 :
デフォルトの名無しさん :04/05/01 12:17
>>252 ちゃんとそういう変なモードがない環境のことも考えておかないと腐ることもある。
fopen()で"rb"とかするとちゃんと動かない環境もあるんだよ。
というか、テキストとバイナリの違いって何でしょうか? バイナリデータをテキストとして読めばテキストになり テキストデータもバイナリとして読めばバイナリだと思うのですが…
正直、統一してほしい…。
>>253 ,
>>254 僕はいつもWin環境なんですが、これ(バイナリ&テキスト)は他の環境にはあまりないのでしょうか?
UNIXとかはナシ??
テキストファイルとはASCII文字のみで構成されたファイルのこと。 つまり、全てのデータの最上位ビットは0。
259 :
デフォルトの名無しさん :04/05/01 12:24
>>255 単にCRとCRLFを変換するだけと考えれば良い。
バイナリとかテキストの区別は人間が勝手にしているだけ。
バイナリファイルをテキストモードで読んでみてもテキストに変換されるわけではない。
どういう変換を期待しているのか知らんが。
260 :
デフォルトの名無しさん :04/05/01 12:25
>>258 漢字は無視か?今ならウニコードか...
>>258 という事は例の、メモ帳で開いて普通に読めれば、それはテキストファイルで
グチャグチャのへんなファイルならバイナリだと認識しろと?
263 :
デフォルトの名無しさん :04/05/01 12:27
> floatは一旦doubleに変換して計算を行うので一般的にはdoubleのほうが速い ちょっと前までのCではそうでしたね(1989年以前)
264 :
デフォルトの名無しさん :04/05/01 12:28
ようするに244は頭がわるくて理解できなかったわけね。
266 :
デフォルトの名無しさん :04/05/01 12:28
> テキストファイルとはASCII文字のみで構成されたファイルのこと。 そう。つまり日本語混じるとバイナリーファイルです。
267 :
デフォルトの名無しさん :04/05/01 12:29
>>258 はバカなので、
00〜1fあたりのコントロールコードがどれだけまじってても
「テキストファイルだ!」と言い張りそう ;-)
268 :
デフォルトの名無しさん :04/05/01 12:30
> 環境依存。まぁ普通はfloatの方が速いが。 これうそ。たいがいはdoubleのほうが速い。
269 :
デフォルトの名無しさん :04/05/01 12:31
> テキストモードとバイナリモードの違いは > 改行コードの処理の差だけなんでしょうか? はい、VC++などのfopenでのはそうですね。それだけの違いです。 昔のコンパイラーで最後の1aを処理するものもありましたが、VCはしませんので。
270 :
デフォルトの名無しさん :04/05/01 12:32
>>257 まぁMSBは立っていないから間違いではないぞ。
ASCIIコードの可読(+制御コード、こいつもどこまで含めるかだが)だけで構成された
ものはテキストファイルと言っても誰も反論はしないだろう。
>>266 JISはどうだ?
271 :
デフォルトの名無しさん :04/05/01 12:33
>>268 ほう、どういう環境でか教えてくれ。
doubleだとメモリのバンド幅も倍必要になって速かった試しはないんだけどな。
さて、今日もバイナリエディタでコード書くか。
というか、なんで改行コードの違いとかあるんだろう… 本当統一して欲しいですね。
274 :
デフォルトの名無しさん :04/05/01 12:36
>>273 UNIXと一緒にしたくなかったんだよ。
というか、その昔、端末はCRで行頭に行き、LFで行を送っていたのだよ。その名残り。
275 :
デフォルトの名無しさん :04/05/01 12:36
>>254 > fopen()で"rb"とかするとちゃんと動かない環境もあるんだよ。
ありません。規格で「知らない文字は無視する」ことになってますので。
(でもまあふつうsetmode使うよな。環境依存の部分は別の行に追い出したいので。
さらに標準入力もつかうとなれば)
276 :
デフォルトの名無しさん :04/05/01 12:37
>>273 統一するかどうかはあなたしだい。
わたしはWindowsでもMacでも改行コードは当然のようにLFだけ使っています。
277 :
デフォルトの名無しさん :04/05/01 12:40
> まぁMSBは立っていないから間違いではないぞ。 いいえ。MSBが立っていないこととテキストファイルかどうかは無関係です。 テキストファイルってのは、0x20〜0x7fと、0x09と改行(0x0aとか0x0d)のみ からできているものを言うのは常識! (そんなことはISOどころかRFCにさえかいてある)
>>275 その規格はいつできた?Cはいつからあったたと思う?
それ以前に規格に忠実な環境しかないと思っているのか?
幸せなやつだな。
279 :
デフォルトの名無しさん :04/05/01 12:41
MSBが立っていない...だけだと0x00〜0x7fまでぜーんぶ適合してしまうからな。 7fがまじったときのいやらしさといえば!
280 :
デフォルトの名無しさん :04/05/01 12:41
>>277 じゃぁ秀丸はバイナリエディタなのか?
喪前がそういうのなら許してやる。
281 :
デフォルトの名無しさん :04/05/01 12:42
> ASCIIコードの可読(+制御コード、こいつもどこまで含めるかだが)だけで構成された > ものはテキストファイルと言っても誰も反論はしないだろう。 こいつぼけ。なにが「どこまで踏めるかだが」や「反論しないだろう」だ。頭わるすぎ。 そんなものはきっちり決まってる。
>>279 漏れがそれだけだと言ってるんじゃないぞ...
流れをちゃんと読めということだ。
283 :
デフォルトの名無しさん :04/05/01 12:43
そういえばOS/9はCRで改行だったなあ。あれはどこ由来なんだろう? Unixはテレタイプライターの時代からLFつかってたからえらい。
284 :
デフォルトの名無しさん :04/05/01 12:44
285 :
デフォルトの名無しさん :04/05/01 12:44
> じゃぁ秀丸はバイナリエディタなのか? そうです。日本語編集するから。
>>281 だからさ、その変のエディタはすべてバイナリエディタだ、テキストエディタじゃねー、
と大声で言えるなら許すと言ってるじゃねーか。だれかがテキストエディタと言う旅に
そう言ってろよ。
というか、すでに揚げ足とりになってしまってるような…
288 :
デフォルトの名無しさん :04/05/01 12:45
> その規格はいつできた?Cはいつからあったたと思う? ぼけ、Cなんかより古くからあるんだよ > テキストファイルの定義
289 :
デフォルトの名無しさん :04/05/01 12:46
>>278 > それ以前に規格に忠実な環境しかないと思っているのか
ごまかしのための暴れ方がみじめ。
290 :
デフォルトの名無しさん :04/05/01 12:46
>>288 テキストファイルの定義でなくて、"rb"とかSetMode()とかO_BINARYのことだよ...
ちゃんと読めよ?
292 :
デフォルトの名無しさん :04/05/01 12:47
そうか、世間は連休なのか。 連休厨め
293 :
デフォルトの名無しさん :04/05/01 12:48
飯でも食うか。
294 :
デフォルトの名無しさん :04/05/01 12:49
連休厨の291が無駄にあばれていますが。 実際には"rb"やsetmodeを最初につけたのはLattice-Cのあるミニコン版 それがそのままMS-DOS用にも流用された。それがmscにも入ってきたわけだな。 そんな常識もしらない厨ははさすがだな ;-)
>>276 ↓モード指定もすべてバイナリですか??
fp = fopen("text.txt", "rb");
297 :
デフォルトの名無しさん :04/05/01 12:52
> それ以前に規格に忠実な環境しかないと思っているのか? このあたりのいいわけがもう末期的ですよね。 たとえば通常の標準規格に乗っ取ったCでは「i = 10;」ではiに10が代入されますが、 「規格通りの処理系ばかりあるわけじゃないだろ」といいはじめたら、もう なんでも言えちゃいますからね ;-)
298 :
デフォルトの名無しさん :04/05/01 12:54
"rb"だとfopenごと#ifdefしなきゃいけないけど、 setmodeだとその部分だけ#ifdefできるあら、そっちを好むのがまっとうなプログラマー よって296はおおぼけ
i=10をまともにコンパイルできない環境は知らんが、fopen("rb")で腐る環境は あったということだ。まぁコンパイラのバグが直るまで動かないコードで済む喪前が うらやましいぞw
>>298 別に
#define XXX_OPEN_MODE "rb"
で対応でもいいが。setmodeなんて呼ぶ必要ねーし。
301 :
デフォルトの名無しさん :04/05/01 12:56
>>295 もちろん読み込みモードもすべてバイナリーですが、fopenの"rb"では指定しません。
(かといってsetmodeも使いません)
さて、どうやっているかあてられますか?
(VC++の場合)
302 :
デフォルトの名無しさん :04/05/01 12:56
>>301 CRだろうがCRLFだろうがいいようにコードを書いとく。
306 :
デフォルトの名無しさん :04/05/01 12:59
>>304 まあ、それも1つの手だし、それでもたいがいうまくいきますね。
ただ、バイナリーファイルを扱うときに、たまたま「0x0d 0x0a」の組がでてきたときに
壊れちゃいますよん。
>>250 >>251 最近と言う問題ではなく、cではfloatをdoubleに格上げしてから計算される。
したがって、一般的にdoubleのほうが遅くなることはない。
308 :
デフォルトの名無しさん :04/05/01 13:01
わたしのやり方がまあいちばん合理的ではあります(VC++の場合)。 ふふ でも、それでもまだ納得行かないひとは、Unixに引っ越すなり、WindowsにSFU入れましょう。 (いまどきCygwinいれるのも時代遅れだし)
>>306 なんで壊れる?バイナイモードで常に扱うってことじゃないのか?
311 :
デフォルトの名無しさん :04/05/01 13:03
そんな言語はありません > cでは > 最近と言う問題ではなく、cでは > floatをdoubleに格上げしてから計算される。 いいえ、むしろ逆、「最近」はしないのです。昔のCはかならず格上げしなきゃいけなかった 最近(1989年以降)はしなくてもよくなった。
312 :
デフォルトの名無しさん :04/05/01 13:03
> んで壊れる?バイナイモードで常に扱うってことじゃないのか? こいつぼけ、VC++で「なにもしない」と、fopenは「テキストモード」だろ。
>>307 まぁ今時C++がほとんどだからね。VC++で普通に書くとfloatの方が速いよ。
問題ではないといってるのに問題にしているなぁ。
315 :
デフォルトの名無しさん :04/05/01 13:04
>>313 それもウソ。おまえ実際にためしてないだろ。
わたしは以前かなり試した(6.0のころ)。仕事に使うやつだったからな。
316 :
デフォルトの名無しさん :04/05/01 13:07
>>315 x87系は単精度モードないからな。
かといってdoubleはメモリアクセスが倍必要なわけだからfloatの方が普通は速い。
今のcpuって、除算の所要時間って昔みたいに値の影響受けないのかな? 値によって(内部のループ回数が変わって)所要時間が変わるなら、 doubleの方が不利になるケースもありうるか。
>>316 速度の測定方法にもよるけど、fpu内部での演算が続くならメモリアクセススピードは関係ないっしょ
>>318 x87に限定するとそういう計算は普通ではない。
320 :
デフォルトの名無しさん :04/05/01 13:11
> かといってdoubleはメモリアクセスが倍必要なわけだからfloatの方が普通は速い。 それもウソ。おまえ勝手妄想ばかりしてないで、ためしてみろよ。 VC++6.0でふつうのPCならdoubleとfloatはほとんどからわない むしろdoubleのほうがちょっとだけ速いこともあるぐらい。
borland Cでエスケープシーケンスが使えません。 OSはXPです。
おまえら議論の仕方がなってないよ。 いくら厨房の集うGWとはいえ酷過ぎるな。
オマエモナー
不毛というか無意味というか これがGWという奴か
>>320 四則演算で試してみたがやっぱりfloatの方が速いぞ?
以下は時間が短い方が速い。divは時間がかかるからバンド幅の影響が少ない。
配列を小さくすれば当然差は縮まるが、それでも有意な差は出なかった。
add(float) : tMin= 0.859(sec), tMax= 0.860(sec)
add(double): tMin= 1.687(sec), tMax= 1.703(sec)
sub(float) : tMin= 0.859(sec), tMax= 0.860(sec)
sub(double): tMin= 1.687(sec), tMax= 1.688(sec)
mul(float) : tMin= 0.859(sec), tMax= 0.860(sec)
mul(double): tMin= 1.687(sec), tMax= 1.703(sec)
div(float) : tMin= 2.125(sec), tMax= 2.125(sec)
div(double): tMin= 2.234(sec), tMax= 2.235(sec)
#include <windows.h> #include <stdio.h> #if 1 // small array #define N 100 #define LOOP 1000000 #else // large array #define N 100000 #define LOOP 1000 #endif template<class T> struct CTestData { CTestData() { for (int i = 0; i < N; i++) { b[i] = (T)(rand() + (double)rand() / RAND_MAX); c[i] = (T)(rand() + (double)rand() / RAND_MAX); } } T a[N], b[N], c[N]; }; CTestData<float> f; CTestData<double> d;
double GetTime(bool init = false) { static double ts; double t = timeGetTime() * 0.001; if (init) { ts = t; } return t - ts; } #define TESTFUNC(name, op) \ template<class T> \ inline void name(CTestData<T> &d, int n) \ { \ for (int i = 0; i < n; i++) { \ for (int j = 0; j < N; j += 4) { \ d.a[j + 0] = d.b[j + 0] op d.c[j + 0]; \ d.a[j + 1] = d.b[j + 1] op d.c[j + 1]; \ d.a[j + 2] = d.b[j + 2] op d.c[j + 2]; \ d.a[j + 3] = d.b[j + 3] op d.c[j + 3]; \ } \ } \ } TESTFUNC(add, *) TESTFUNC(sub, *) TESTFUNC(mul, *) TESTFUNC(div, /)
template<class T> void test(const char *p, void (*fp)(CTestData<T> &d, int n), CTestData<T> &d, int n) { double tMin, tMax; for (int i = 0; i < 3; i++) { GetTime(true); fp(d, n); double t = GetTime(); if (i == 0 || t < tMin) { tMin = t; } if (i == 0 || t > tMax) { tMax = t; } } printf("%s: tMin= %.3f(sec), tMax= %.3f(sec)\n", p, tMin, tMax); }
int main(int argc, char* argv[]) { #define TEST(name, func) \ test<float> (name"(float) ", func<float>, f, LOOP); \ test<double>(name"(double)", func<double>, d, LOOP); \ printf("\n"); TEST("add", add); TEST("sub", sub); TEST("mul", mul); TEST("div", div); return 0; }
なんつーかマシンによって変わるから
>>325 large arrayの場合。ちなみにP4 1.8GHz
>>330 そんなの最初から漏れが言ってることだ。
VC++6.0では違うというから試してやっただけさ。
>>327 あ、バグってるな add, +, sub - とかにしといて。
333 :
デフォルトの名無しさん :04/05/01 19:01
POSIXでは、float.hで FLT_EVAL_METHOD という "implementation defined"なマクロを定義して 0だとデータ型の範囲内 1だとlong doubleはlong double、それ以外はdouble 2だとぜんぶlong doubleで評価する、とある。
intelのコンパイラ8.0のデフォルトオプションでやってみたら divはdoubleの方が微妙に速い。large arrayでCeleron 533AMHzね。 add(float) : tMin= 0.571(sec), tMax= 0.590(sec) add(double): tMin= 0.571(sec), tMax= 0.591(sec) sub(float) : tMin= 0.551(sec), tMax= 0.561(sec) sub(double): tMin= 0.571(sec), tMax= 0.590(sec) mul(float) : tMin= 0.551(sec), tMax= 0.561(sec) mul(double): tMin= 0.570(sec), tMax= 0.591(sec) div(float) : tMin= 5.909(sec), tMax= 5.919(sec) div(double): tMin= 5.898(sec), tMax= 5.908(sec)
PIII 1GHz VC++6.0 /O2 large_array add(float) : tMin= 2.691(sec), tMax= 2.703(sec) add(double): tMin= 5.960(sec), tMax= 5.981(sec) sub(float) : tMin= 2.774(sec), tMax= 2.821(sec) sub(double): tMin= 5.908(sec), tMax= 5.981(sec) mul(float) : tMin= 2.713(sec), tMax= 2.760(sec) mul(double): tMin= 5.941(sec), tMax= 5.977(sec) div(float) : tMin= 3.434(sec), tMax= 3.456(sec) div(double): tMin= 6.102(sec), tMax= 6.129(sec) まあ (float) fadd DWORD PTR [eax] と (double) fadd QWORD PTR [eax] の差が順当に出てるね。
そんな環境依存の話をつらつらとする意味がある?
プログラムは環境に左右されることが良くわかる。
339 :
デフォルトの名無しさん :04/05/01 21:07
>>337 意味はある。Cは処理系の能力を余さず使うための言語だ。
だが、1つの処理系での結果を以ってさも全てを見通したかのように語るアフォが痛いだけ。
必死だなw
341 :
デフォルトの名無しさん :04/05/01 21:38
342 :
デフォルトの名無しさん :04/05/01 21:48
>>335 なんでdiv以外が異様に速いんだろう。divは遅いから計算せずに捨ててるわけで
もなさそうだし…
343 :
デフォルトの名無しさん :04/05/01 22:14
c言語プログラムのコンパイル時にwarning: no newline at end of fileというエラー文が出たのですが、解決法を教えていただきたいのですが。
確かに気になる。
>>335 浮動小数点演算をやってるところのアセンブリソースは出せませんか?
できればaddとdivを。
smallの間違いでしたというオチでは?
347 :
デフォルトの名無しさん :04/05/01 22:22
>>315 まぁ漏れは30分しか試してないが、かなり試した喪前はどーしたよw 反論は?
あ、コード書いてたのが30分で試したのは3分くらいか...
数字を入力する関教えてください
>>349 数字も文字なので、文字(列)と同じです。
>>349 直接的にやりたいことを具体的に説明しろ。
scanfでとると、一桁しか取れないと思うんですが、二桁とりたいのです
>>352 2桁以上でも取れるけど。
でも、scanf 使うの嫌。
355 :
デフォルトの名無しさん :04/05/01 22:46
>>352 その言い方からして試していないだろ?
死ねよ。
356 :
デフォルトの名無しさん :04/05/01 22:46
fgets + sscanf などを用いてwhileでまわす。
すみません、やってみたらscanfでできました getsで数字の0とってhairetsu[0]を出力してみると48になるので、同じ仕様なのかと勘違いしてました。 48ってのは、getsで取ると、文字扱いになるため文字を十進数に変換すると48になるからなんですね 勉強になりました
GWに勉強なんて関心や
とあるネットワークファイルシステムを移植中(kernel2.4 → kernel2.6) なんですけど。 kernel2.4ではあったrevalidateがkernel2.6だと無くなってるんだが、 getattrの延長でrevalidateするsmbfsを参考にしてもいいのかな。 smbfs、nfs以外に参考になるものないですか? #それにしても構造体変わりすぎ_| ̄|○ int smb_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) { int err = smb_revalidate_inode(dentry); if (!err) generic_fillattr(dentry->d_inode, stat); return err; }
kernelのソースはCじゃないかーヽ(`Д´)ノ ごめんなさい。 では、どこで聞いたらよいですかね。? linux板ですか?
pc2難民
363 :
デフォルトの名無しさん :04/05/02 02:38
こんな感じのソフト(?)ってC言語で作れるんでしょうか? 1.5分おきに「株価情報」の文字列をGoogleで検索。 ↓ 2.出力結果のHTMLソース取得。 ↓ 3.そのHTMLソースに「下落」という文字列が含まれるているか判定。 ↓ 4.もし含まれていたら、「.txt」で保存。 ↓ 5.smtpサーバーに接続してそのtxtを添付し、送信。 クライアントサイドで一連の動作を自動的に1年ぐらいずっとさせてたいのですが。 ちなみに自分の使ってるOSはwinxpをです。
>>363 もちろん作れる。他の言語で作れるものでCで作れないものなぞ存在しない。
しかし、そういうことをやりたのであれば別なスクリプト系の言語が楽。
>>363 作れるか作れないかで言えば、作れないはずがない
Cだけで作るのは無駄だろ。はっきり言って
というか5分間隔でぐぐっても無意味
「株価情報 下落」でぐぐってはまずいのだろうか?
>>363 けけけ。それならJavascriptでも十分に作れる罠。
CPU使用率100%になるけど(w
>>368 タスクに登録して5分おきに起動させればいいような...
371 :
デフォルトの名無しさん :04/05/02 04:57
Cの前身はBと言われてるけど実はウソで、γ言語だったと何かで読んだけど 本当なんですか?
372 :
デフォルトの名無しさん :04/05/02 04:58
>>307 >
>>250 >
>>251 > 最近と言う問題ではなく、cではfloatをdoubleに格上げしてから計算される。
> したがって、一般的にdoubleのほうが遅くなることはない。
いつの話だ…
>>307 は最新版のISO/IEC_9899:1999を目を皿のようにして
よく読め。
376 :
デフォルトの名無しさん :04/05/02 07:45
#include<stdio.h> void main(void){ char *s; scanf("%s",s); printf("%s",s); } このプログラムが実行できません。コンパイルはできます。 どうしてですか?
....警告でないなー。 mallocしてください。
378 :
デフォルトの名無しさん :04/05/02 08:10
警告なんかに頼ってるうちは三流 技量とは無関係、真面目に作る気がない証拠
>>376 char *s; → char s[100];
くらいが、お手軽かと。
>>378 エラーじゃなくて警告と言っているって事は、
お前はエラーには頼っている三流のようだなw
381 :
デフォルトの名無しさん :04/05/02 09:09
>380 プ
>>381 ププププププププププププププププププププププププ
ププププププププププププププププププププププププ
ププププププププププププププププププププププププ
プリッ♪
>376 くそ本に騙されるなよ main()関数はint型だ。
385 :
デフォルトの名無しさん :04/05/02 10:58
>>384 全然かんけーねーんだよ
そんなことしか突っ込めねー糞ボンクラはとっとと失せな
386 :
デフォルトの名無しさん :04/05/02 11:48
385はおおぼけ。
386はぼけ さっきからぼけぼけぼけぼけぼけぼけぼけうっせーーんだよ
388 :
デフォルトの名無しさん :04/05/02 12:09
やーい > ぼけ
ウザイのでガキは消えてください。
390 :
デフォルトの名無しさん :04/05/02 13:02
下のint_to_str()関数に*付けないといけない理由教えてください #include<stdio.h> char *int_to_str(int hoge); int main(void) { char *foo; int num = 500; foo = int_to_str(num); printf("%s\n", foo); return(0); } char *int_to_str(int hoge) { static char buf[10]; sprintf(buf, "%d", hoge); return(buf); }
393 :
デフォルトの名無しさん :04/05/02 13:14
付けなくてもいいんだよ main() { char *foo; auto num 500; foo = int_to_str(num); printf("%s\n", foo); return(0); } char * int_to_str(hoge) { static char buf[10]; sprintf(buf, "%d", hoge); return(buf); }
394 :
デフォルトの名無しさん :04/05/02 13:15
buf返すからだろ。 そんなこともわからんのかよ。 どんな本で勉強してるんだよ。本の名前言えよぼけ
395 :
デフォルトの名無しさん :04/05/02 13:17
返すのがbuf[0]だったら、関数の型はcharやintでもいいぞ ;) 返すのが &buf[0] (bufと同義) だからchar *なんだろ。 そんなこともわからんのかよぼけ
ぼけスレ
こんなミエミエの釣りでも簡単に釣れるもんだ
398 :
デフォルトの名無しさん :04/05/02 14:00
>>391 どこが釣りなんだ?
本当に分からんから聞いたとしか思えんがw
マジレスだがbuf[10]だと溢れるぞ?ちゃんと自分の仕事のソース見直しておけよ。
>>391 >return(0);
いやww、別にwww、コーティングスタイルは趣味の問題だからwwww
関係ないないんだけどさwwwwww
>>393 懐かしい…
C++ と Objective-C の違いってなんですか Visual-C とかもあるみたいだし Perl のリファレンスが C のポインターみたいなもんだとか って事は C でもオブジェクティブ指向プログラムできる?
401 :
デフォルトの名無しさん :04/05/02 14:23
int size; fseek(fp, 0, SEEK_END); size = ftell(fp); 上の方法以外でファイルサイズの取得方法はないですか?
402 :
デフォルトの名無しさん :04/05/02 14:24
system("ls -l");
403 :
デフォルトの名無しさん :04/05/02 14:25
404 :
デフォルトの名無しさん :04/05/02 14:27
>>401 stat、fstat、GetFileSizeとか。
man 2 stat
406 :
デフォルトの名無しさん :04/05/02 14:32
407 :
デフォルトの名無しさん :04/05/02 14:36
>>400 気分的にはできる。
すべての言語のプログラムはCに変換可能。
実際、C++初期はCへのトランスレータだった。
408 :
デフォルトの名無しさん :04/05/02 14:37
>>400 C++はSimula厨
Objective-CはSmallTalk厨
ところで「オブジェクティブ指向プログラム」って何だ?
409 :
デフォルトの名無しさん :04/05/02 14:39
>>400 C++は、Cの後置インクリメント
Visual-Cは、まあ何ちゅーかVisual StudioからCを除いた部分かな
どうもありがとうございます。 fstat()という関数があったのですね。
>398 学生だけど仕事くれる? >399 何がそんなにおもしろいの? あーちなみにこのソースは前橋のC言語ポインタ完全制覇から 一部引用しているよ
なんでもかんでも"釣り"ってことにするなよ。
return(0); ←僕もこうしてしまう癖があるんですよね… sizeof(i) みたいな感じで癖になってしまってます。
415 :
デフォルトの名無しさん :04/05/02 15:03
>>414 言い訳するときの論理まで破綻か
よっぽどひでえコード書いてるんだなw
416 :
デフォルトの名無しさん :04/05/02 15:24
なんか、ここは未だに原始時代を見ているようだ。げろ。
417 :
デフォルトの名無しさん :04/05/02 15:30
なんか、ここのスレの人達って・・・プライドが高すぎ・・・ なんでだろう・・・
>413 あなたが言う仕事内容とそれに見合う。 スキルセットを教えてください。
>>418 とりあえずポインタ必修。話はそれからだ。
>>411 正しい部分を引用して、間違った部分は書き足したんですね
#include<stdio.h> int main(void) { printf("hello\n"); return 0; } こう打ったんですけど、デバッグすると 'sampl.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。 'sampl.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました。シンボルが読み込まれていません。 プログラム '[5572] sampl.exe: ネイティブ' はコード 0 (0x0) で終了しました。 こんな文章が出てきてプログラムが動きません。 シンボルが読み込まれない、という意味と解決方法を御教授願えないでしょうか。
>>421 いや、ちゃんと動いてる。
気にするな。
>>421 動かないって具体的にどんなエラーが?
正常に終了しているように見えるけど、何か問題が?
425 :
デフォルトの名無しさん :04/05/02 15:38
>>421 #include<stdio.h>
int main(void)
{
printf("hello\n");
getchar(); /* tuika */
return 0;
}
>423-424 なんか目にもとまらぬ速さで終了してしまって、 なんて書いてあるかも読めないんです。
>422 釣りはいいですから根拠をいってください。 それとも日本語理解できないんですか?
422じゃないけど とりあえず391のプログラムが理解できないようじゃ仕事にならん。 むしろ邪魔。 これ根拠。
じゃ私は問題ないですね
391は"プログラミングの仕事くれ"とは一言も言って無いじゃん。 誰にでもできる簡単な軽作業 はできるかもしれないよ。
とりあえずプログラムが書けるってことは前提。あ、まともなプログラムね。 その時点でお前は失格だが。 仕事するにはそれ以外のものも重要である。
(つづき) でもコミュニケーション能力・協調性が必要な仕事はむりだろうね。
433 :
デフォルトの名無しさん :04/05/02 16:04
当たり前・・・
>431・432 空気読め
435 :
デフォルトの名無しさん :04/05/02 16:12
素朴な疑問なんですが…
>>391 のような
return(0);
ってC言語の書き方としてまずいんですか?
436 :
デフォルトの名無しさん :04/05/02 16:15
初心者です #include<stdio,h> int main(){ return(printf(゙hello, warld??/n゙)); } うまくうごきませんので一体何が問題なんでしょうか?
437 :
デフォルトの名無しさん :04/05/02 16:15
まずくないね。 でもどうせなら、 return (0); にするか return 0; にしなさい。 もしくは return EXIT_SUCCESS;
>>435 単にそのかっこは不必要ってだけ。
int a = (3);
とかと同じように、見慣れないとキモイ(笑)
439 :
デフォルトの名無しさん :04/05/02 16:19
>>435 まぁスタイルの問題なんだが、関数でもないのに()はいらんということだ。
ささいなことだが、retrun(0) だとリンクするまで分からんw
関数は関数として、func()。
文は文として書けと。for (i = 0; i < 100; i++)
440 :
デフォルトの名無しさん :04/05/02 16:19
>>436 まず「#include」の後ろは空白をあけろぼけ
関数の中括弧は独立した行にしろ
文字列をくくるにはダブルクォーテイションを使え。
改行はスラッシュじゃなくてバックスラッシュを使え(ほんとにスラッシュをだしたいならそのまま)
warldは間違い。worldだろ
クェスチョンマークは2つ続けるな。
(あと、できたら、includeするヘッダー名は実在するものにしろ)
#include <stdio.h>
int main()
{
return (printf("hello, world?\n"));
}
ほーら、うごいただろ
442 :
デフォルトの名無しさん :04/05/02 16:22
つまり、Windowsとかつかってるバカが、 できたexeファイルをクリックして起動すると、 コンソールモードで「hello」と出て、一瞬で閉じてしまうということだろ ;) だからWindowsユーザーはぼけなんだよ。
>>442 なんだてめえこの野郎、俺にlinuxの使い方教えて下さいよ。
>>440 漏れの使ってる環境ではバックスラッシュ(半角)が使えないので、
仕方なく??/を使っているのです。
>431 自分はまともなプログラムがかけるのですね。 いや〜すばらしい。では、まともなプログラムの見本を見せてください 下記の糞汚いプログラムをあなたの言うま・と・も・なプログラムに してください。おながいします。 #include<stdio.h> char*f,s[999],*p;k(){while(*p==32)++p;}a(x){int r=0;if(*p==40){char*b,c=*++p; ++p;k();r=a(x);c==43?r+=a(x):c==45?r-=a(x):c==42?r*=a(x):c==47?r/=a(x):c==37?r %=a(x):c==61?r=r==a(x):c==62?r=r>a(x):c==60?r=r<a(x):c==63?(b=f,r?r=a(x),f=0,a (x),f=b,0:(f=0,a(x),f=b,r=a(x))):c==70?b=p,r=(a(x),0),f=b,0:c==67?(f?(b=p,p=f, r=a(r),p=b,0):0):0;++p;}else if(*p==88)r=x,++p;else while(*p>47&&*p<58)r=r*10+ *(p++)-48;k();return r;}main(){while(gets(s))p=s,printf("=>%d\n",a(0));}
>>442 犬厨(プが必死だなw
犬ペンギン藁える(プ
敗者は黙ってろよププ
関数の中括弧は独立した行にしろ ↑ なんで?
449 :
デフォルトの名無しさん :04/05/02 16:33
>>445 トライグラフとは… お前、なんかギャップがあるな。
ちなみに、どんな環境か教えてくれ。
>>446 お前、時代遅れ杉。そんなコード書くようじゃ無理杉。
って、どうせどっかからのコピペなんだろうが。
>450 コピペですが何か問題でも? それより早くまともなプログラムの手本を見せてください。
7行からのコピペか? 質問スレとかにたまに沸くけど、 何かにつけて7行持ち出すアホはどうにかならんかね。
>>453 いや、だからなんで\が出ないんだよと。
エディタ何使ってるんだ?notepadでも出るぞ。
456 :
デフォルトの名無しさん :04/05/02 16:46
>>449 トライグラフいいねー
ほんとはバックスラッシュが円記号に化けてしまうような環境の人は、
トライグラフを使って??/と書くべきなんだよなー
うちはちゃんとバックスラッシュなのでだいじょぶだが。
457 :
デフォルトの名無しさん :04/05/02 16:47
なんかネタが続いてるようだが
>>456 マジレスするが、
化けるどころかそのコードを持つ文字がまったく入力できない環境向けだと思うが
>>459 文法がどうのというより周囲と協調しないといけないからだよ。
>>457 コーディングスタイルによって中カッコの位置は変わると思うんだが?
確かに
>>460 の言う通りそういう場合もあるがな。
(オレは独立だと何か気持ち悪いので後付けスタイル)
462 :
デフォルトの名無しさん :04/05/02 16:56
関数の中括弧を int main(void){ } のようにする人も多いんじゃないの? というか、(プロジェクト内で)記述方法がちゃんと統一されていれば、どちらでも良いだろう。
中には制御文とかの中括弧も独立させている 開発現場もあるぞ。ようは業に入ったら業に従えよと
464 :
デフォルトの名無しさん :04/05/02 17:09
printf ("Hello world!\n") ; こう書くのか。
それを制御構文と呼ぶのか、初耳。 それを中括弧と呼ぶのか、初耳。
>>465 440に言ったつもりなんだが。
でもまあ、中括弧の意味は勘違いしていたかもな。
>>465 かんべんしてやって。仮に"()"が中括弧でも独立できてないし。
468 :
デフォルトの名無しさん :04/05/02 17:15
#include <stdio.h> char s[999]; char *f, *p; main() { while (gets(s)) { p = s; printf("=>%d\n", a(0)); } } k() { while (*p == ' ') ++p; }
解析乙!
470 :
デフォルトの名無しさん :04/05/02 17:17
a(x) { int r; r = 0; if (*p == '(') { char *b; char c; c = *++p; ++p; k(); r = a(x); switch (c) { case '+': r += a(x); break; case '-': r -= a(x); break; case '*': r *= a(x); break; case '/': r /= a(x); break;
471 :
デフォルトの名無しさん :04/05/02 17:18
case '%': r %= a(x); break; case '=': r == a(x); break; case '<': r <= a(x); break; case '>': r >= a(x); break; default: (c == '?') ? (b = f, r ? r = a(x), f = 0, a(x), f = b, 0 : (f = 0, a(x), f = b, r = a(x))) : (c == 'F') ? b = p, r = (a(x), 0), f = b, 0: (c == 'C') ? (f ? (b = p, p = f, r = a(r), p = b, 0) : 0) : 0; break; } ++p; }
472 :
デフォルトの名無しさん :04/05/02 17:18
473 :
デフォルトの名無しさん :04/05/02 17:18
else if (*p == 'X') { r = x; ++p; } else { while ('0' <= *p && *p <= '9') r = r * 10 + *(p++) - '0'; } k(); return r; }
474 :
デフォルトの名無しさん :04/05/02 17:19
475 :
デフォルトの名無しさん :04/05/02 17:21
> 化けるどころかそのコードを持つ文字がまったく入力できない環境向けだと思うが だから化けるってことは入力できないってことでは?
476 :
デフォルトの名無しさん :04/05/02 17:21
>>474 それは
a(x)
int x;
{
のような書き方じゃなくて?
477 :
デフォルトの名無しさん :04/05/02 17:21
>>462 Javaだと35%ぐらいの確率でそう書くやつがいるが、
Cでやるやつはかなりのぼけ。かなりださい。
478 :
デフォルトの名無しさん :04/05/02 17:22
>>476 いや、そう書いていた時代にも、その後にも、「かいてなければint」を積極的に
使う人がいたってこと。
479 :
デフォルトの名無しさん :04/05/02 17:24
>>475 だね。
たとえば「A」を入れたつもりが「B」に化けちゃう環境では、
「A」は入力できないといっていい。
480 :
デフォルトの名無しさん :04/05/02 17:24
481 :
デフォルトの名無しさん :04/05/02 17:26
外部変数の宣言で int a; char b[100]; とやらずに、 a; b[100]; とやったらどうなるかを、あなたの処理系で試してみよう!
>>480 今でもそういう例あるよ、代表格が
main()
だな。
483 :
デフォルトの名無しさん :04/05/02 17:28
>>482 それ(関数の戻り値の型)は知っている。
>>479 入力できるというのと思い通りに表示できるというのは独立しているわけだが。
trigraphは入力できない場合に使うもんだ。表示できない場合に使ってもいいが。
どっちが正しいの? if(i == 0){ /* 省略 */ } else{ /* 省略 */ } ------------------------------ if(i == 0) { /* 省略 */ } else { /* 省略 */ }
>>481 intは省略できるが、charはできんぞw
487 :
デフォルトの名無しさん :04/05/02 17:29
> 中には制御文とかの中括弧も独立させている そういう規約つかうところもあるんだよな。あれはかなりボケ。 関数のは独立の行にして、それ以外のは開くのを前の行の後ろにつけろ。 ならいいのに、 なんでその逆? つまり、 func(x) { if (x) { .... } } なわけ...おいおまえだ > N社
488 :
デフォルトの名無しさん :04/05/02 17:30
>>485 正しいの意味による。コンパイラにとっては改行は空白文字と同じ。
489 :
デフォルトの名無しさん :04/05/02 17:30
490 :
デフォルトの名無しさん :04/05/02 17:31
関数内にn;とだけ書かれた場合のようにどう解釈すればいいのかわからない時以外は省略できるのか。
>>487 #ifdef などで区切る時に楽だからだよ、マヌケ。
492 :
デフォルトの名無しさん :04/05/02 17:32
中括弧の位置について、 (1)カーネルスタイル (2)オールマンスタイル (3)ホワイトスミススタイル みたいな代表的なものについては、 「作ってわかるCプログラミング」日下部陽一/技術評論社 にたしか説明があったな。
>>483 過去との互換性の問題なんだから
それ(関数の戻り値の型)とか、仮引数の書き方とかの
自分の中での区別はあんまり意味を持たない。
494 :
デフォルトの名無しさん :04/05/02 17:34
>>491 逆に言うと、ifやwhileのブロックの途中で#ifや#ifdefで区切らせないためには、
カーネルスタイルの中括弧の位置がいいね。
495 :
デフォルトの名無しさん :04/05/02 17:36
まあ、Cで書いてて、カーネルスタイルじゃないやつって、 ろくなコードかかないことが多いので、同じプロジェクトにそんなやつがいたら警戒することにしてる。 なので、そのプロジェクトのコーディング規約どおり書かせる前に、それ見せないで、 適当に小さいコードを好きなスタイルでかかせてみて検査してる ;-) (これが実は効果大きい)
496 :
デフォルトの名無しさん :04/05/02 17:37
カーネルスタイルって何?
497 :
デフォルトの名無しさん :04/05/02 17:38
説明するまでもないが、 while (...) { ... } の位置のが、いわゆるカーネルスタイル(ただし関数の中括弧だけは独立させる) そのほかの2つの代表的なのが、 whille (...) { ... } と while (...) { ... } だ。
>>494 #if 0
if (a) {
#else
if (a && b) {
#endif
とかされると{が対応つかんようになるんだよ。
と言っても漏れもif()とかの{を独立に書かれるのはイヤなんだが。
whileの後と閉じ括弧の後に空白を入れるのがカーネルスタイルか。 じゃあ俺は違うな。
500 :
デフォルトの名無しさん :04/05/02 17:40
>>497 オールマンスタイルやホワイトスミススタイルのやつって、
まだセンスもスキルもない時代に、コボラーのおじさん的ノリのプロジェクトに
放り込まれて、そこのコーディング規約に慣れたやつに多い。
もしくは、へんな入門書で独学したやつ。
どっちにしろセンスないやつであることが多いので、
判別する目安になるな。
>>489 お前は無意味なコーディングスタイルについてしか
語れないカス。
502 :
デフォルトの名無しさん :04/05/02 17:41
> whileの後と閉じ括弧の後に空白を入れるのがカーネルスタイルか。 いや、そうではなく中括弧の位置の話だ。 whileの後なんかは、どんなスタイルでも常識的に空白いれるぞ。 入れないのはかなりのボケ
503 :
デフォルトの名無しさん :04/05/02 17:42
GNUのtailのソース(tail.c)が↓だな。 while (...) { ... }
504 :
デフォルトの名無しさん :04/05/02 17:43
だね。 その昔、Bourne Shellのソースみて、「すんげーみづらい」って思った。
505 :
デフォルトの名無しさん :04/05/02 17:43
連休向きな話題ばかりだなあ ;)
506 :
デフォルトの名無しさん :04/05/02 17:44
for の中身どう書いてる? (i=0;i<10*s+5;i++) (i=0; i<10*s+5; i++) (i = 0; i < 100*s + 5; i++) (i = 0; i < 100 * s + 5; i++)
507 :
デフォルトの名無しさん :04/05/02 17:47
>505 プログラマはひさしぶりに休みもらうと 家で何したらいいかわからんのだよ とりあえず、やることないから2ch そしたプ板へ・・・
509 :
デフォルトの名無しさん :04/05/02 17:48
プ板はプロレス板
510 :
デフォルトの名無しさん :04/05/02 17:48
狭義のカーネルスタイルではなくても、 インディアンヒルのスタイルや GNUのスタイルなら許す。
511 :
デフォルトの名無しさん :04/05/02 17:49
GNUのは広義のカーネルスタイルでもないだろ > 中括弧位置 関数名の後ろも空白あけちゃうし
512 :
デフォルトの名無しさん :04/05/02 17:50
>>506 どれでもない
for (i = 0; i < 100 * s + 5; i++) { <--このスペイシングが常識
513 :
デフォルトの名無しさん :04/05/02 17:50
>>512 セミコロンの前にスペースを入れろよぼけ
514 :
デフォルトの名無しさん :04/05/02 17:51
いれるなよ! ぼけ > 513 セミコロンの前やカンマの前に空白いれるぼけは いってよし!
515 :
デフォルトの名無しさん :04/05/02 17:52
->と.の両側に空白を入れる奴は逝ってよし
516 :
デフォルトの名無しさん :04/05/02 17:52
>>514 そんな常識をうれしそうに語るなよ。
カンマ、セミコロンの前はかならず空白を「あけない」、
後ろは(行末じゃないかぎり)かならず1つだけ「あける」のは、Cじゃなくても常識。
517 :
デフォルトの名無しさん :04/05/02 17:53
>>515 「2項演算子の両側には空白をあける」のですが、
その例外が「.」と「->」以外にもあります、さて何かわかりますか?
518 :
デフォルトの名無しさん :04/05/02 17:54
519 :
デフォルトの名無しさん :04/05/02 17:54
添字は演算子ではない
520 :
デフォルトの名無しさん :04/05/02 17:55
[]←のこと?これって演算子だよね
コーディングスタイルで常識とか拘っちゃうPGは使えない香具師が多い。 プロジェクトでも間違いなく癌になってる。
523 :
デフォルトの名無しさん :04/05/02 17:56
#define begine { #define end }
>>521 多分添え字(a[1]の1)は項だと言いたいのだろう。
525 :
デフォルトの名無しさん :04/05/02 17:59
> コーディングスタイルで常識とか拘っちゃうPGは それ以前に「PG」とか言う用語使うやつは、はっきりいって使えない。
ちょっと前のレスで return (0); の括弧を付ける付けないとかあったけど 初心者はexit()関数と混同しちゃうんだよね。 ちなみにおれはすべて同じスタイルで統一されていれば 全然問題ないと思うけどな〜
527 :
デフォルトの名無しさん :04/05/02 18:00
528 :
デフォルトの名無しさん :04/05/02 18:00
529 :
デフォルトの名無しさん :04/05/02 18:01
#define biginn { #define enndo ;}
530 :
デフォルトの名無しさん :04/05/02 18:02
returnの値すべてにカッコつけるのは、昔のvoid氏のクセ、 そのあたりからひろまったのかも。 彼の本は全体的にすごくまともなコーディングスタイルなのに、そこだけ変なのよね. (まあ、1箇所ぐらいクセがあったほうがかわいいが)
531 :
デフォルトの名無しさん :04/05/02 18:02
>>527 さあ?
俺は+でも||でも空白は入れないが。
532 :
デフォルトの名無しさん :04/05/02 18:03
533 :
デフォルトの名無しさん :04/05/02 18:03
534 :
デフォルトの名無しさん :04/05/02 18:03
カンマ演算子も2項演算子だろ
535 :
デフォルトの名無しさん :04/05/02 18:04
536 :
デフォルトの名無しさん :04/05/02 18:04
537 :
デフォルトの名無しさん :04/05/02 18:04
自覚してたのか orz
539 :
デフォルトの名無しさん :04/05/02 18:06
sizeofは単項演算子だよな??
じゃなくてキャスト(汗
541 :
デフォルトの名無しさん :04/05/02 18:10
関数の呼び出しかな。
無駄にスレ消費させないで、最初から答えと理由を書けよ
そもそもCは曖昧な定義ばかりあるからこんなくだらん論争が続くんだよ。 sizeof演算子だって本来()はいらないけど、型の場合は()がいるとか 中途半端な制約だし。強制的に()が必要にすればいいことなのに なんでこんな糞仕様にしたんだか・・・
544 :
デフォルトの名無しさん :04/05/02 18:39
getchar() で標準入力から文字を読み込むとき EOFを読み込んだ後も getchar() を使い続けてもよいのでしょうか? OSによっては、問題がおきますか? 例 /* mytest.c */ #include <stdio.h> int main() { int ch, i; while ((ch = getchar()) != EOF) putchar(ch); for (i = 0; i < 1000; ++i) ch = getchar(); return 0; } C:\>bcc32 mytest.c C:\>.\mytest < mytest.c
一度EOFしたらそれ以降EOFしか返らないだろ
>>543 いまさらCの糞仕様っぷりに突っ込む奴はド素人
そう、Cを使うためには 俺のような海よりも広い心をもってないと話にならない
そう、Cを使うためには 俺のような宇宙と同じくらい広い心をもってないと話にならない
549 :
デフォルトの名無しさん :04/05/02 18:52
漏れの心は無限へ広がっているがな。
割り切れんの?たかが一つの言語
駄目だ。これからC勉強しようと思ったけど 上のレスみてたらやる気なくなった・・・ やっぱこれからはJAVAでしょう!
555 :
デフォルトの名無しさん :04/05/02 22:18
>>543 型の場合に括弧がいるのは
型指定子が演算子の結合規則に従わないからだろ
中途半端なのは言語ではなく、あんたの理解と違うのか
sizeofの後ろに書くのは、型ではなくて型キャスト
?
>555 問題の趣旨が違うくないかい?
?
実際、暗黙の了解でsizeof()の形式にしているのがほとんどじゃない? ()はずす事によってデメリットはあっても付けることでデメリットは ないからな。わざわざ型だけ特別扱いせずにまとめて()で処理すれば よいってことよ。
561 :
デフォルトの名無しさん :04/05/02 23:04
>>560 付ける必要がないことを知らないのだと思われるデメリットがある。
562 :
デフォルトの名無しさん :04/05/02 23:24
>>560 おまえらの無知を庇う以外のメリットはない
チーム全体の足手まといを早く自覚しろ穀潰しども
連休中はレベル低すぎだな。
オマエモナー
なんかスレ違いなやつらがたくさん沸いてますね
オマエモナー
今、友達と電話で話してたんだけど 「お前そんなこと本気で心配してんの?プゲラ」と言ってしまった。 2ちゃんしばらくやめます。さよなら。
>562 悪いけどお前よりずっとプログラムかける自信あるけど?
569 :
デフォルトの名無しさん :04/05/03 00:25
>>568 ドスの効かねえ喚きぶりで恥の上塗りか
掃いて捨てるほど型どおりのヒヨッ子だな
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | 電波を感知しました。 | |__________| / / / _ ビビビ /||__|∧ / 。.|.(O´∀`) / |≡( )) ))つ `ー| | | (__)_)
>>568 お前、文の最期にボケってかいて
ドスを聞かせてるつもりなの?
うざいから帰っていいよ。
>568 教養を感じさせない文ですね(笑
みんなC言語ごときで喧嘩はやめろよ!! 時代はBasicなんだよ!!
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | あなたは十年後にもきっと、せめて十年でいいから戻って | やり直したいと思っていますよ。 | 今やり直してください。 未来を。 | 十年後か、二十年後か、五十年後から戻ってきたんですよ、今。 \  ̄ ̄ ̄ ̄| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .|/ .∧_∧ ∧ ∧ (・∀・ ) Σ (; ゚Д゚).__( ⊂ ) (つ_つ__ ̄ ̄ ̄ ̄  ̄\| VAIO |  ̄∇日 ̄ ̄\ =======  ̄ \
おまえ達が感じている感情は精神的嫉妬の一種だ、全てのコードを俺は知っている オレニマカセロ
FAQ並なやつでいいから普通の質問を待ってるのは俺だけじゃないはず。
うわぁすごいじこちゅう
>>582 せんせぇ、何が言いたいのか理解できません!
Del厨は馬鹿ばかりだな
いくらGWつってもひどすぎないか?
また何かとGWと結び付けたがる房が来たか・・・
普段は時間帯がバラバラで馬鹿の出現が重なることは少なかったが、 GWで時間に余裕が出来て馬鹿が結集し、馬鹿が濃くなっただけ。
そんな力説しなくていいから
↑馬鹿出現。
↓こいつも馬鹿
↑こいつも馬鹿
ちゃんねらなんて大抵馬鹿だよ
←こいつは馬鹿?
>>1 から読んでみるとGWのせいではないことがよく分かる。
↓こいつも馬鹿
│ _、_ │ ヽ( ,_ノ`)ノ 残念 そいつは私のおいなりさんだ │ へノ / └→ ω ノ >
↓↑ = ハイジャンプ
↑ハイジャンプ馬鹿
602 :
デフォルトの名無しさん :04/05/03 03:40
ABAB
603 :
デフォルトの名無しさん :04/05/03 03:42
C99に対応した製品はMicrosoftから出てないんですか?
Microsoftに聞いてください
一応スレタイは(ry
606 :
デフォルトの名無しさん :04/05/03 04:11
VC++ 6.0では「//」形式のコメントも使えるし、 改行コードがLFだけのソースファイルでも平気だと聞きましたが、 それらの両方を使うとダメらしいです。 本当ですか? Windows用のCコンパイラーでcoolなのはいまなんでしょうか?
608 :
デフォルトの名無しさん :04/05/03 08:33
>>606 本当かどうか自分で試せないのか?
下手の道具選びとはよく言ったものだ
SHOW-Aは、どこへ行ったのですか?
610 :
デフォルトの名無しさん :04/05/03 10:26
> 本当かどうか自分で試せないのか? 試せてたら質問しないだろうに。 (私も持ってないので試せないので答えられないが)
C言語使う奴は低脳
612 :
デフォルトの名無しさん :04/05/03 10:35
そんな言語はありません。
614 :
デフォルトの名無しさん :04/05/03 12:06
「#include」の後ろに空白あけないのは、 どのあたりで増えたんだろ。きっと何かぼけな本が流行らせたんだと思うが...。 (日本でしか見かけないし)
615 :
デフォルトの名無しさん :04/05/03 12:08
616 :
デフォルトの名無しさん :04/05/03 12:11
ブレイスの位置とインデントですが、古くはカーネルスタイルと言ってたやつ、 いまでは「K&R」スタイルってのがそうですかね? で、これは while (...) { ... } ってやつなんですが、これの場合、elseはどうしてます? if (...) { ... } else { ... } と if (...) { ... } else { ... } は、どっちが普通なのかしらん?
またコーディングスタイルの話か
618 :
デフォルトの名無しさん :04/05/03 12:17
そそ 連休の話題といえばそれでしょ
619 :
デフォルトの名無しさん :04/05/03 12:19
だね。 コーディングスタイルといっても、変数の名前の付け方や、整数の扱いやその他いろいろ あるが、その中でも、インデントとスペイシングと中括弧の位置などの「みばえ」の 部分は、たしかに連休向きだね。
620 :
デフォルトの名無しさん :04/05/03 12:20
くだらん質問で申し訳無いが、 呼び出した関数の履歴(ヒエラルキ)が GUI的にわかるフリーのツールない? ↓こんな風に表示される a()->b()-+->c() -->d() で、c()をクリックすると、c.cが開いて、 c()のところに飛んでくれるみたいな。
Visual Studio ってフリーd(ry
624 :
デフォルトの名無しさん :04/05/03 12:47
表示するならBSDならcalltreeコマンドだな。 たどりたいなら、viでcontrol+] すればいい
>>616 おれは最初に習ったのがCOBOLだったんで、
IFとELSEは対応してるっつー考えが染み込んでしまって
if (){
}
else{
}
とやってしまう。
626 :
デフォルトの名無しさん :04/05/03 12:59
if(i == 0) (とiが、0と)がセットみたいでいや。 if( i == 0 ) か if(i==0) がいい。 hoge(0, 3, 5); 自転車の片方補助輪みたいでいや。 hoge( 0 , 3 , 5 ); か hoge(0,3,5); がいい。 なんて言ったら怒られそう。
何が言いたいのかさっぱりだ。
翻訳キボソヌ
こんな書き方ってどう思います?以前働いた所の コーディングスタイルなんですが。 static int func_add( int a; int *b; double c; ) { /* 関数の中身 */ }
コンパイル通らないだろそれ。
訂正 static int func_add( int a, int *b, double c ) { /* 関数の中身 */ }
scanfを使うと改行を入力したらおかしくなるんですがどうにかなりませんか?
一言でscanf()を使うといっても、色々な使い方があるし。
int x, y; char buf[1024]; fgets(buf, sizeof buf, stdin); if (sscanf(buf, "%d%d", &x, &y) != 2) 〜〜〜〜〜;
>>634 そのコーディングスタイルは関数の検索にgrep使うお馬鹿さんが好んで使うスタイルだな。
恥かくからあまり他所では使わないほうがいいよ。
grepてなーに?
便利なテキスト検索ツール。 使いこなせない人はプログラマとしては猫以下。
642 :
デフォルトの名無しさん :04/05/03 16:56
643 :
デフォルトの名無しさん :04/05/03 17:02
JIS-Cの企画書ってオンラインかつ無料で手に入ります?
644 :
デフォルトの名無しさん :04/05/03 17:02
>>641 dクス
そんなのも必要なんだねぇ…難しいなぁ
647 :
デフォルトの名無しさん :04/05/03 17:17
>検索にgrep使うお馬鹿さんが なぜおばかなんですか? >使いこなせない人はプログラマとしては猫以下。 検索以外の機能でgrepは有用だということですか?
648 :
デフォルトの名無しさん :04/05/03 17:22
関数の検索に
grepのためにそんなミョウチキリンな規約を強要しているのなら、DQNってことだ。 そりゃツールのために定型スタイルに沿ってコーディングするのが悪いというわけではない。javadocとかな。 だが、ツールのために、規約があまりにも歪むようでは本末転倒。過ぎたるはうんこ。
grep検索のためだったの? おれはてっきり引数の数が多くなるとわかりにくくなるから >634みたいなスタイルにしていると思ってた。
旧式のスタイルの呪縛という気もするな、 f(a, b, c) int a, int b char c { } みたいなやつ
652 :
デフォルトの名無しさん :04/05/03 17:59
関数名の前で改行しているのが何よりもきもい。
引数を行分けては書かないけど、関数名を頭に持っていくというのは やってる。正規表現検索できるエディタなら「^func_add」で一発jump できるから。 もちろん関数リスト出せるGUIなエディタとかならそんなの必要ないと いう話もあるけど、商用Unixで低機能なvi使う事が多いんで、Cで書く 時はもうそう書くのが癖になっちまってる。 もっととも人に勧めたり強制するつもりはさらさらないけど。
>>650 パラメータにそれぞれコメント書くために
>>634 みたいに書いてたことがあった。
けど、当時使ってたエディタ(つかctags)でタグジャンプできなくなったので、すぐにやめたw
ここって質問しにくいふいんきが漂ってるなあ。
656 :
デフォルトの名無しさん :04/05/03 18:42
厨な質問で申し訳ないんですが、時々中括弧“{,}”をマクロで BEGINとかENDに置き換える奴を嘲笑するスレってあると思うんですが、 あの嘲笑には合理的な理由があるんでしょうか? それともCの世界のジャーゴンに馴染めない奴を村八分的に笑っているだけ? 正直、C#とかでコード書いてると、中括弧の可読性の悪さにいらついて しょうがないんですが。
そこまでしてCを使わなくてもいいんじゃねーの? 仕事でどうしてもCを使うなら、そんなプロジェクトチームを混乱させるような所業はもってのほかだし。
>>656 どのブロックの表記がわかりやすいかの議論は確かにあるけど
Cでは{}を使うことになっている。
その決まりを曲げてまでBEGIN/ENDにする意味はないってこと。
ブロックに限らず明確で大きなメリットがない限りは(デファクト)スタンダードにあわせるのが筋。
自分がなれているという理由だけで他の言語等のルールを持ち込むのは迷惑。
659 :
デフォルトの名無しさん :04/05/03 18:51
>>651 旧式を知らない若造(もしくは当時バカガキの成れの果て)が
訳知り顔で語ってんじゃねえよ
隙だらけだぜ? てめーのコード
660 :
デフォルトの名無しさん :04/05/03 18:52
>自分がなれているという理由だけで他の言語等のルールを持ち込むのは迷惑。 んだ、これにつきる
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | 電波を感知しました。 | |__________| / / / _ ビビビ /||__|∧ / 。.|.(O´∀`) / |≡( )) ))つ `ー| | | (__)_)
>>658 デファクトスタンダードに従え、ってのは一見理があるようにも思えますが
私は非論理的だと思いますね。
コード中の“}”をみて、いったいどのブロックの終端を表しているのか
パッとわからずにいらいらしたり、“}”の非明示性から勘違いによるバグを
発生させた経験はCでコードを書いてる人なら誰でも少なからずあるはず。
要するにこの表記法には明らかな弊害がある。
一方、たとえば“}”を替わりに“EndIf”“EndFor”“EndFunction”
などと表記した場合、上記の弊害はかなりの程度抑制できる。
それでいてこういう表記法が何か新たな弊害を生むか、と言えば
少なくとも私はそうは思えない。
EndIfという表記を見て、これがIfブロックの終端を表すことが分からない
プログラマなんて果たしているでしょうか?
>>659 だから、「みたいなやつ」ってかいてあんじゃんか。
>>662 ま、そんなことしたらエディタの支援が受けられなくなるわけで。
括弧の対応なんざインデントでもわかるしな。
どのレベルまでインデントしたかわからなくなってしまうようなコードは、
それはそんなに深くインデントするようなクソなコードを書いた方が悪いんだしw
>>662 複数ネストしてたら結局その部分はカバーできない。
というか、インデントによって対応を明示する慣習で解決してるんだが。
666 :
デフォルトの名無しさん :04/05/03 19:10
>>662 何言ってんだよ。そんなのインデントすれば済むことだろ?
逆にインデント無茶苦茶でもEndIfなら読みやすいとでも思っているのか??
仮にあなたがそう思っているとして、周りの声に耳を貸す気はあるか???
議論を始める前の目的意識から間違ってて論理もクソもあるかよ。
インデント三兄弟?
どうでもいい
char *begin = v, *end = v + size; こういうコードがあったとして、あとから来た奴がbegin/end置き換えマクロを使うとどうなる? 個人で完結していて後から誰も触らないならどんなマクロも自由に使えばいいだろう。 begin/endはままあるけど、endif/endforなんてのは誰も上げない。 つまりは{}の置き換えに可読性の向上といった意味はない。 自分の流儀に合わせようという姿勢しかないだろ? だいたい、すぐわからないのはインデントが統一されてない 糞コードを書いてる証拠なわけだ。
長文反論のヨカーン
そんな変則的な書き方を嫌うやつが多い。 それがすべてだろ。
>>669 >個人で完結していて後から誰も触らないならどんなマクロも自由に使えばいいだろう。
と思ってbourneさんはshをそのように書いてしまって、
後々までメンテが悪夢のようになるという害悪と垂れ流してしまった。
いやね、EndIfとかがわかりやすくていいというのなら、
それはそういうのがある別の言語でやって欲しいっす。
たしかVBってそうじゃなかったっけ。
あとshならcaseを閉じるのはesacだし、ifを閉じるのはfiだ。
いや、きちんと“{”(またはブロックの最初の予約語)と“}”が対応するように インデントをする、っていうのは当然自明の前提で言ってますよ。 もちろん、ちゃんとインデントで対応さえつけていれば、8割がた迷ったり 混同したり、ってことはないのは認めます。(それでも、「余分なことに脳のパワーを とられている感」はやっぱり残りますが。いや、それはおまえの頭の性能のせい、って言われれば これはそれまでですが・・・・・・。) でも残りの2割の、パッとみて対応関係がわからないようなコードにおける弊害は やっぱり気になるし、私はそれは”}”をもっと明示的な表現で置き換えることで こうした弊害は回避できると思うのに、なんかこういうのが馬鹿にされるような 空気があるから、その「空気」には本当に合理的な理由があるのか、それともやっぱり 単なる空気に過ぎないのか、知りたいと思って質問させてもらってるわけです。
リクツで考えちゃダメなんだよ。プログラマの悪いところだ。 つーか、リクツですら筋が通っていないがな。 まわりに合わせるのが一番なんだよ、少なくともこれに限ってはね。 Win32APIのハンガリアンもどきとか、上で出ているshとか、使ったことあればわかるっしょ。 Gameでも個人的に作るだけってんなら、好きにしていいけど。
> >656 英米圏の人が書いたコード見たことあるだろ?ぱっと見 全てアルファベットでどこがコメントかどかがソースか見分けづらい。 その点、日本人は日本語でコメントかけるからコメントとソースの 判別がしやすい。それと一緒で{}記号も十分にブロックの終端を示す 役割は果たせてると思うぞ。
>>674 パッと見て対応関係が分からないコードなら、どうしたって見通しは悪いぞ。
for (...) Begin if (...) Begin ...; EndFor コンパイルエラー出ないぞ
679 :
デフォルトの名無しさん :04/05/03 19:35
>>674 インデントで整理できない残りの2割って何だよ?
巨大関数か?? それはロジックが組めない未熟のせいであって、言語が何であろうが関係ないぞ。
"正しく"コンパイルエラーで無いぞ、だな。
>>676 さすがにコメントについての意見は賛同しかねる
エディタで色分けするべきだから
>681 賛同も何もあくまで例えで言っているわけで・・・
>>679 整理できない、なんていってません。
ぱっと見て対応関係がわからないコードがある、といっているんです。
いや、なんか「どんな処理でも可読性を保ちつつ、
かつコンパクトな関数に落としこめるはずだ」とか思ってる人がいますが、
現実には必ずしもそんなことはないんですよ。(もちろん、イージーなことばっか
やってれば、それはその限りにおいてはそのとおりでしょうが。)
具体的にどんなだよ、ってことなら、例えば私はWindows DDKのUSB関係の
コードつついてるんですが、こういうののコード見てもらうと私の言ってることを
体感してもらえると思うんですけど。(もちろん、こういうのの把握能力が超絶してる
人にとっては、なんてことないのかもしれませんが、標準的な頭の性能の人にとっては
結構キツイ場合がある、といっているわけでして。)
>>656 >“}”の非明示性から勘違いによるバグは誰でも少なからずあるはず。
ブロックで囲まなかったことによるif-elseの対応関係ミスのバグはありうるが、
ブロックで囲むことによる弊害は聞いたことが無い。インデントですべて解決する。
>一方、たとえば“}”を替わりに“EndIf”“EndFor”“EndFunction”
>などと表記した場合、上記の弊害はかなりの程度抑制できる。
C言語にはif文用の{}やfor文用の{}があるわけではなく、
これらは複文とかブロックとかcompound statementとか呼ばれる文を一まとめにするものである。
>それでいてこういう表記法が何か新たな弊害を生むか
生む。山のように文法が増える。
構造体・共用体・列挙体・関数定義・while・do-while・for・if・else・else if・switch
これら全部に別の名前を付けるのは煩雑以外の何者でもない。
(同じ傾向のものでまとめたところでさして変わりはしない)
かつ、以下のような文はどう記述するのか?
int main(void)
{
int i;
{
int i;
...
}
...
}
より分かりにくくなるだけではないか。
686 :
デフォルトの名無しさん :04/05/03 20:10
>>684 そのWindows DDKのUSB関係のコードはBEGIN,ENDマクロを使えば見やすくなるのか?
>681 お前は俺と同じでくだらないことにつっこむのが好きみたいだな 俺も同じようにつっこませてもらうが日本語翻訳無しのC本で コメントにわざわざ色分けしているやつがあるなら教えてくれ。 皆が皆お前が思っているような環境ばかりじゃないんだよ。
>>687 ISO/IEC 9899:1999はコメントが斜体になっていて見やすいが?
>皆が皆お前が思っているような環境ばかりじゃないんだよ。
クロスコンパイラ使えよ。それが嫌ならviでも使ってろ。
言語やコードに求めるものと、エディタに求めるものは明確に区別するべき。
>>684 ソースは全て手書き、コードジェネレータなんて触った事もないって人間なんだろうな。
今作ってるプログラム。少しおかしな動きをする、理由が分かる人、助けてくれまいか とりあえず前戯省略。 char filename[60] main(){ gets(filename); file_open(); } file_open(){ FILE *fp; fp = fopen(filename, "r"); fclose(fp); } 動作 出来上がったファイルをクリックして実行 ファイルあり→そのまま終了 ファイルなし→メモリがread...とかいうエラー コマンドプロンプトから実行 ファイル有無に関わらずメモリがreadに云々言われる 環境はWin2kです ファイル名をグローバル変数に格納したうえ完璧に動くようにするにはどうすればよろしいでしょうか
691 :
デフォルトの名無しさん :04/05/03 20:20
コードジェネレータがはいたコードは人間の見るものじゃないだろ
括弧の対応はエディタに求めるべきではない、と。
693 :
デフォルトの名無しさん :04/05/03 20:21
>>690 ネタ?
fopenの戻り値を確認してfcloseしろ。
なんか日本語を良く分かってない連中がウヨウヨいるな。 676氏の言う”例え”の意味わかっているんだろうか・・・
おまえもな
>>693 あー、すみまそん。。。ネタじゃないです
かなり省略気味に書いたんです
実際は
if((fp=fopen(filename, "r")) == NULL){
printf("File not found");
fclose(fp);
return 1;
} else {
fclose(fp);
return 0;
というコードなんですが、それでも同じ条件で落ちちゃうんです・・・
もしかしてfile not found の後のfcloseが要らないって事ですか?
open出来てないのにcloseするな
698 :
デフォルトの名無しさん :04/05/03 20:28
>>696 それじゃ結局fcloseを呼んでいるだろ。
> もしかしてfile not found の後のfcloseが要らないって事ですか?
当然。
要らないというか呼んではいけない。
fclose関数はNULLチェックやってくれません。
>>685 そういう All or Notingの議論はしていません。
宗教じゃないんだから、XXを原理主義的な規範とすべきだなどどは言ってません。
そうではなく、まったく逆に、つまらない「掟」に縛られることなく、
柔軟に、目的合理的に手段を選択すべきではないのか?、といいたいのです。
つまり早い話が、{}の置き換えが可読性に資する場面ではそれを使うべきだし
そうでなければ当然使うべきでない、そういう柔軟性が必要では?、と。
>>686 場合によっては、Yes。(実践してます)
>>701 各々が俺ルールに従って好き勝手に日本語を改変して喋りまくったら
円滑なコミュニケーションがとれないだろ。
それにあんたが思うほどbegin, endは{, }よりも合理的とは言えないよ。
開発効率はそれとはもっと捌の部分に左右されるということが
もうすこし(トータル49万行くらい)コードを書いていくと分かると思うよ。
>701 ワロタ。とりあえず、貴方がそうしたいなら同じプロジェクトのメンバー説得して そのようにやればいいんじゃないの?(説得できるなら) ただ、おれの知る限りNもFもHもSもそういうコーディングスタイルは 認めないと思うよ(笑
>656 “EndIf”“EndFor”“EndFunction”が可読性を高めるのなら テキストエディタで開いたVBのコードは可読性が高いんかな? VBで可読性が高いコードもあるが、そうなっているから可読性が高いというのは見たことがない 所詮コードの可読性なんて文法(中括弧の置き換え含む)ではなくて書き方(インデントの仕方とか)や アルゴリズム(適切なコード分けを含む)だと思うんだが 一番見たくないのはインデントがないとかでたらめなコード
awkなどのスクリプト言語で処理するには便利でいいんだけどな。<EndFunction ソースから設計書を生成するのに掛かる手間が結構違ったよ。
単に可読性あげるだけならいろいろ方法あると思うけど。 どうしても、長いソース書いてしまって、終端が分かりづらいなら 終端にコメント加えればいいし。
>>706 だからと言って、そういうコードを書くような香具師に限って
while () {
・
・
・
} /* end for */
なんて書きかねない罠。
処理系支援のない構文糖は害悪でしかないよな。
709 :
デフォルトの名無しさん :04/05/03 21:02
>>628 > if(i == 0)
> (とiが、0と)がセットみたいでいや。
> if( i == 0 ) か if(i==0) がいい。
っていうか、それ以前に「if」の後があいてないからそんなことになるんだろ ぼけ
710 :
デフォルトの名無しさん :04/05/03 21:06
>>635 > scanfを使うと改行を入力したらおかしくなるんですがどうにかなりませんか?
っていうか、使うな > scanf
使うやつはバカ
大漁だな。馬鹿ばっか(禿藁
713 :
デフォルトの名無しさん :04/05/03 21:10
>>649 > grepのためにそんなミョウチキリンな規約を強要しているのなら、DQNってことだ。
逆だろ。関数定義の先頭を検索するためだったら、むしろ引数は一緒の行に書いたほうが
便利じゃん。
わざわざ引数を別の行に1つずつ書くのは、後ろにコメントつけたいやつがやることだろ。
それぐらい常識
>>712 そこで終わってる人なんですよ…
憐れなものです。
715 :
デフォルトの名無しさん :04/05/03 21:12
> もちろん関数リスト出せるGUIなエディタとかならそんなの必要ないと > いう話もあるけど、商用Unixで低機能なvi使う事が多いんで、Cで書く > 時はもうそう書くのが癖になっちまってる。 こいつ、viの使い方もろくにわかっていないぼけ
手抜きで使う分には何も問題ないだろう>scanf つーか、使うなっていうのは不特定の人間に使わせるアプリケーションに 使うなとかいう意味であって、scanf自体が悪ってわけじゃない。 たまに宿題スレとかでいちいちscanfに突っ込む奴も居るが こいつらの方が何も考えずに喚いてるだけに見えるわけだよ。
ctagsあんま好きじゃない find と grep の方がすき
何か暗いことやってんなおまいら たまには外に出ようよ
719 :
デフォルトの名無しさん :04/05/03 21:16
>>672 > あとshならcaseを閉じるのはesacだし、ifを閉じるのはfiだ。
じゃあoknamを閉じるのは?
720 :
デフォルトの名無しさん :04/05/03 21:17
> またはブロックの最初の予約語 Cには「予約語」などありません。
721 :
デフォルトの名無しさん :04/05/03 21:20
>>690 > gets(filename);
getsつかうなよぼけ
> fp = fopen(filename, "r");
エラーチェックしろよぼけ
なんでおれがつかうなっていうものばかり使うんだ? ぼけは
722 :
デフォルトの名無しさん :04/05/03 21:21
> if((fp=fopen(filename, "r")) == NULL){ 空白あけろよぼけ。 たいがいボケなことやってるやつは、ここに空白をあけない
723 :
デフォルトの名無しさん :04/05/03 21:22
> 使うなとかいう意味であって、scanf自体が悪ってわけじゃない。 いーやscanf自体が悪い。 そこがわかってないからおまえはぼけなんだ。
724 :
デフォルトの名無しさん :04/05/03 21:23
空 白 あ け ろ よ ぼ け 。 た い が い ボ ケ な こ と や っ て る や つ は 、 こ こ に 空 白 を あ け な い
725 :
デフォルトの名無しさん :04/05/03 21:24
726 :
デフォルトの名無しさん :04/05/03 21:26
scanf自体がわるいのにそれをわかってないぼけが 「手抜きでつかう分にはいいだろ」とかいってたが、そのせりふがそもそもぼけ たとえば「テストでちょっと書くだけのコードだからforなんてつかわなくても 同じことをgotoで書いてもいいだろ」って言ってるのとなんらかわらないことに 気づいていない。 かえってややこしくなるだけなのにね。 scanfで質問してるぼけは、みんなそういうやつばかりだ。 つまりscanfの出番は 100%ない。 gotoの出番なら0.01%ぐらいどこかに残ってるかもしれないが。 なのにscsnfの出番があると信じているやつは、 はっきりいってぼけ。ろくな本読まなかったんだろうね。
>gotoの出番なら0.01%ぐらいどこかに残ってるかもしれないが。 プ
728 :
デフォルトの名無しさん :04/05/03 21:28
caseのインデント位置は switchに合わせろ ぼけ。
批判するときは理由を書けよ。 理由を書かないから頭が悪いって思われるんだ。
なんか熱弁振るってるようですが、言ってる内容がそれじゃあねえ… プログラマとして閉経して更年期障害おこしてるかわいそうな人ですね…
初潮もまだなのに大人ぶってるだけでしょう
732 :
デフォルトの名無しさん :04/05/03 21:32
> 批判するときは理由を書けよ だれも批判などしてないのでは? こういうのは批判だけど > 批判するときは理由を書けよ
あ、 も さ り あ が っ て た ま い し り ま
734 :
デフォルトの名無しさん :04/05/03 21:34
さて問題です。 Cのキーワードは全部で何種類あるでしょう? > 知ったかぶり君
735 :
デフォルトの名無しさん :04/05/03 21:34
0
256コくらいかな
>>734 それは39056442ペイジに書いてありますね。
739 :
デフォルトの名無しさん :04/05/03 21:35
5個
740 :
デフォルトの名無しさん :04/05/03 21:35
>>723 いーや、おまえは頭が悪い。
そこがわかってないからおまえはぼけなんだ。
741 :
デフォルトの名無しさん :04/05/03 21:36
神様はもっと切りのいい数にするはずだから、 32個!
743 :
デフォルトの名無しさん :04/05/03 21:37
今のCです
744 :
デフォルトの名無しさん :04/05/03 21:39
>>726 おまえの頭がわるいのにそれをわかってないぼけが
「手抜きでつかう分にはいいだろ」とかいってたが、そのせりふがそもそもぼけ
たとえば「テストでちょっと書くだけのコードだからforなんてつかわなくても
同じことをおまえに頼んでもいいだろ」って言ってるのとなんらかわらないことに
気づいていない。
かえってややこしくなるだけなのにね。 wwwwwwwwww
scanfの罵倒しかチャンスの到来しないぼけは、みんなそういうやつばかりだ。
つまりおまえの出番は 100%ない。
longjmpが使えないアフォの出番なら0.01%ぐらいどこかに残ってるかもしれないが。
なのにおまえの出番があると信じているやつは、 おまえだけ。
はっきりいってぼけ。ヤクでもキメてんだろうね。
wwをあぼーんすると幸せになれます。
747 :
デフォルトの名無しさん :04/05/03 21:43
>>745 むりだろ。
まともにいいかえせないので、あいてのいうことまねするのは
頭が悪いと小学校の高学年になってもやるやつがいる
(ふつうは5,6歳まで)
748 :
デフォルトの名無しさん :04/05/03 21:43
むしろ「ぼけ」だろ。
749 :
デフォルトの名無しさん :04/05/03 21:44
>>684 >ぱっと見て対応関係がわからないコードがある、といっているんです。
だから何なの?
while(...)
BeginWhile
/* ... */
EndIf
DDKのコードがこれで見やすくなるとでも言いたいのか?
あんた、論理ってさっき言ってたよな。気は確かか??
750 :
デフォルトの名無しさん :04/05/03 21:44
Windowsで使えるおすすめのCのコンパイラーを教えてください。 これから入門するレベルです。
751 :
デフォルトの名無しさん :04/05/03 21:45
> だから何なの? > while(...) っていうか、まず空白あけろよ ぼけ 話はそれからだ。 そこをあけてないようなやつが、何かもっともらしいこと言っても無駄。
// コンパイルエラー while(...) BeginWhile /* ... */ EndIf // 正常終了 while(...) BeginWhile /* ... */ EndWhile
この速さならとれる 1000!
754 :
デフォルトの名無しさん :04/05/03 21:47
>>684 >ぱっと見て対応関係がわからないコードがある、といっているんです。
goto L2;
L1:
EndWhile
L2:
while(...)
BeginWhile
if(...)
BeginIf
goto L1;
Endif
げらげら
ボケとかバカとか言ってる奴 もしかしてちょコラたん? こんなところにも大発生!? もしかして、自作板やPCげー板の奴らに反論するために Cのお勉強開始したの!?
756 :
デフォルトの名無しさん :04/05/03 21:48
End14thIfinFunctionHogeHoge EndFunctionItsNameIsHogeHoge おれはいつもこうやってるな > }
758 :
デフォルトの名無しさん :04/05/03 21:49
760 :
デフォルトの名無しさん :04/05/03 21:50
>>759 それ、ほんとうにおすすめなんですか?
ほかにはないですか?
>>752 EndIfとEndWhileは別のものを割り当ててるのか?
たしかにそれでエラーでるなら便利かもな。
>>760 いや、言ったこと疑うならそもそもここで訊くなよ低脳。
これからはsprintfは使用禁止です。 sprintf自体が悪なんです。 snprintfを使うようにしましょう。 それがない処理系を使っている人は首を釣りましょう。
765 :
デフォルトの名無しさん :04/05/03 21:52
>>752 こらこらコンパイルエラーでは正常終了しか起こらないぞ
>>758 むしろ、開けろなどと言って啓蒙するよりもほっといた方がいいのでは?
スペースを入れるようになっただけの「ボケ」が増えたら炙り出すのが面倒になりませんか?
>>761 >>765 #define BeginWhile {
#define EndWhile }
while (...)
BeginWhile
EndWhile
#undef BeginWhile
#undef EndWhile
#define BeginIf {
#define EndIf }
if (...)
BeginIf
EndIf
#undef BeginIf
#undef EndIf
#define BeginWhile {
#define EndWhile }
while (...)
BeginWhile
EndWhile
#undef BeginWhile
#undef EndWhile
可読性最高
770 :
デフォルトの名無しさん :04/05/03 22:00
>>767 #define BeginWhile {
while (...)
BeginWhile
#undef BeginWhile
#define BeginIf {
if(...)
BeginIf
#undef BeginIf
#define EndIf }
EndiWhile // compile error
#undef Endif
#define EndWhile }
EndWhile
#undef EndWhile
うーん、すばらしい
>>769 nmakeがないから、bccの方が易しい
772 :
デフォルトの名無しさん :04/05/03 22:02
>>761 #define BeginWhile {
#define BeginFor {{
#define BeginDo {{{
#define BeginIf {{{{
#define Endif }}}}
#define EndDo }}}}
#define EndFor }}
#define EndWhile }
while(...)
BeginWhile
/* ... */
Endif // compile error
これでどうだ?
773 :
デフォルトの名無しさん :04/05/03 22:04
int a[]=BeginWhile 1,2,3,4 EndWhile;とできるのがいかんなぁ。
774 :
デフォルトの名無しさん :04/05/03 22:05
#define BeginWhile { int statement = 1; #define BeginFor { int statement = 2; #define BeginDo { int statement = 3; #define BeginIf { int statement = 4; #define EndIf assert(statement == 4); } #define EndDo assert(statement == 3); } #define EndFor assert(statement == 2); } #define EndWhile assert(statement == 1); }
#define BeginWhile {int a=0;{ #define BeginFor {int a=0;{int b=0;{ #define BeginDo {int a=0;{int b=0;{int c=0;{ #define BeginIf {int a=0;{int b=0;{int c=0;{int d=0;{ #define Endif }d=1;}c=1;}b=1;}a=1;} #define EndDo }c=1;}b=1;}a=1;} #define EndFor }b=1;}a=1;} #define EndWhile }a=1;} これならどうだ
777げと
>>701 >そうではなく、まったく逆に、つまらない「掟」に縛られることなく、
>柔軟に、目的合理的に手段を選択すべきではないのか?
はっきり言うとね、言語仕様って言うのはねうちらよりもはるかに優秀なプログラマが
うちらよりもはるかに長い時間議論をして、はるかに長い間テストされてきた結果なのよ。
でね、私の反論はそれを踏まえて「合理的な理由が無い」って言っているのですよ。
つまりね、「合理的な手段を選択した結果、Endifはいらない」ってことなのですよ。
厨ってなにかと「括弧」で囲みたがるよね。
780 :
デフォルトの名無しさん :04/05/03 22:10
>>778 >でね、私の反論はそれを踏まえて「合理的な理由が無い」って言っているのですよ。
虎の意を狩る狐だな。興ざめ
781 :
デフォルトの名無しさん :04/05/03 22:11
>>780 IMEのばかぁ〜
s/意/威/
s/狩/借/
sizeof (((((((((((((((((T_T))))))))))))))))))))
>>778 そういう思考法は合理主義、あるいは機能主義ではありません。
「伝統主義」といいます。非文明社会の成員の一般的な考え方ですね。
いわゆる「永遠の昨日」という奴ですな。
合理的、というからにはどのように「理に適う」のかを説明可能でなければ
なりません。
徹頭徹尾、その理にかなうさまの説明がないではありませんか。
>>780 虎の威を借りて何が悪いのか。
さすがに自分の話の正当性の根拠に、自説を引用してくるような人は違いますな。
>徹頭徹尾、その理にかなうさまの説明がないではありませんか。 BEGIN ENDに置き換える合理性ってのは一度でも説明されたっけ? BeginWhileで始めてEndIfで閉じれるなんてのは、混乱を招くだけですが?
787 :
デフォルトの名無しさん :04/05/03 22:17
>>785 悪いとは言ってないし、そういう意味の文脈も書いてない。
おまえの話に興味が失せたと言っている。
内容がないよう
685が名無しに戻りました。
>>787-788 俺は685じゃないよぅ
ちょコラたんファンだから触らずに居られないだけだよぅ
790 :
デフォルトの名無しさん :04/05/03 22:23
656は{}をBEGIN,ENDに置き換えるだけで読みやすくなる(
>>701 )変人だからなぁ。
791 :
デフォルトの名無しさん :04/05/03 22:25
せんせい!プリプロセッサつきのLispをつくってくらさい。 かっこがおおくてよめません。
あえてBEGIN/ENDにするってのは MFCのメッセージマップのように その構造を意識させないで書けるようにする場合くらいだよな。 構造そのまま{}を置き換えるだけなのは無駄な労力でしかない気がするよ。
>>792 半べそかきながら荷物まとめて夜逃げしますた。
Begin if hoge Begin progn Begin setq hoge 1 End Begin setq fuga 2 End End Begin progn Begin setq hoge 0 End Begin setq fuga 1 End End End
796 :
デフォルトの名無しさん :04/05/03 22:37
>>795 hinesを髣髴とさせるフォルムだなw
>>795 せんせいごめんなさい。ぼくがまちがってました。
799 :
デフォルトの名無しさん :04/05/03 23:08
800げと
>656は、自分の好きなようにやりたきゃやってれば良いじゃない。 俺は普通に書く。
802 :
デフォルトの名無しさん :04/05/03 23:22
if()やwhile()のカッコの前スペース入れろっていうやつ なんでprintfとかの後は開けないの? もしかしてアホなの? #include<stdio.h> int main (){ printf ("←開けろよ(プ"); return 0; }
↑お前がアホ
804 :
デフォルトの名無しさん :04/05/03 23:35
>>802 まぁ初心者には教えてやるよ。
printfは関数、ifとかwhileは関数じゃない。
もちろん、returnも関数ではない。
805 :
デフォルトの名無しさん :04/05/03 23:44
>>801 自分の勝手で済む香具師に誰も口出ししたかねーよ疲れるだけ
806 :
デフォルトの名無しさん :04/05/03 23:45
>804 だから何で制御文は開けて関数は開けないの? 区別付けやすいから?プ プログラマーに向いてないんじゃないの? 開けた方がいいよ。プ
分かったからもう寝なさい。 連休中だからといって、 あまり遅くまで起きていてはいけませんよ。
808 :
デフォルトの名無しさん :04/05/03 23:48
>>802 つーか、そこだけじゃない
突っ込みどころ満載だぞ
おまえのコード
習慣的なもんでしょ?スタイルに理屈なんて求めるなよ。
>>792 LispにはCのプリプロセッサよりもはるかに高機能なマクロがありますよ。
うまく使えば括弧を減らせます。が、撲滅は無理ですw
つか郷に入らば郷に従えだ。括弧に慣れましょう。
Lispの仙人は括弧があることを忘れてるそうです。
>>784 あー、多分あなたは私のことを「偉い人の言いなり」なひとと勝手に思い込んで
私の発言をすべて色眼鏡を通して読んでるんじゃないかな?
確かに私の文章は「偉い人が言っている。だから正しい」って言っているように読むことも出来るよ。
>徹頭徹尾、その理にかなうさまの説明がないではありませんか。
よっぽどの理由が無い限り文法に例外を持ってきてまで言語仕様を変える必要は無い。
一貫性のほうがはるかに大切だ。ってこと。で、あなたはよっぽどの理由を挙げていない。
漏れだって昔は「行の終わりのセミコロン(;)って意味無くないか?忘れやすいし」って思ったさ。
最後に言うことは「自分が思いついたことはたいてい過去に誰かが思いついている」だな。
こんな議論は大昔から何度もやってきたのよ。それを踏まえての発言なら良いんだが、
それすらも調べずに合理性だのなんだのわめいても仕方が無い。
その行為自体に合理性が無いのだよ。土俵にすら上がれていない。
過去の伝統に縛られず新しい物を提案するのは良いことだが、
それを成し遂げるためにはそれなりの実力が必要なのだよ。
もうやだ連休厨
>>811 ま、お前には千年かかっても無理だけどな( ´,_ゝ`)プッ
814 :
デフォルトの名無しさん :04/05/04 00:04
>>811 俺は656ではないが、あんたの話は無茶苦茶だ。聞くに堪えない。耳が腐る。
最近減ってきたが人が何か言うたび過去ログ過去ログと五月蝿い輩と
過去に誰がどんな話してたかチェックし終わるまで議論の資格がないというあんたには
合い通じるところがある。そういうあんたは世界中の論文は読み終わったのか?
あー、だから内容がないんだな、あんたの話には。自分が議論してないわけか。
>>812 嘆いてないでどっかに出かけろよ( ´,_ゝ`)プッ
とりあえず、814は過去ログも読めない黄金厨
>>814 はぁ?何で2chの過去ログ話が出て来るんだよ。そういうこといってるんじゃない。
goto文不要説とか、switch文のフォールスルーとかif文の中の代入文とか、銀の弾丸とか。
まあ、おまえには世界中の論文かもしれないがな…。
>過去に誰がどんな話してたかチェックし終わるまで議論の資格がない
すべての話をチェックしろといっているわけではなく、大まかな過去の流れを掴めと言っている。
かつ、資格がないというのは「調べようとしない」からだよ。
無知は罪ではないが、知ろうとしないのは罪である。
必死だなw
void read_slogan(FILE *fp, char **slogan) { char buf[1024]; int i; for (i = 0; i < 7; i++) { fgets(buf, 1024, fp); buf[strlen(buf) - 1] = '\0'; slogan[i] = malloc(sizeof(char) * (strlen(buf) + 1)); strcpy(slogan[i], buf); } } int main(void) { char *slogan[7]; int i; read_slogan(stdin, slogan); for (i = 0; i < 7; i++) { printf("%s\n", slogan[i]); } return 0; }
上のソースは某ポインタ本からの引用なんですが 2点教えてください。 @一点目@ read_slogan()関数は実引数にstdinを指定していますが 直接fgets()関数にstdinを使うのは変ですか? @二点目@ read_slogan()関数内のbuf[1024]はfor分で繰り返されるたびにfgets()で 初期化されるんですか?自分は当初下記のように予想してました。 ////////////////////////////////////////////////////////////////// for分1回目:hello buf[0]→h buf[1]→e buf[2]→l buf[3]→l buf[4]→o ------------------------------------------------------------------ for分2回目:bye buf[0]→b buf[1]→y buf[2]→e buf[3]→\0 buf[4]→o /////////////////////////////////////////////////////////////////// 実際、2回目のbuf[4]は空でした。
>>656 には
「EndIf」や「EndFunction」の様な書き方がしたいなら、
言語仕様でそういうものがある言語を使え。
で十分だろ。
>>821-822 >read_slogan()関数は実引数にstdinを指定していますが
>直接fgets()関数にstdinを使うのは変ですか?
ファイル「hoge.txt」と「foo.txt」からの入力に対して全く同じ処理をする時に、
それぞれのフィルのオープン/クローズを入れた別関数をそれぞれ作る気か?
>fgets()で初期化されるんですか?
日本語で話せ。
う〜ん、、フィルのオープン/クローズはできんな
826 :
デフォルトの名無しさん :04/05/04 00:59
>>819 はぁ? じゃねえだろ、人の話ちゃんと読んでから返事しな。
過去ログとあんたの話とどういう関係があるのかは、はっきり書いているだろ。
goto文不要説についてきっちり説明できる者など、こういう所にはあまりいないが
もしあんたに聞いて返事がしどろもどろでも別にそのこと自体を罪とか思ったりはしないさ。
俺が非難しているのは、自分が知ってることを知らない人を見下すあんたの態度だ。
後進に対する不寛容は懐の浅さを隠しているつもりの裸の王様だぜ、旦那?
>>824 s/フィル/ファイル/
ダターヨ… _| ̄|○
>ファイル「hoge.txt」と「foo.txt」からの入力に対して全く同じ処理をする時に、 >それぞれのフィルのオープン/クローズを入れた別関数をそれぞれ作る気か? お前もまともな日本語で話せ
>821 fgets()は改行文字も入るよ。 822の例だとbyeの場合 buf[0]→b buf[1]→y buf[2]→e buf[3]→\n buf[4]→\0 となる。
>824 アホですいません、よくわからないです。 821のプログラムは単に標準入力ストリームからfor文で指定した回数だけ 適当な文字列を入力すればいいという認識しかなくて・・・ >829 ありがとうございます!改行文字のことすっかり忘れてました・・・