C言語なら俺に聞け! Part 113
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/08/27(土) 18:54:38質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
C言語なら俺に聞け! Part 112
http://pc8.2ch.net/test/read.cgi/tech/1123432321/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさん
2005/08/27(土) 19:04:11人
((・e・))
(ヽ )
>)
人
((・e・))
( , )
(<
0003デフォルトの名無しさん
2005/08/27(土) 19:28:400004デフォルトの名無しさん
2005/08/27(土) 19:30:130005デフォルトの名無しさん
2005/08/27(土) 19:33:010006デフォルトの名無しさん
2005/08/27(土) 19:36:12標準では出来ない。環境依存の方法を使うことになる。
では次の方〜
0007デフォルトの名無しさん
2005/08/27(土) 19:38:50{
int _a1;
printf("%d"_a1)
return 0;
}
>>3
とりあえずこれをコンパイルしてみろ。
0008デフォルトの名無しさん
2005/08/27(土) 19:40:01コンパイルしましたが実行ファイルができただけでつ
0009デフォルトの名無しさん
2005/08/27(土) 19:41:38それを実行した結果がお前の人生だ。分かったな。
0010デフォルトの名無しさん
2005/08/27(土) 19:57:01明解C言語と言うのが良いらしいんですが、これにC言語及びコンパイラ等付属しているんですか?
0011デフォルトの名無しさん
2005/08/27(土) 20:01:37ふつう、OSにコンパイラがあらかじめ入っている。
0012デフォルトの名無しさん
2005/08/27(土) 20:04:550013デフォルトの名無しさん
2005/08/27(土) 20:07:220014デフォルトの名無しさん
2005/08/27(土) 20:08:06Linuxインストールすれば開発環境一式そろう。
Fedora Core でも、Debian でも、本の付録で着いてくるからそれでOK。
0015デフォルトの名無しさん
2005/08/27(土) 20:13:35いやむしろOSってなんですかてきなやつもふつうにいるわけで
0016デフォルトの名無しさん
2005/08/27(土) 20:14:07Turbo・・・
0017デフォルトの名無しさん
2005/08/27(土) 20:14:230018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
2005/08/27(土) 20:22:070020デフォルトの名無しさん
2005/08/27(土) 20:33:38OSって何?でしょうね。
0021デフォルトの名無しさん
2005/08/27(土) 20:36:41Cしか使えない奴全員解雇だってさ。
もう終わったな、C
0022デフォルトの名無しさん
2005/08/27(土) 20:39:140023ケンカする人嫌いです・・・あ、いや・・・やめてほしいな
2005/08/27(土) 20:42:20いまVIPが、世界が認めてない東海って名前を、
日本海に直してもらう作戦を行ってるのは、当然知ってるわよね?
VIPPERの力で、Googleが東海の単独表記を取り下げたのは有名ね。
でも、いまVIPは大きな問題を抱えてる。
ITスキル、特に鯖関係のものが、圧倒的に足りないのよ。
それでなんだけど・・・んちょっと、、、VIPに協力してほしいのよね。
べ、べつにあんただったから頼みに来たわけじゃないわよ!勘違いしないでよね!
でも、あなたの力があれば、日本海を取り戻すのが近くなるのは・・・確かだわ。
もし・・・協力してくれるんなら、このスレに書き込んでほしい。
http://ex11.2ch.net/test/read.cgi/news4vip/1125074145/
・・・・やっぱり、あなたに協力して・・・ほしいから。
0024デフォルトの名無しさん
2005/08/27(土) 20:42:260025デフォルトの名無しさん
NGNGまあ、言語一つしかできないようなのはクビでいいだろな。
0026デフォルトの名無しさん
2005/08/27(土) 21:16:53ワロス
0027デフォルトの名無しさん
2005/08/27(土) 21:23:31BCCでlibファイルを作りたいのですが、"'MYLIB' not found in library"と吐いてしまいます。
一応"MAKE End!!"とは出てるので一連の動作は成功してるようなのですが・・
使ってるIDEはBCC Developerでプロジェクトの設定はライブラリ(TLIB使用)にチェックが入っています。
0028デフォルトの名無しさん
2005/08/27(土) 21:25:37簡単な実装としては、前の百分率を保存しといて、
前と同じなら表示しなければいい。
0029デフォルトの名無しさん
2005/08/27(土) 22:21:40http://pc8.2ch.net/test/read.cgi/tech/1123432321/982
0030デフォルトの名無しさん
2005/08/27(土) 23:59:04実行したときに関数の呼出順の履歴みたいなのを出したくて
いままでは全部の関数の最初と最後に
printf("%s IN\n",__func__);
printf("%s OUT\n",__func__);
って書いていたんですが、なんかかっこわるいと思うように
なりますた。
なんかもっとスマートでクールな方法はないでしょうか。
0031デフォルトの名無しさん
2005/08/28(日) 00:07:410032デフォルトの名無しさん
2005/08/28(日) 00:07:42"%s IN\n"
,__func__);
printf(
"%s OUT\n"
,__func__);
0033デフォルトの名無しさん
2005/08/28(日) 00:08:530034デフォルトの名無しさん
2005/08/28(日) 00:11:000035デフォルトの名無しさん
2005/08/28(日) 00:17:170036デフォルトの名無しさん
2005/08/28(日) 00:18:07プログラマのコーディング効率も上がるし、それに演算速度を上げられる可能性があるから。
0037デフォルトの名無しさん
2005/08/28(日) 00:18:50ネタはもういいからね。
0038デフォルトの名無しさん
2005/08/28(日) 00:23:18#define ENTER_FUNC printf("%s IN\n", __func__);
#define LEAVE_FUNC printf("%s OUT\n", __func__);
って、いや、デバッガのコールスタックを利用すればいいと思う。
0039デフォルトの名無しさん
2005/08/28(日) 00:27:340040デフォルトの名無しさん
2005/08/28(日) 00:31:080041デフォルトの名無しさん
2005/08/28(日) 00:35:280042デフォルトの名無しさん
2005/08/28(日) 00:36:22どんな処理系で使えるのかな。
0043デフォルトの名無しさん
2005/08/28(日) 01:00:06C99 で正式に C の仕様に導入された。
0044デフォルトの名無しさん
2005/08/28(日) 01:53:19CYGWINだとコンパイルできたけど、表示されなかったぞ
0045デフォルトの名無しさん
2005/08/28(日) 02:15:03何か間違えてないか?
もしくは、コンパイラがめっさ古いか。
あと、BCC はできんかもしれんね。
0046デフォルトの名無しさん
2005/08/28(日) 02:50:440047デフォルトの名無しさん
2005/08/28(日) 02:53:16できた
でもさっきは表示されなかったのは何故だろ
0048デフォルトの名無しさん
2005/08/28(日) 03:03:06>>8って本当にそれコンパイルできた?
0049デフォルトの名無しさん
2005/08/28(日) 03:27:25.NET Frameworkでという意味ならSystem.Math.PIというフィールドがあるが、
このスレである以上managed C++ということも考えにくいから…
「C言語に標準で」、という意味ならば、提供されていない。
4 * atan(1.0)で求めよ。
0050デフォルトの名無しさん
2005/08/28(日) 03:28:150051デフォルトの名無しさん
2005/08/28(日) 04:07:320052デフォルトの名無しさん
2005/08/28(日) 04:21:38って歌のアニメがあったな。
子供の頃見てたけど、タイトル忘れた。
結構好きだったんだけどすぐに終わってしまったような記憶が…
不人気だったんだろか。
0053デフォルトの名無しさん
2005/08/28(日) 04:26:300054デフォルトの名無しさん
2005/08/28(日) 04:32:37や
0055デフォルトの名無しさん
2005/08/28(日) 04:57:01こういうのって、英語圏の人達や、その他の言語の人達は、
どうやって記憶してるんだろうか・・・って思う
円周率16桁は、#define PI 3.141592653589793
を繰り返すうちに自然に数字で覚えてしまったが・・・
0056デフォルトの名無しさん
2005/08/28(日) 04:57:35ヒント:電話番号
0057デフォルトの名無しさん
2005/08/28(日) 04:57:590058デフォルトの名無しさん
2005/08/28(日) 05:03:570059デフォルトの名無しさん
2005/08/28(日) 05:11:01ヒント:May I tell a story purposing to render clear the ratio circular perimeter breadth, revealing one of the problems most famous in modern days, and the greatest man of science anciently known.
0060デフォルトの名無しさん
2005/08/28(日) 05:35:42なるほど、すごいな
0061デフォルトの名無しさん
2005/08/28(日) 05:42:01日本語だって負けちゃいないぜ!
アラビア数字が輸入されるまではマジで大変だったよ
でも日本にも優れた数学者は山ほどいるわけで
言語的に数が数えやすいのと、数学が得意な人種というのは
実は 相関関係が無い
0062デフォルトの名無しさん
2005/08/28(日) 06:03:21あんた何歳?
0063デフォルトの名無しさん
2005/08/28(日) 06:46:32先ず、16 まで固有語がある。ただ、10+1 〜 10+6 を彷彿させる名前にはなってる。
だというのに、17 から 19 まではより 10+7 〜 10+9 っぽい名前になってる。
両者は似た感じで命名されてるはずなのに、命名規則が違う。
16 進法の A 〜 F もそのまま呼んで違和感ないんじゃないのか。
そして、20 がまた固有語だ。2 * 10 なんかじゃない。全く別の語だ。
そして、69 までは順当に進む。21 は 20 + 1 だし、30 は 3 * 10 だ。
だというのに、70 は何と 60 + 10 だ。ヤバい。まるで 60 進法だ。
それが 79 まで続く。このまま 60 進法で進むのかと思いきや、80 はそうならない。
しかし、安心するのはまだ早い。80 の名前は 8 * 10 じゃなくて、4 * 20 だ。今度は 20 進法かよ。
で、やっぱり 90 は 80 + 10 で、このまま 99 まで 20 進法であるかのように進む。
で、100 が固有語。これは問題ないし、これ以降はようやく普通になる。
といっても、120 は 100 + 20 だし、199 は 100 + 4 * 20 + 10 + 9 なのだが。
0064デフォルトの名無しさん
2005/08/28(日) 06:50:030065デフォルトの名無しさん
2005/08/28(日) 06:54:36フランス語の数体系
http://www.sf.airnet.ne.jp/~ts/language/number/frenchj.html
0066デフォルトの名無しさん
2005/08/28(日) 06:56:09ギリシャ生まれというのは聞いているが......。
と思って調べたら、フランス語会話に生徒役で出てたのな。
0067デフォルトの名無しさん
2005/08/28(日) 08:12:530068デフォルトの名無しさん
2005/08/28(日) 10:01:27Pascalだったらまだ許容する。
0069デフォルトの名無しさん
2005/08/28(日) 10:09:030070デフォルトの名無しさん
2005/08/28(日) 10:09:110071デフォルトの名無しさん
2005/08/28(日) 10:12:470072デフォルトの名無しさん
2005/08/28(日) 10:17:220073デフォルトの名無しさん
2005/08/28(日) 10:20:180074デフォルトの名無しさん
2005/08/28(日) 10:30:23hMCI=MCIWndCreate(hWnd,hInst,NULL,"D:\\a.mp3");
を使用すると画面上に再生やらストップやらのマークなどが出て相応しくないのです。
またPlaySoundを使うと固まります・・・
誰かいい方法を教えてくださいです
0075デフォルトの名無しさん
2005/08/28(日) 10:53:42makefile を自動で作成するようなコマンドはある
のでしょうか?
0076デフォルトの名無しさん
2005/08/28(日) 10:55:410077デフォルトの名無しさん
2005/08/28(日) 11:01:15その前にmakeの関数は調べたか?
0078デフォルトの名無しさん
2005/08/28(日) 11:10:11同じの使いまわして随分いける。
個別設定は別にできるようにしとけばいい。
0079デフォルトの名無しさん
2005/08/28(日) 11:23:50提供してる機能がしょぼすぎるんだよ。
(Antは単体でも使えるにしても)Javaに縛られてないMakefile++誰か作れ。
0080デフォルトの名無しさん
2005/08/28(日) 11:27:11printf()での”Hello Word "くらいのサンプルです。
>> 78 まずは汎用性のある makeファイルの入手が必要ですね。
0081デフォルトの名無しさん
2005/08/28(日) 11:36:57>まずは汎用性のある makeファイルの入手が必要ですね。
自分で作るという選択肢はないのかw
0082デフォルトの名無しさん
2005/08/28(日) 11:45:44もちろん、オリジナルで作成する選択はあると思います。
0083デフォルトの名無しさん
2005/08/28(日) 11:47:570084デフォルトの名無しさん
NGNG英語圏じゃないけど、ピーターフランクルは、円周率は約3としか憶えてないって言ってたよ。
日本で「おおよそ3」が非難される、だいぶ前に。
0085デフォルトの名無しさん
2005/08/28(日) 12:23:44昔のやり方はすべての分野を教えて、そこから専門分野を取捨選択する方法。
専門外の使用頻度の低い知識が多数生まれる。
一方、今の頭の悪い教育方針は広く浅くを基本とする。
どの分野を取っても知識不足という頭の悪い状況になっている。
0086デフォルトの名無しさん
2005/08/28(日) 12:33:100087デフォルトの名無しさん
2005/08/28(日) 13:12:59そうじゃない。
makeには、ソースやディレクトリ指定を楽にするための組み込み関数が用意されている。
widcard や、patsubst といった関数を使てmakefileを書けば、いちいち対象ソース名を記述しなくても、
「あるディレクトリ内のある拡張子のファイル全部」といった指定を一行で記述することができる。
外部ツールに頼る前に、makeのマニュアルや、仕様書をよく読めちゅ−こと。
0088デフォルトの名無しさん
2005/08/28(日) 13:15:21○wildcard
0089デフォルトの名無しさん
2005/08/28(日) 13:18:360090デフォルトの名無しさん
2005/08/28(日) 14:31:26数学ではπとしか使わないから、具体的な数値なんてどうでもいいのさ。
物理だと概算でいいから、またいい加減でいいんだが。
プログラムだと16桁は欲しい。
0091デフォルトの名無しさん
2005/08/28(日) 16:22:20π≒3 → 円は、ほぼ6角形として扱われる
float型しか使わなければ6桁でおk
0092デフォルトの名無しさん
2005/08/28(日) 16:24:49産医師、異国へ向こう、産後厄無く、身に宮代に虫さんざん闇に鳴く
3.141592653589793238462643383279
0093デフォルトの名無しさん
2005/08/28(日) 16:25:240094デフォルトの名無しさん
2005/08/28(日) 16:30:34"身に宮代に"だと"323842"と書いてしまいそうだ。
0095デフォルトの名無しさん
2005/08/28(日) 17:34:20Yes.
約3.14
Yes, I have.
約3.1416
Yes, I have a number.
単語の文字数が数値になる。
0096デフォルトの名無しさん
2005/08/28(日) 18:28:41空白二個は読みづらいし、エクスクラメーションやカンマも使いづらい。
それに7文字以上の単語もそうそうない
009796
2005/08/28(日) 18:30:538:language/
9:something/
ゴメン。考えてみると結構ありそうだね。
0099デフォルトの名無しさん
2005/08/28(日) 20:07:53初心者なのでわかりやすく教えてください。
0100デフォルトの名無しさん
2005/08/28(日) 22:34:51おっπ
という関係
0101デフォルトの名無しさん
2005/08/29(月) 00:14:050102デフォルトの名無しさん
2005/08/29(月) 02:06:33語呂合わせ何かなくても、その程度の桁数ならそのまま覚えられるじゃん。
世界記録の数万とかのは分からんが。
>>98
よく考えたら、初めて 0 が出てくるのって
小数点以下 32 桁目なんだな。
結構出てこないもんだな。
>>99
πは 16 桁(double の精度だとこれ以上は無意味)くらい覚えとけという話。
0103デフォルトの名無しさん
2005/08/29(月) 06:59:470104デフォルトの名無しさん
2005/08/29(月) 07:03:470105デフォルトの名無しさん
2005/08/29(月) 07:29:52答えてるのCかじり立ての学生ばっかでしょ。
0106デフォルトの名無しさん
2005/08/29(月) 07:33:280107デフォルトの名無しさん
2005/08/29(月) 09:17:032. 質問したくなければしなければいい。
3. 答えたいならば答えればいい。
4. 答えたくなければ答えなければいい。
5. 2と4に該当するなら無理に書き込まなくていい。
0108デフォルトの名無しさん
2005/08/29(月) 09:36:520109デフォルトの名無しさん
2005/08/29(月) 11:24:560110デフォルトの名無しさん
2005/08/29(月) 14:48:29srand()関数の発生系列の限界を知りたいんですけど
どうしたらわかりますか?
0111デフォルトの名無しさん
2005/08/29(月) 15:14:34質問には答えられないが、この辺が参考になるかも
ttp://www001.upp.so-net.ne.jp/isaku/rand.html
0112デフォルトの名無しさん
2005/08/29(月) 15:15:17つまり実装はライブラリ毎に異なるんで自分で調べるしかない。
まぁ大抵は32bitの線形合同法だろうけど。
ちゅうか自分で実装した方がいいよ。
0113デフォルトの名無しさん
2005/08/29(月) 15:26:480114110
2005/08/29(月) 15:58:09僕が聞きたかったことは
プログラムを実行するたびに異なる系列(seedを変える)で擬似乱数を
発生させ続けると同じ擬似乱数が出てくるようになる。そのループする
限界を知りたいんです。
文章がわかりにくかったらスイマセン。
0115デフォルトの名無しさん
2005/08/29(月) 16:04:300116デフォルトの名無しさん
2005/08/29(月) 16:09:29自分の環境のドキュメントかソースを読め。
0117デフォルトの名無しさん
2005/08/29(月) 16:19:02粗悪なやつ(右シフトしてないやつ)は
% (2^n) すると周期が 2^(32-n) になるが。
0118デフォルトの名無しさん
2005/08/29(月) 18:40:11これはポインタの配列を引数として受け取るということでしょうか?
いまいち、どういう場合にint **argの形を使えば良いのかわからなくて・・・
0119デフォルトの名無しさん
2005/08/29(月) 18:46:49多重間接参照といってこれはポインタのアドレスを保持します。
int **a, *b, i; と宣言し、b = &i; a = &b; とすることによって整数型ポインタ b のアドレスを保持します。
**a = 100とすることで 間接的に 変数i に対して100を代入することができます。
0120デフォルトの名無しさん
2005/08/29(月) 18:47:20ポインタのポインタ。
引き数として配列を渡すことはできない。
0121デフォルトの名無しさん
2005/08/29(月) 18:50:37ポインタのアドレスって……
0122デフォルトの名無しさん
2005/08/29(月) 18:53:50ありがとうございました。おかげですっきりしました
0123デフォルトの名無しさん
2005/08/29(月) 19:12:28ポインタ変数の配列を引数に取るときでもいいし、
ポインタ変数を直接操作したい場合にも使える。
typedef int* PINT;
として PINT *arg を考えればいい。
0124デフォルトの名無しさん
2005/08/29(月) 20:44:560125デフォルトの名無しさん
2005/08/29(月) 20:53:51「本当に有能な人間は他者を馬鹿にしない」
という言葉が真実だということが良くわかる。
0126デフォルトの名無しさん
2005/08/29(月) 20:54:290127デフォルトの名無しさん
2005/08/29(月) 21:50:51int ch;
FILE *fp, *sfp;
int flg = 0;
fp = fopen( argv[1],"r" );// エラー処理省略
sfp = fopen( "aaa.txt", "w" );
while ((ch=fgetc(fp)) != EOF) {
if (ch == '[') flg = 1;
if (flg == 1) { if (ch == '\n') flg = 0; else continue; }
fputc( ch ,sfp );
}
_fcloseall();
}
'[' 以降の行を無視して 出力するようにしたいと思ったのですが、日本語に"ー"があるとそれも'['とみなされ
それ以降の行も削除されてしまいます。
修正したいのですが、fgetwc というのを使うしかないのでしょうか? そもそも日本語をこのように fgetc で
処理するのは間違っていますか? //フラグ乱舞のプログラム失礼します
0128デフォルトの名無しさん
2005/08/29(月) 21:59:570x80 以上の値が出てきたら(最上位ビットが 1 なら)
次の文字を無視すればいい。
Shift-JIS でも EUC でもいける。
文字コードの正当性まで知りたいのならこれではだめだが、
そんなのはどうでもいいっしょ? 多分。
0129デフォルトの名無しさん
2005/08/29(月) 22:01:06うん。fgetwcを使うのが簡単だよ。何か躊躇することでもある?
どうしても嫌なら'['の1文字前が2バイト文字の1バイト目かどうか確かめればいいよ。
0130デフォルトの名無しさん
2005/08/29(月) 22:01:56Shift-JIS なら、0xA0 〜 0x9F だったら次のを除外しないようにする。
EUC なら必要ない。
0131デフォルトの名無しさん
2005/08/29(月) 22:32:44ありがとうございました。日本語コードとかの話になると、つい敬遠しがちでしたが
お陰さまで少し興味がもてましたです。
0132デフォルトの名無しさん
2005/08/30(火) 23:30:42typedef struct Argfoo Argfoo;
自分ではArgxxxで構造体を示すと決めていますが、
もし何か慣用的なものがあればそっちに習おうと思いました。
0133デフォルトの名無しさん
2005/08/30(火) 23:34:53ていうか、名前に型を示すプレフィックスをつけるとかは今時
流行らんからやめれ。
0134デフォルトの名無しさん
2005/08/30(火) 23:35:56関数って何でしたっけ??
0135デフォルトの名無しさん
2005/08/30(火) 23:38:410136デフォルトの名無しさん
2005/08/30(火) 23:46:13そんなこと標準Cの範囲ではないからすれ違い。
0137デフォルトの名無しさん
2005/08/30(火) 23:46:44あほはしね
>>134
fileno()
0138デフォルトの名無しさん
2005/08/30(火) 23:51:17fileno()だた。。
解決しますた。m(__)mどもども
0139デフォルトの名無しさん
2005/08/31(水) 00:36:022 3 4
1 5 2
の様なスペースで区切られた約40000行のデータファイルがあります。
このデータファイルを読み込んで、各列ごとにヒストグラムにしたいのです。
どのようなCプログラムを作ればいいのでしょうか?
初心者なので具体例を提示していただければありがたいのですがm(__)m
0140デフォルトの名無しさん
2005/08/31(水) 00:41:30ただしもっと仕様を明確にしてな
0142デフォルトの名無しさん
2005/08/31(水) 00:44:45ここはC言語のテクニカルノウハウなどに付いてのスレです。
アルゴリズムスレや初心者スレ、或いは宿題スレなどへどうぞ。
#つーか、情報量が少なすぎて回答しようも。
入力部はfgets()+sscanf()を行数分回せばいいとして、ヒストグラムの仕様が判らないとデータ設計できないし……
0143デフォルトの名無しさん
2005/08/31(水) 00:45:44各項目は全て整数値?
各項目の値域は?
#・・・Cで書くわけね
0144デフォルトの名無しさん
2005/08/31(水) 01:25:570145デフォルトの名無しさん
2005/08/31(水) 01:27:540146デフォルトの名無しさん
2005/08/31(水) 10:25:55しかし、意味が分かりません。だれか、詳しく教えてくれませんか?お願いします。
#include<stdio.h>
#define C(a,b,c)((c)?(c)-1?(a)*(b):(a)-(b):(a)+(b))
#define E(a,b){for(i=a*b;i<a*b*b;i++)k[i/b][i%b]=k[i/b-a][(i+1)%b];}
int*h,i,j,k[24][4]={{1,2,3},{1,3,2}},m[4],o,p,q,r,s,t,u,v,w;void main(){char*g=
"+-*0\0((%d%c%d)%c%d)%c%d\0(%d%c%d)%c(%d%c%d)";while(i<4)scanf("%d",m+i++);E(2,
3)E(6,4)while(o<648&&!j)j=C(C(w=C(s=m[*(h=k[o++/27])],t=m[h[1]],p=(i=o%27)%3),u
=m[h[2]],q=(i%9)/3),v=m[h[3]],r=i/9)==10?2:C(w,C(u,v,r),q)==10?21:0;printf(g+j+
3,s,g[p],t,g[q],u,g[r],v);}
0147デフォルトの名無しさん
2005/08/31(水) 10:30:3680列×8行にプログラムを詰め込むという制限をかけた特殊なプログラムなので、
分かりやすいよう整形、リネームするか、
別のプログラムを探すかしよう。
0148デフォルトの名無しさん
2005/08/31(水) 10:32:46ここに突っ込んで話を迷走させようぜ
0149デフォルトの名無しさん
2005/08/31(水) 11:17:250150デフォルトの名無しさん
2005/08/31(水) 11:25:430151デフォルトの名無しさん
2005/08/31(水) 11:35:130152デフォルトの名無しさん
2005/08/31(水) 12:24:430153デフォルトの名無しさん
2005/08/31(水) 12:49:53かなりトリッキーなので解説するには向かないね。
0154デフォルトの名無しさん
2005/08/31(水) 12:57:300155デフォルトの名無しさん
2005/08/31(水) 13:06:11たかが越前ってか?
0156デフォルトの名無しさん
2005/08/31(水) 13:33:20Cだから関数宣言はなくてもコンパイル通る。
0157デフォルトの名無しさん
2005/08/31(水) 13:34:490158デフォルトの名無しさん
2005/08/31(水) 14:29:14みたいに単文だからと中括弧を省略していると、おめー中括弧かけよ と決まって注意されます
個人的には省略いらねーだろ と思うのですが、これはやはり宗教的なところですか?
注意を無視しててもようございましょうか?
0159デフォルトの名無しさん
2005/08/31(水) 14:33:36注意してきた人にもよるだろ。
自分で判断できないのか。
0160デフォルトの名無しさん
2005/08/31(水) 14:37:06K&Rのhello, worldはmain()で戻り値無しだよ
0161デフォルトの名無しさん
2005/08/31(水) 14:43:26規約がなくとも、省略したがってるのに「個人的には省略いらねーだろ」
なんて不思議な日本語書いてしまううかつさんには、
意識して書いてもらえる方が周囲の人間は安心できる。
0162デフォルトの名無しさん
2005/08/31(水) 14:48:22中括弧を省略してもいいと思っているのか、
そんな省略なんて必要ないと思ってるのか
はっきりしてくれ。
0163デフォルトの名無しさん
2005/08/31(水) 14:50:34その人のコーディングスタイルによる。
それ以上でもそれ以下でもない。
switch〜caseのインデントとか
ifやforの中カッコを同一行に書くか改行するか、とかも同じ話。
0164デフォルトの名無しさん
2005/08/31(水) 14:55:49ifやforはfor(〜〜){と続けるな
省略は絶対にしない。
0165デフォルトの名無しさん
2005/08/31(水) 15:03:51if (〜)
return false;
みたいな
0166デフォルトの名無しさん
2005/08/31(水) 15:08:110167デフォルトの名無しさん
2005/08/31(水) 15:09:37自分がピザだからっていじけるなよ。
0168デフォルトの名無しさん
2005/08/31(水) 15:16:15俺にはメリットがよくわからん。
0169デフォルトの名無しさん
2005/08/31(水) 15:18:170170デフォルトの名無しさん
2005/08/31(水) 15:18:33・無駄なタイプが少なくなる
・ファイルサイズが若干小さくなる
これだけ。
どうせコンパイラが吐くコードは同じだし。
0171デフォルトの名無しさん
2005/08/31(水) 15:27:14・後でそのブロックに行を追加する場合の修正量が少ない(行追加だけで済む)
括弧つけない場合のメリット
・行数が減るのでややコードの一覧性が向上する
ってとこか。特に昔は端末サイズが80x24とかだったりしたので一覧性は
重要だった。K&Rスタイルの右肩と下にブロックの括弧を書くやりかたも、
行数少なめにして一覧性を向上させるためのもんだろう。
0172デフォルトの名無しさん
2005/08/31(水) 15:28:36こういう極論を吐く奴は他人と一緒に仕事はしないでくれ。
せめてプログラム書法ぐらいは読もうな。
0173デフォルトの名無しさん
2005/08/31(水) 15:29:58中括弧が必要なのは複文の時だけである筈だけど
#なんてぇ事を書くと煽られるだろうなw。論理的な反論が欲しいのだけどね
0174デフォルトの名無しさん
2005/08/31(水) 15:31:13どうバグるんだ?そんなはずないと思っているわけだが。
>>160
K&Rにも間違いはあるし現在ならC99を中心に考えた方がいいぞ
0175デフォルトの名無しさん
2005/08/31(水) 15:32:56「本来」というのは大げさな、恣意的な表現だな。
0176デフォルトの名無しさん
2005/08/31(水) 15:40:06それは「なくてもいい」ってだけだろ
0177デフォルトの名無しさん
2005/08/31(水) 15:42:13じゃあ中括弧をつけるのは、
「本来不要なものだけど、保守性等の面で推奨される書き方」
という表現も恣意的なわけ?
0178デフォルトの名無しさん
2005/08/31(水) 15:45:23「省略」という言い方が気に入らない?なら、他の言い方をどうぞ。
皆、どちらも同じだがそれぞれの流儀で使ってるというのは理解してるだろう。
0179デフォルトの名無しさん
2005/08/31(水) 15:53:54ルールではありません。文法です。
>「省略」という言い方が気に入らない?なら、他の言い方をどうぞ。
ありがとう。「本来の文法に沿って記述しない」位が適切かな。
>それぞれの流儀で使ってるというのは理解してるだろう。
そうですね。スタイル論議をするつもりは無いのですけど、
「省略」という表現が不適切に感じたからレスしたのみ でしたw
0180デフォルトの名無しさん
2005/08/31(水) 15:54:23> どうバグるんだ?そんなはずないと思っているわけだが。
>>157ではないし、具体的にどうバグるかはわからんが、
C言語 FAQには次のように書いてある
ttp://www.kouno.jp/home/c_faq/c15.html#0
0181デフォルトの名無しさん
2005/08/31(水) 15:54:460182デフォルトの名無しさん
2005/08/31(水) 15:55:160183デフォルトの名無しさん
2005/08/31(水) 15:56:01よく読め
0184デフォルトの名無しさん
2005/08/31(水) 15:56:55どう嫁と
0185デフォルトの名無しさん
2005/08/31(水) 15:58:40つまり「文法」と「本来の文法」は別物なんだよ。
0186デフォルトの名無しさん
2005/08/31(水) 16:09:27単文 : 「;」で終端される<式>。
複文 : 「{}」で複数の単文を括った文。
文 : 単文、複文を含めたもの
ifの文法 : if( <式> ) <文>
if( /*略*/ ) { /*略*/ }
の、どこが文法に沿っていないのだ?
0187デフォルトの名無しさん
2005/08/31(水) 16:10:33そんなにいじめるな
0188186
2005/08/31(水) 16:10:40○複文 : 「{}」で複数の文を括った文。
でつた…orz
0189デフォルトの名無しさん
2005/08/31(水) 16:46:05ところで、これも単文に入った?
a=1,b=2;
0190デフォルトの名無しさん
2005/08/31(水) 16:48:21>>186
0191デフォルトの名無しさん
2005/08/31(水) 18:11:43実際問題としてはK&RのHello worldの例をコンパイルすることのできない
Cコンパイラって存在しないんじゃない?
0192デフォルトの名無しさん
2005/08/31(水) 18:12:47何でそのレベルで議論になるんだ
0193デフォルトの名無しさん
2005/08/31(水) 18:17:18現状での C の正しい仕様としては、
int main の return を省略することはできない。
C++ なら、省略すると return 0; が暗黙に加えられるが。
K&R C の時代のことは知らん。
それを言ったら void main も仕様外だから、
>>146 も、void 削って戻り値無視ってのも、
大して変わらんのだけどね。
0194デフォルトの名無しさん
2005/08/31(水) 18:20:15C99ではreturnの省略可能。(ISO/IEC 9899:1999 5.1.2.2.3 Program termination -1)
0195デフォルトの名無しさん
2005/08/31(水) 18:21:20本来の文法に沿った書き方があるから
0196デフォルトの名無しさん
2005/08/31(水) 18:24:11ああ、そうだった。C99 だとできるようになったんだった。忘れてた。
0197デフォルトの名無しさん
2005/08/31(水) 19:00:04単文なんて俺用語の用法を聞くなと。
複文以外の文を単文と呼ぶのが普通だと思うが>>186の定義によると「;」で終端される<式>などというCの文法に存在しないものを単文と呼ぶらしい。
a=1,b=2;
は式文という文で式じゃないから186の定義では単文ではない。
{}で囲んでないから複文でもない。
0198デフォルトの名無しさん
2005/08/31(水) 19:02:570199デフォルトの名無しさん
2005/08/31(水) 19:06:51カンマ演算子だね
つ[ ttp://pc8.2ch.net/test/read.cgi/tech/1112011590/l50 ]
0200デフォルトの名無しさん
2005/08/31(水) 19:09:08「単文」そのものはオレ用語じゃないだろ
0201デフォルトの名無しさん
2005/08/31(水) 19:09:15「解放されたポインターの値は厳密にいえば無効で、それをどう使っても、たとえ間接参照
以外のことに使っても理屈の上ではトラブルの元である。」
free済みのポインタを、prinrf("%p", p); したりするだけでも規格違反(unspecified?)です
か?
C99の7.20.3あたりには特に何も書いていないように思います。
0202197
2005/08/31(水) 19:09:550203sage
2005/08/31(水) 19:10:03http://www.kouno.jp/home/c_faq/c7.html#21
0204デフォルトの名無しさん
2005/08/31(水) 19:10:24お笑いと厨は帰れ。終了。
0206デフォルトの名無しさん
2005/08/31(水) 19:19:07規格書に載ってないものを俺用語っていうんじゃねーの?
あれ「複文」も載ってないや、複合文だた。
0207デフォルトの名無しさん
2005/08/31(水) 19:26:080208デフォルトの名無しさん
2005/08/31(水) 19:29:29K&Rでは「複文」←→「単一の文」だな。
0209デフォルトの名無しさん
2005/08/31(水) 19:30:49JISじゃない?
0210デフォルトの名無しさん
2005/08/31(水) 19:35:17カンマを使うと <式1>,<式2> というのも1つの<式>となるため、
> a=1,b=2;
> は式文という文で式じゃないから186の定義では単文ではない。
というのは間違い。
0211デフォルトの名無しさん
2005/08/31(水) 19:36:46cccというポインタの配列の0番目を上書きしたいのですが、
どのようにすればいいのでしょうか?
やりたいことは下の様な感じなのですが・・・
struct kouzoutai *ccc;
&(aaa->bbb[0].ccc[0]) = ccc;
0212デフォルトの名無しさん
2005/08/31(水) 19:36:48; が付いてるからそれは既に式じゃないだろ。
0213デフォルトの名無しさん
2005/08/31(水) 19:39:01それが正しいとは言ってないだろ?
「普通だと思う」と言ってるだけで。
>>210
a=1,b=2は式だが
a=1,b=2;は式じゃない。
カンマ演算子は関係ない。
0214デフォルトの名無しさん
2005/08/31(水) 19:42:43186の定義が発端じゃないの?
>単文 : 「;」で終端される<式>。
だから、式の後ろにカンマがついてる、のを問題にするのは変では?
つか、>>197で「単文」は「俺用語」で<式>は「存在しない」と書いてるように読めるが、
式もダメなのかい。
0215デフォルトの名無しさん
2005/08/31(水) 19:43:24それ以前にやりたい事に間違いだらけですが...。
cccもポインタ配列になっていませんし。
0216デフォルトの名無しさん
2005/08/31(水) 19:45:41><式>は「存在しない」と書いてるように読めるが
ええと、違う
「「;」で終端される<式>」は存在しない。
0217デフォルトの名無しさん
2005/08/31(水) 19:47:56>単文 : 「;」で終端される<式>。
この日本語だと、「単文は、〜〜〜 な <式> である。」と言う形になっている。
言い換えると、『<式> のうち、「;」で終わってるものを「単文」と呼ぶ』という意味になる。
<式> はどう頑張っても文にはならない。明らかにおかしい。
単文 : <式> の後ろに「;」を付けた物。
ならいい。
0218デフォルトの名無しさん
2005/08/31(水) 19:48:16それは読み方が違うんじゃないか、単文(文/単一の文)の定義を書いてるんだろ。
単文→ <式>; ってだけだろ、BNFっぽく書いてるんなら。
0219デフォルトの名無しさん
2005/08/31(水) 19:50:110220デフォルトの名無しさん
2005/08/31(水) 19:52:210221デフォルトの名無しさん
2005/08/31(水) 19:53:33括弧込みというならブロックとかだろ。
0222デフォルトの名無しさん
2005/08/31(水) 19:54:030223デフォルトの名無しさん
2005/08/31(水) 19:54:230224デフォルトの名無しさん
2005/08/31(水) 19:55:24見事に迷走しました
0225デフォルトの名無しさん
2005/08/31(水) 19:56:27通常のALGOL文法では式と文は大きな違いがある
Lispには式しかないけど
0226デフォルトの名無しさん
2005/08/31(水) 19:57:27K&Rでは複文=ブロックだし、複文も規格にない用語だから気にすることないんじゃない?
>>218
それはそれで珍しい定義だよな。
0227デフォルトの名無しさん
2005/08/31(水) 20:08:360228デフォルトの名無しさん
2005/08/31(水) 20:11:19「やりたいこと」というのが良くわからんので
ヒントだけ
kouzoutai ddd;
kouzoutai* ccc = &ddd;
kouzoutai* bbb[10];
bbb[0] = ccc;
kouzoutai** aaa = bbb;
とすると、下のような関係となる
&ddd == ccc == bbb[0] == *bbb == *aaa
ddd == *ccc == *(bbb[0]) == **bbb == **aaa
0229デフォルトの名無しさん
2005/08/31(水) 20:11:34>>208
0230デフォルトの名無しさん
2005/08/31(水) 20:12:59単文とか複文とかの概念から外れて、
「制御文」以外の何物でもなくなるわけ?
0231デフォルトの名無しさん
2005/08/31(水) 20:30:50ちなみにCの文法で定義されてる文は
・ラベル付き文
・複合文
・式文
・選択文
・繰返し文
・分岐文
の6つ。K&Rは「複合文」を「複文」と読んでそれ以外を「単一の文」と呼んでいる
0232デフォルトの名無しさん
2005/08/31(水) 20:33:250233デフォルトの名無しさん
2005/08/31(水) 20:35:530234デフォルトの名無しさん
2005/08/31(水) 20:54:340235デフォルトの名無しさん
2005/08/31(水) 20:56:27ありがとうございます!
ヒントを元にポインタの勉強をしてこようと思います。
0236デフォルトの名無しさん
2005/08/31(水) 21:00:01コーディングスタイルではなく、C言語について語っていると思ったのだが。
0237デフォルトの名無しさん
2005/08/31(水) 21:09:59はぁあ? >>158 を元にたわ言だけを展開するのを、語ると言ってもよいと?
0238デフォルトの名無しさん
2005/08/31(水) 21:24:43今は式や文といった用語の定義について話てるんでわ?
少なくともスタイルじゃないだろ。
0239デフォルトの名無しさん
2005/08/31(水) 21:36:52確かにその定義だと制御文は全部単文になるね。
でも、
if(...) { ...; ...; ...; } else { ...; ...; }
を「単文」と呼ぶのも気が引けるような。
かといって、上のが複文で
if(...) ...;
は単文ってのも何か違うような気もするし。
単文って言葉自体が害悪に思えてきた。
C の規格票で「単文」って言葉がないのも分かる気がする。
文法定義を書いてみようと思ってみても、
確かに「単文」なんて項目は作りそうにないね。
0240デフォルトの名無しさん
2005/08/31(水) 22:27:030241デフォルトの名無しさん
2005/09/01(木) 00:42:47それにK&Rがさまざまな方言生んじゃったのも事実だし
0242デフォルトの名無しさん
2005/09/01(木) 00:47:09K&Rは方言を無くすために書かれました
0243デフォルトの名無しさん
2005/09/01(木) 00:53:580244デフォルトの名無しさん
2005/09/01(木) 00:58:17どうすればいいですか?
0245デフォルトの名無しさん
2005/09/01(木) 00:58:35そこでISOとANSIが慎重になって標準化した
0246デフォルトの名無しさん
2005/09/01(木) 00:59:240247デフォルトの名無しさん
2005/09/01(木) 01:01:090249デフォルトの名無しさん
2005/09/01(木) 01:21:570250デフォルトの名無しさん
2005/09/01(木) 02:15:340251デフォルトの名無しさん
2005/09/01(木) 02:30:300252デフォルトの名無しさん
2005/09/01(木) 02:35:14教える気が無いなら黙ってろ。
お前が教える気がないだけで、他の人は教えるかも知れないだろ。
0253デフォルトの名無しさん
2005/09/01(木) 02:36:42lcc ファイル名 [オプション]
0254デフォルトの名無しさん
2005/09/01(木) 02:55:56スレ違いなんだよドアホ
0255デフォルトの名無しさん
2005/09/01(木) 03:09:34”Cコンパイラの使い方なら俺に聞け”というスレでも立ててそこでやってくれ。
0256デフォルトの名無しさん
2005/09/01(木) 03:55:22main(){
int 無職歴;
for(無職歴=1年目 ; 内定数>=1 ; 無職歴++){
printf("不採用\n");
}
}
就職できません('A`)
0257デフォルトの名無しさん
2005/09/01(木) 04:05:02""で囲んでない
int mainのintを省略できるのはC++、その場合はヘッダ名がC就活になり.hはいらない
0258デフォルトの名無しさん
2005/09/01(木) 04:08:04>intを省略できるのはC++
関数は省略したらintじゃないか?Cでも。
0259デフォルトの名無しさん
2005/09/01(木) 05:02:26仕様上はできねーよ。
省略できるのは return 0; の方だけだ。
0260デフォルトの名無しさん
2005/09/01(木) 05:08:300261デフォルトの名無しさん
2005/09/01(木) 05:53:52K&Rの生んだ「方言」ってどういう意味で何を指しているつもりだ?
0262デフォルトの名無しさん
2005/09/01(木) 06:20:43たとえば
Aの組
1 3 4 5
Bの組
2 6
Cの組
0 9
を入力したとして、そのプログラムを通すと
Aの組
3 5
Bの組
2
Cの組
0
など、ランダムで選んでくれるプログラムにしたいです。rand()とかsrand()とか使うの?
違う気がするし、聞きに来ました。よろしくお願いします。
0263デフォルトの名無しさん
2005/09/01(木) 07:04:33激しくスレ違い。>>1読め。
0264デフォルトの名無しさん
2005/09/01(木) 10:53:23一応答えておくか
ランダムにやるならrand()かそれに相当する処理を使うのがベスト
手順は以下のとおり
1) A、B、Cを配列に格納する
2) 各配列に対し以下の操作を行う
2-1) インデックスの個数を取得(1〜要素数の間でランダム)
2-2) インデックスを取得(1〜↑で指定した個数の間でランダム)
※この時、既に取得したインデックスと重複しないようにする
2-3) 取得したインデックスの値を表示
0265262
2005/09/01(木) 11:54:49勉強して出直します。
>>264
回答サンクスです。学校で常に赤点だった男なんでちんぷんかんぷんですが、なんとか頑張ってみます。
0266264
2005/09/01(木) 16:17:122-2)
誤) インデックスを取得(1〜↑で指定した個数の間でランダム)
正) ↑で指定した個数分だけ、配列のインデックスを取得(1〜要素数の間でランダム)
0267デフォルトの名無しさん
2005/09/01(木) 22:29:59>>252のような奴には一切教えないようにしよう。
0268デフォルトの名無しさん
2005/09/02(金) 03:42:200269デフォルトの名無しさん
2005/09/02(金) 11:05:22C言語の知識は全くありません。そんな僕にオススメの本やサイトはありますか?
0270デフォルトの名無しさん
2005/09/02(金) 11:09:23余力があったら、実際にプログラム書いてみればいい。
0271デフォルトの名無しさん
2005/09/02(金) 11:09:570272デフォルトの名無しさん
2005/09/02(金) 11:12:33独学が基本だ。
0273デフォルトの名無しさん
2005/09/02(金) 11:13:04推薦図書スレ逝って来い。
0274デフォルトの名無しさん
2005/09/02(金) 11:17:25教科書聞いてからにしようぜ、「教科書嫁」は。
http://www.pro.or.jp/~fuji/computerbooks/c/c.modula2.html
0275デフォルトの名無しさん
2005/09/02(金) 11:19:430276デフォルトの名無しさん
2005/09/02(金) 11:20:26参考書に下記のプログラムが書いてあったのですが、
「文字列から文字の探索プログラム」
char *str_chr(const char *s,int c){
c = (char)c;
while(*s !=c){
if(*s == '\0')
retuern(NULL);
s++;
}
return((char *)s);
}
int main(void){
char *ptr;
char ch[2];
char letter[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
printf("英大文字を入力してください");
scanf("%s",ch);
if((ptr = str_chr(letter,ch[0])) ==NULL)
printf("%cは大文字ではありません。\n",ch[0]);
else
printf("%cから後のアルファベットは%sです。 \n",ch[0],ptr);
return(0); }
ここで、関数 *str_chrの第二引数はint型としてあるのに、
main関数で char型のch[0]を受け取っています。
なのに、このコードはエラーが起きず、正常に動作します。
これはどうしてですか? おねがいします。
0277デフォルトの名無しさん
2005/09/02(金) 11:28:020278デフォルトの名無しさん
2005/09/02(金) 11:35:100279デフォルトの名無しさん
2005/09/02(金) 11:35:58習得が目的じゃなく、授業への備えじゃないの、コイツは。
0280デフォルトの名無しさん
2005/09/02(金) 15:49:500281デフォルトの名無しさん
2005/09/02(金) 16:22:26あの糞本か・・・
よく頑張った。
0282デフォルトの名無しさん
2005/09/02(金) 16:29:250283デフォルトの名無しさん
2005/09/02(金) 16:32:540284デフォルトの名無しさん
2005/09/02(金) 16:35:320285デフォルトの名無しさん
2005/09/02(金) 16:36:380286デフォルトの名無しさん
2005/09/02(金) 16:46:19うはっwww俺の学校もそれだ
正直分かりにくかった記憶しかない
0287デフォルトの名無しさん
2005/09/02(金) 17:38:09凄いんだけど、それ。
何かを履き違えている気がする。
0288デフォルトの名無しさん
2005/09/02(金) 21:17:45これはどこから始めればいいんでしょうか?
定義を覚える以前に・・・自分がなにやってるんだが分からない・・・orz
0289デフォルトの名無しさん
2005/09/02(金) 21:42:070290デフォルトの名無しさん
2005/09/02(金) 21:46:01Hello World!
0291デフォルトの名無しさん
2005/09/02(金) 21:56:02そう。
0292デフォルトの名無しさん
2005/09/02(金) 22:14:50それが原因で速度に変化が出る場合もある。
0293デフォルトの名無しさん
2005/09/02(金) 22:51:15C言語でプログラム書くとき、
できるかぎり一行でカッコとか使わず処理を書いたり、
ポインタをいっぱい使ったり、
複雑で分かり難い長い宣言を書いたりすると、
ほめられる、ってことに・・・
これで、冬のボーナスは、確実にアップだな
0294デフォルトの名無しさん
2005/09/02(金) 23:13:460295デフォルトの名無しさん
2005/09/02(金) 23:35:14コメントは全て英語で書いて、後から読む奴を寄せ付けるな
こいつすげー・・・こりゃ敵わないや・・・
となる事間違いなし。給料2倍
0296デフォルトの名無しさん
2005/09/02(金) 23:36:440297デフォルトの名無しさん
2005/09/03(土) 00:31:480298デフォルトの名無しさん
2005/09/03(土) 03:42:260299デフォルトの名無しさん
2005/09/03(土) 03:50:14switch(9 <= num <= 17){
という意味の式をつくりたいので以下に直したのですが、
switch((9<=num) && ( num>=17)){
Cの演算子を使う場合、この式であれば合ってますでしょうか?
0300デフォルトの名無しさん
2005/09/03(土) 03:52:290301デフォルトの名無しさん
2005/09/03(土) 03:53:14入門書の一章読んだら十分分かるだろ
0302デフォルトの名無しさん
2005/09/03(土) 03:54:30おまいは算数もできんのか。
0303デフォルトの名無しさん
2005/09/03(土) 03:54:53>switch(9 <= num <= 17){
そもそもこれがありえない
0304訂正
2005/09/03(土) 03:55:43打ちまちがえました。
0305デフォルトの名無しさん
2005/09/03(土) 03:55:53これもなんだか・・・
0306デフォルトの名無しさん
2005/09/03(土) 03:58:220307デフォルトの名無しさん
2005/09/03(土) 03:58:23打ちまちがえました。
0308デフォルトの名無しさん
2005/09/03(土) 03:59:370309デフォルトの名無しさん
2005/09/03(土) 04:01:29それもなんだか・・・
0310デフォルトの名無しさん
2005/09/03(土) 04:08:32caseに付けるラベルは整数の固定値。
範囲チェックしたいならif使え。
0311デフォルトの名無しさん
2005/09/03(土) 04:08:560312デフォルトの名無しさん
2005/09/03(土) 04:19:04else puts("参考書のメモに「複雑な式は使えない」と自分で書いておいたのを見つけました。");
puts("皆さんレスありがとうございました。");
0313デフォルトの名無しさん
2005/09/03(土) 04:59:09文字化けしてる
0314デフォルトの名無しさん
2005/09/03(土) 05:09:110315デフォルトの名無しさん
2005/09/03(土) 06:56:39>>312,299
・ ((9<=num)&&(num<=17)) は Cの論理式として決して複雑ではない
・ switch文の機能、意味等がまったくわかっていない
・ 「数学で (9 <= num <= 17)」と言いたいだけだろ? C真似て紛らわしい質問。
つか、C入門書のはじめからと論理初歩やり直せ。当分初心者スレ以外に投稿すな。
0316デフォルトの名無しさん
2005/09/03(土) 07:09:35ざんねん
0317デフォルトの名無しさん
2005/09/03(土) 07:12:48誰もおまえの意見など聞いちゃいないw
0318デフォルトの名無しさん
2005/09/03(土) 07:13:490319デフォルトの名無しさん
2005/09/03(土) 07:23:11そんなことわかってるよw 複雑じゃないんなら、これでswitch( )書いてよw
・ 「数学で (9 <= num <= 17)」と言いたいだけだろ? C真似て紛らわしい質問。
自分が読み誤ったのを正当化したいだけでしょう
0320デフォルトの名無しさん
2005/09/03(土) 07:27:35何得意げに答えてんの?w
まぁ、他の人には感謝。
あ、アンカー↓
>つか、C入門書のはじめからと論理初歩やり直せ。当分初心者スレ以外に投稿すな。
0321デフォルトの名無しさん
2005/09/03(土) 07:28:16{
case 0:
moge();
break;
case 1:
hoge();
break;
}
0322デフォルトの名無しさん
2005/09/03(土) 07:31:000323デフォルトの名無しさん
2005/09/03(土) 07:39:33参考になるスレなので荒れると嫌だから、しばらくロムります
0324315
2005/09/03(土) 07:44:42>"参考書のメモに「複雑な式は使えない」と自分で書いておいたのを見つけました。"
<<switch()の判定文に入れるのは整数値を表す変数。
<<caseに付けるラベルは整数の固定値。
つ "C入門書のはじめからと論理初歩やり直せ。当分初心者スレ以外に投稿すな。"
>>312並以下のアホだか脳無しまで沸いてるなあ。特に下記は憐れをもよおす。
>>319
>>そんなことわかってるよw 複雑じゃないんなら、これでswitch( )書いてよw
>>322
>>C言語のswitchには残念ながら範囲を指定する方法はない。
0325デフォルトの名無しさん
2005/09/03(土) 07:47:430326デフォルトの名無しさん
2005/09/03(土) 07:51:14憐れをもよおす。漏れはおまえに吐き気をもよおすよw
0327デフォルトの名無しさん
2005/09/03(土) 07:51:16{
;
}
0328デフォルトの名無しさん
2005/09/03(土) 07:56:390329デフォルトの名無しさん
2005/09/03(土) 08:09:080330デフォルトの名無しさん
2005/09/03(土) 08:14:010331315
2005/09/03(土) 08:29:39どう条件分岐したいかもわからずに書けないどうこうの能天気さが天晴れだ。
念の為。>>303は俺じゃない。こういう勘違い因縁づけは303,319ぐらい?
>>325
つ 325
>>326
つ 326
0332デフォルトの名無しさん
2005/09/03(土) 08:34:520333デフォルトの名無しさん
2005/09/03(土) 09:26:390334デフォルトの名無しさん
2005/09/03(土) 09:36:22/* There are many aspects of difference between pure mathematics and
actual computation. For example, observe how the sum approaches or does not
to the theoretical value, as you increase N. Try the same thing replacing
"double" by "float" throughout.
("float" means simple precision real number.)
Explain the difference if any.
*/
#include <stdio.h>
#include <math.h>
int main(void){
long i,N; /* declaration of long integer variables to be used below */
double s, sgn; /* declaration of double precision real variables */
printf("Calculation of the series\n"); /* message output */
printf("1-1/2+1/3-+...\n");
printf("Up to which N? ");
scanf("%ld",&N); /* input the number of terms to be added */
s=(double)0; /* initialzation of sum */
sgn=(double)1; /* set the initial sign of the term */
for (i=1;i<=N;i++){ /* main loop for sum */
s=s+sgn/i;
sgn=-sgn; /* change sign for next term */
}
printf("Result : %18.15lf\n",s); /* output the result */
printf("Theoretical value : %18.15lf\n",log((double)2));
return 0;
}
0335デフォルトの名無しさん
2005/09/03(土) 09:57:170336デフォルトの名無しさん
2005/09/03(土) 10:02:390337デフォルトの名無しさん
2005/09/03(土) 10:32:230338デフォルトの名無しさん
2005/09/03(土) 10:56:270339デフォルトの名無しさん
2005/09/03(土) 11:30:51そういうのはできるとは言わない
0340デフォルトの名無しさん
2005/09/03(土) 12:06:22あんな間違いするヤツは、いない。
0341デフォルトの名無しさん
2005/09/03(土) 13:02:29できないことはない。
switch ((num < 9) + (num < 17)) {
case 2:
// 9未満
break;
case 1:
// 9以上17未満
break;
case 0:
// 17以上
break;
}
まあ、こんなことする位ならif-else使っとけと。
0342デフォルトの名無しさん
2005/09/03(土) 13:07:31switch文はlコンパイル時にテーブルとして展開される。
if文は逐次判定処理。
そのため、判定条件が多くなるとswitch文の方が高速化される傾向にある。
しかし、判定条件が多すぎると却ってif文より遅くなる諸刃の剣。
0343デフォルトの名無しさん
2005/09/03(土) 13:08:53TRUEが1である保証はないから、正常に動作するとは限らない。
0344デフォルトの名無しさん
2005/09/03(土) 13:11:42これは釣りか?
0345デフォルトの名無しさん
2005/09/03(土) 13:17:39クマー
つ switch ((num < 9)?1:0 + (num < 17)?1:0)
0346デフォルトの名無しさん
2005/09/03(土) 13:22:21ハァ? 関係式は1か0しか返しませんが
0347デフォルトの名無しさん
2005/09/03(土) 13:24:01大漁おめでとう。
0348デフォルトの名無しさん
2005/09/03(土) 13:24:06本気だとしたら嘆かわしいことだ。
http://www.kouno.jp/home/c_faq/c9.html
>組み込みの演算子によってブール値が産み出されるときは、
>1か0であることが保証されている。
0349デフォルトの名無しさん
2005/09/03(土) 13:34:500350デフォルトの名無しさん
2005/09/03(土) 13:57:240351デフォルトの名無しさん
2005/09/03(土) 13:58:110352デフォルトの名無しさん
2005/09/03(土) 14:30:39(ぶっちゃけ、勉強になった)
0353初心者の日記
2005/09/03(土) 14:33:37unsigned short i, j, k;
char str[128];
};
char str[] = "あいうえお,1,2,3";
struct a *test = malloc( sizeof(struct a) );
sscanf(str, "%127[^,],%d,%d,%d", test->str, &test->i, &test->j, &test->k);
とした場合、test->str[0] と test->str[1] にNULL文字が入ってしまうのですが、
構造体の中の変数の順番を、
struct a{
char str[128];
unsigned short i, j, k;
};
上のように入れ替えると、ちゃんと文字が入るんです。
unsigned short が3つあるので、2バイトが char に被るのは勉強したような気がしないでもないのですが、
何だか使いにくいような気がしました。
終わり
0354デフォルトの名無しさん
2005/09/03(土) 14:35:330355デフォルトの名無しさん
2005/09/03(土) 14:38:18unsigned shortは%huだろうが
0356デフォルトの名無しさん
2005/09/03(土) 14:42:23× %d
○ %hd
0357デフォルトの名無しさん
2005/09/03(土) 14:44:54こうやってちゃんと正しとかないと、
第三者の初心者が勘違いするといけないから困る。
0358デフォルトの名無しさん
2005/09/03(土) 14:46:17sscanfとか普通使わないだろうし
0359デフォルトの名無しさん
2005/09/03(土) 14:50:08> sscanfとか普通使わないだろうし
ハァ?
0360デフォルトの名無しさん
2005/09/03(土) 14:50:310361デフォルトの名無しさん
2005/09/03(土) 14:51:28むしろ初心者だからこそ行き詰った時にsscanfを連発するのではないかと
0362デフォルトの名無しさん
2005/09/03(土) 14:52:450363デフォルトの名無しさん
2005/09/03(土) 14:55:540364デフォルトの名無しさん
2005/09/03(土) 16:48:22それを作ろうとしてコンパイルしたら警告がでたけど、意味不明だから無視して実行したら10回繰り返すどころかHelloが無限ループされてしまいます。
一体どこが問題なんですか?
#include <stdio.h>
int main(void)
{
int i;
for (i=1; 1<=10; i++) {
printf("Hello\n");
}
return 0;
}
コンパイラにはBorland C++を使いました。
0365デフォルトの名無しさん
2005/09/03(土) 16:48:40%d だと 後半 test->k が4バイトで、[0000 0003 0000 0000]と言う具合に 2バイトオーバー
して上書きするから「あ」が消滅してしまうんですね・・・ 迂闊でした
皆さんご教示ありがとうございました
0366デフォルトの名無しさん
2005/09/03(土) 16:51:081 じゃない i ダ!
おもしろくもなんともないぞhage
0367デフォルトの名無しさん
2005/09/03(土) 16:51:51釣りだよな?
0368デフォルトの名無しさん
2005/09/03(土) 16:57:56ま、scanf()だとかprintf()みたいな可変長引数関数の書式指定子は
型チェックできないから気をつけろってこった
gccとかはprintf()を「知って」いるからそこまで見てくれたりするけどな
0369デフォルトの名無しさん
2005/09/03(土) 17:18:06だから%huだってば
0370デフォルトの名無しさん
2005/09/03(土) 17:33:29forの条件が常に成り立つようになってる
0371デフォルトの名無しさん
2005/09/03(土) 17:43:29ちなみに、何てエラーが出たんだ?
0372デフォルトの名無しさん
2005/09/03(土) 17:48:200373デフォルトの名無しさん
2005/09/03(土) 17:48:53すまん。警告だ。
0374デフォルトの名無しさん
2005/09/03(土) 18:09:18>>364は実はリアルだった
0376デフォルトの名無しさん
2005/09/03(土) 18:41:14何でその警告が出たのか解析しといた方がいいぞ。
0377364
2005/09/03(土) 19:15:170378デフォルトの名無しさん
2005/09/03(土) 19:30:490379デフォルトの名無しさん
2005/09/03(土) 19:42:50内容がどうであれ、コンパイラが緩衝しないのは当り前
0380デフォルトの名無しさん
2005/09/03(土) 23:51:49取得するプログラムを作成することは可能ですか?
0381デフォルトの名無しさん
2005/09/03(土) 23:55:02可能か不可能かって言えば可能だろ
0382デフォルトの名無しさん
2005/09/04(日) 00:13:58その画像の該当画素を取り出せたら、0.299R + 0.587G + 0.114B
0383デフォルトの名無しさん
2005/09/04(日) 00:19:490384380
2005/09/04(日) 01:34:14(画像を入力する方法もわかりません)
もっと勉強してきます。
0385デフォルトの名無しさん
2005/09/04(日) 02:10:370386デフォルトの名無しさん
2005/09/04(日) 02:30:52処理の概要だけ。
画像が未圧縮のDIBだと仮定して、
1) 画像ファイルを開く(fopen)
2) 先頭から1画素ずつ走査し、該当画素を取得(fread)
※ファイルヘッダがあるなら読み飛ばす
3) 画素から輝度を取得 (>>382)
4) 処理が終わったらファイルを閉じる(fclose)
ファイル名や画素の位置はコマンドライン引数で指定するなり
ソース中で定義するなりお好きなように。
0387デフォルトの名無しさん
2005/09/04(日) 02:46:34お前びっくりするな
0389デフォルトの名無しさん
2005/09/04(日) 19:34:080390デフォルトの名無しさん
2005/09/04(日) 23:37:43if(a) で成り立つけど if(a==1)で成り立たないのって
軽くヤバくない?
a とだけ書いたとき、これってif文から見たらゼロじゃないからTRUEだけど
0以外であって1というわけではないよね
でも、これをaではなく真偽値を返す関数と置き換えて考えてみると
if(a())で成り立つけど if(a()==1) と書きたくならない?
あー、ならないか・・・おれでもこうは書かないな
すまん忘れてくれ
0391デフォルトの名無しさん
2005/09/04(日) 23:40:04BOOL a(void){
return TRUE;
}
if (a() == TRUE)
じゃ駄目なの?
0392デフォルトの名無しさん
2005/09/04(日) 23:44:25>軽くヤバくない?
成り立たないと困るのに成り立たないとしたらただのバグ。
aに0,1以外を突っ込むのやめればいいだけの話。
0393デフォルトの名無しさん
2005/09/04(日) 23:53:01真に0、偽に0以外を設定しちゃうんだよね
偽にはエラー要因
0394デフォルトの名無しさん
2005/09/05(月) 00:08:55!!を使えば0か1になる
0395デフォルトの名無しさん
2005/09/05(月) 00:10:520396デフォルトの名無しさん
2005/09/05(月) 00:15:27FALSE:失敗、TRUE:成功、その他:エラーと自由自在に使い分けるんだけどな。
0398デフォルトの名無しさん
2005/09/05(月) 04:42:54>if(a())で成り立つけど if(a()==1) と書きたくならない?
ならない。
「真偽を返す」という定義の関数なんだから、
意味的に言って、その戻り値は if にそのままつっこむべき。
0399デフォルトの名無しさん
2005/09/05(月) 07:17:42BOOL hoge(int x)
{
return x -10;
}
こういう関数かもしれないしな。
0400デフォルトの名無しさん
2005/09/05(月) 10:13:04真でも 1 以外の値が返ってくるのが普通。
絶対に 1 と比較してはならない。
0 との比較ならいいけど、
予めブール値に変換しておくような場合以外ではやる必要がない。
if とかではそのまま ( ) に突っ込んでおけばよし。
0401デフォルトの名無しさん
2005/09/05(月) 11:21:490402デフォルトの名無しさん
2005/09/05(月) 11:25:09あくまで0か非0で考えるべき。
0か1か(それ以外か)はenumだろ。
0403デフォルトの名無しさん
2005/09/05(月) 11:47:13あんまり細かい仕様は把握してる人も少ないし、
時々処理系側でその仕様が無視されてることすらある。
安全のため、0 か非 0 が返ってくるものとしてプログラムを書くのが良い。
つか、こっちのが処理速い。
0404デフォルトの名無しさん
2005/09/05(月) 11:50:320405デフォルトの名無しさん
2005/09/05(月) 13:08:401と比較していいのかなんて話題出してるから、言ってる。
> あんまり細かい仕様は把握してる人も少ないし、
> 安全のため、0 か非 0 が返ってくるものとしてプログラムを書くのが良い。
論外、安全とか言う前にドキュメント読み返せ。
0406デフォルトの名無しさん
2005/09/05(月) 13:27:140407デフォルトの名無しさん
2005/09/05(月) 13:33:50仕様の確認もしない人に安全とか逝って欲しくないのだよ。
0408デフォルトの名無しさん
2005/09/05(月) 13:34:510409デフォルトの名無しさん
2005/09/05(月) 13:35:440410デフォルトの名無しさん
2005/09/05(月) 16:50:290411デフォルトの名無しさん
2005/09/05(月) 19:43:56ヾ(・ω・ )シ
へ( )
>
ラッセーラー ラッセーラ
ヾ( ・ω・)シ
( )へ
く
( ・ω・ ) ウーーーーーーー
└ ┘
/ ̄~ヽ
( ・ω・ ) ファビョ〜ン
゙_/( へ \_"
<
0412デフォルトの名無しさん
2005/09/05(月) 22:46:340413デフォルトの名無しさん
2005/09/05(月) 23:51:320414デフォルトの名無しさん
2005/09/06(火) 00:07:550415デフォルトの名無しさん
2005/09/06(火) 00:25:02単方向チェイン=単方向のリンクリストのこと?
まあ、とりあえず質問してみ
スレ違いだったら誘導するから。
0416デフォルトの名無しさん
2005/09/06(火) 00:30:40>>1嫁。せめて初心者系か ttp://pc8.2ch.net/test/read.cgi/tech/1123220967/
0417デフォルトの名無しさん
2005/09/06(火) 02:44:35ビットシフトはなんの役に立つのでしょうか?
0418デフォルトの名無しさん
2005/09/06(火) 02:45:46ここで、ゼナ。
0419デフォルトの名無しさん
2005/09/06(火) 03:05:34ビットシフト演算をしたい時に役立つ。w
えーと。たとえば非常に遅いCPUのマシンで腐ったCコンパイラを
使っている場合、2を掛ける時に << 1 でやった方が速いとかね。
2で割りたい時に >> 1 でやった方が速いとかね。昔のコンパイラは
最適化が悪かったのでよくやりました。今どきのコンパイラは * 2
と書こうが / 2 と書こうが勝手に一番速く実行するコードを出す
だろうから、読み易い方で書いておいて良いと思います。
0420デフォルトの名無しさん
2005/09/06(火) 03:08:26一番よく使うのはマスクじゃまいか?
0421デフォルトの名無しさん
2005/09/06(火) 03:12:000422デフォルトの名無しさん
2005/09/06(火) 03:35:02というように、ビットフラグを作るときによく使う。
掛け算割り算でも、かける値、わる値が変数になってる場合、
ビットシフトにした方が効率がいい。
ただし、2の累乗で・・・って制限のある場合にしか使えないけど。
0423デフォルトの名無しさん
2005/09/06(火) 03:57:13あと趣味
0424デフォルトの名無しさん
2005/09/06(火) 04:14:270425デフォルトの名無しさん
2005/09/06(火) 04:39:54flag.a = 1;
flag.b = 1;
flag.e = 1;
flag.j = 1;
hoge(flag);
テラメンドス
0426デフォルトの名無しさん
2005/09/06(火) 04:44:120427デフォルトの名無しさん
2005/09/06(火) 08:35:430428デフォルトの名無しさん
2005/09/06(火) 09:06:520429デフォルトの名無しさん
2005/09/06(火) 09:10:27氏ねよ
0430デフォルトの名無しさん
2005/09/06(火) 09:58:40( ⌒ ヽ 氏ねだと!? よし、死んでやる。 さきに死ねば、
∪ ノ 天上ではこちらが先達だ。 雑用にこき使ってやるから見ておれよ
∪∪
0431デフォルトの名無しさん
2005/09/06(火) 10:02:520432デフォルトの名無しさん
2005/09/06(火) 10:07:13コンパクト
0433デフォルトの名無しさん
2005/09/06(火) 12:05:23・脱落する人が比較的少ない。
・C# とは比べるのが面倒になるくらい別物。
0434デフォルトの名無しさん
2005/09/06(火) 12:09:300435デフォルトの名無しさん
2005/09/06(火) 12:18:110436デフォルトの名無しさん
2005/09/06(火) 12:55:500437デフォルトの名無しさん
2005/09/06(火) 13:45:280438デフォルトの名無しさん
2005/09/06(火) 14:27:51おれは直角 / 小山ゆう
0439デフォルトの名無しさん
2005/09/06(火) 14:37:40ライト環境と受け取りました
0440デフォルトの名無しさん
2005/09/06(火) 14:47:520441デフォルトの名無しさん
2005/09/06(火) 14:55:27返り値を返すべきなの? その場合は、return NULL
にすべきなの? 返さないとどうなるの?
0442デフォルトの名無しさん
2005/09/06(火) 15:01:09return NULL; はNULLポインタを返すって意味だから
return; とだけ書けばいいし、関数の最後ならいちいちreturnする必要はない。
0443デフォルトの名無しさん
2005/09/06(火) 15:43:40可能ならvoidを使わず成否をちゃんと返せ
0444デフォルトの名無しさん
2005/09/06(火) 16:00:29やればわかることだと思うが、void の関数で return で値を返そうとすると
普通はコンパイルエラーになってコンパイル不能。
0445デフォルトの名無しさん
2005/09/06(火) 16:12:01void func(void) {
return (void)1;
}
0446デフォルトの名無しさん
2005/09/06(火) 16:24:46んなこたない
0447デフォルトの名無しさん
2005/09/06(火) 16:44:02エラーじゃなくて警告な。
別に値返しても、使えなくて意味がないだけで、有害なわけじゃないからな。
>>445
それ、警告出るコンパイラと出ないコンパイラがあったと思う。
0448デフォルトの名無しさん
2005/09/06(火) 17:07:52csv形式のファイルがあり、ファイルから一行データを取得しました。
その内容が 整数,実数 であり、整数と実数に分けたいんですけど
どうすればできますか?
例 123,0.123 っていうデータがありました。
123と0.123を分けるにはどうしたらいいんでしょうか?
0449デフォルトの名無しさん
2005/09/06(火) 17:09:170450デフォルトの名無しさん
2005/09/06(火) 17:09:43面白くねえぞ?
0452デフォルトの名無しさん
2005/09/06(火) 17:20:00sscanfでもできるけど
0453デフォルトの名無しさん
2005/09/06(火) 17:21:420454デフォルトの名無しさん
2005/09/06(火) 17:26:44これ俺っす!
0455デフォルトの名無しさん
2005/09/06(火) 17:26:57int intValue;
double doubleValue;
if (sscanf("123,0.123", "%d,%lg", & intValue, & doubleValue) < 2) {
/* Illegal data? */
}
0456デフォルトの名無しさん
2005/09/06(火) 17:27:550457デフォルトの名無しさん
2005/09/06(火) 17:29:54ttp://e-words.jp/w/E3839EE383ABE38381E3839DE382B9E38388.html
お前は最低の行為をしている
0458デフォルトの名無しさん
2005/09/06(火) 17:58:27バックトラック法について、できるだけ分かりやすく
解説してあるホームページなどありませんか?
よろしく、お願いします。
0459デフォルトの名無しさん
2005/09/06(火) 18:03:57言語はCで、お願いします。
0460デフォルトの名無しさん
2005/09/06(火) 18:04:142ちゃんねるでクロスポストする方法ありますか?
0461デフォルトの名無しさん
2005/09/06(火) 18:15:43とりあえず、ここからはでてけ。
(あれだけレスもらって、仕様の確認指摘されてて…)
0462デフォルトの名無しさん
2005/09/06(火) 18:25:47Google で検索して上から調べていくべし。
すぐ見つかる。
0463デフォルトの名無しさん
2005/09/06(火) 18:56:17voidの関数から値を返すと未定義動作
だから値を返しちゃいけない
>>444は値を返してるわけじゃないから問題ない
0464デフォルトの名無しさん
2005/09/06(火) 23:17:32って出ます。何でですか? ファイル名c です。」
0465デフォルトの名無しさん
2005/09/06(火) 23:18:270466デフォルトの名無しさん
2005/09/06(火) 23:19:13100歩譲ってもC言語じゃないぞ
初心者板いけ
0467デフォルトの名無しさん
2005/09/06(火) 23:25:44C言語にはremoveとかunlinkはあるのに、
何故ファイルコピーの関数?は無いんでしょうか?
あと、ファイルコピーにfgets,fgetcを使ってるのは見つけたのですが、
freadは見当たりません。処理速度の問題ですか?
0468デフォルトの名無しさん
2005/09/06(火) 23:33:41CopyFile
既存のファイルを新しいファイルへコピーします。
CopyFileEx 関数は、2 つの追加機能を提供しています。CopyFileEx は、コピー操作の特定の部分が完了するたびに、指定された 1 個のコールバック関数を呼び出すことができます。さらに、コピー操作の最中にこの関数を中止することもできます。
BOOL CopyFile(
LPCTSTR lpExistingFileName, // 既存のファイルの名前
LPCTSTR lpNewFileName, // 新しいファイルの名前
BOOL bFailIfExists // ファイルが存在する場合の動作
);
0469デフォルトの名無しさん
2005/09/06(火) 23:38:140470デフォルトの名無しさん
2005/09/06(火) 23:39:26基本はfopen,fread,fwriteの組み合わせでファイルを操作する。
バイナリ、テキストモードを調べろ。ftell fseekも要参照。
他にもあるが後は自分で調べろ。
0471デフォルトの名無しさん
2005/09/07(水) 00:11:00ファイルのデータサイズが知りたいのですが、どうやったら取得できるのでしょうか?
0472デフォルトの名無しさん
2005/09/07(水) 00:11:22Win32APIじゃねーか
0473デフォルトの名無しさん
2005/09/07(水) 00:32:25ありがとうございます!とても助かります!お礼遅くなってすみません。。。
0474デフォルトの名無しさん
NGNGmain()からリターンすると、exit()と同等の処理が行われる(と思う)
0475デフォルトの名無しさん
2005/09/07(水) 01:20:20標準関数では、ファイルシステムに依存するような関数は省かれている。
だから、unlink()も標準ではない。
0476デフォルトの名無しさん
2005/09/07(水) 01:30:56#include <stdio.h>
void main(){
int a;
scanf("%d", &a);
(10 <= a) && (a <= 20) && printf("%d\n", a);
}
aの値を入力した後、まず10<=aが評価されて真ならば、次にa<=20が評価されて、
これもまた真ならば、最後にprintf("%d\n", a)の持つ値が評価されると思うんですが、
printfという関数のもつ値は常に真なのでしょうか?
0477デフォルトの名無しさん
2005/09/07(水) 01:35:49その論理演算の結果が使われているわけではないから、printf()の戻り値は考慮する必要がない。
尤も、printf()はきちんと意味のある戻り値を戻しているが、それはmanページでも自分で調べよ。
0478デフォルトの名無しさん
2005/09/07(水) 01:37:17レスありがとうございます
調べてみます
0479デフォルトの名無しさん
2005/09/07(水) 02:15:54if(isdigit(c)){
ungetc(c,stdin);
scanf("%ld",&x);
push(x);
}else{
switch(c){
case '+':
b=pop();a=pop();
push(a+b);
break;
逆ポーランド記法の式を計算するプログラムの一部です。
この中のungetcが果たしている役割、意味がわかりません。
これが無ければ奇妙な挙動をします。
なぜこのようなものが必要なのか教えてください。
0480デフォルトの名無しさん
2005/09/07(水) 02:37:06ungetc()自体はMSDNで調べるなり、ググればすぐに見つかるが
指定した入力ストリームに一字押し込む
んで、getcharで取り出したcは演算子の判別に使用してるし
数字はscanfで取り込んだ方が手間が掛からないから、その為に
演算子か数字かの判定用に取って来ちゃったcを押し戻してる
0481デフォルトの名無しさん
2005/09/07(水) 02:56:46有難うございます。
fread使っても良いんですねw
int main(){
FLIE *stream;
char *buffer;
int handle, size;
handle = open("copy元"、_O_RDONLY);
size =_filelength(handle);
close(handle);
stream = fopen("copy元"、"r");
fread(buffer, size, size, stream);
fwrite(buffer, size, size, stream):
close(stream);
return 0;
}
こんな感じでいいんでしょうか?
0482デフォルトの名無しさん
2005/09/07(水) 02:57:23ungetcは一応調べたのですが、ピンとこなかったので質問させていただきました。
自分でも理解しているかどうかわかりませんが、
getcharにより最初の文字が取り出される、というあたりで
なんとなくわかった気がします。
ありがとうございました。
0483デフォルトの名無しさん
2005/09/07(水) 03:19:41分かったっぽいが一応
要は入力ストリーム=1文字ずつ入ったコンテナが乗ったベルトコンベアと思えばいい
getcharはそこから最初のコンテナを下ろして中身を取り出す
ungetcはある文字をコンテナに入れてコンベアの先頭に強引に載せる
0484デフォルトの名無しさん
2005/09/07(水) 07:37:30判っているのか判っていないのか判らないからフォローしておくと、
入力用ストリームは出力できない。つーか、それじゃコピーにならないやん。
それと、filelength()だけのために低水準を使うのは感心しない。
stat()かなにかでサイズを得る方がいいかもしれない。
#ま、その辺は環境依存にもなってくるので詳しくは各環境のスレででも。
0485デフォルトの名無しさん
2005/09/07(水) 07:52:571 プリプロセッサ
2 予約語
3 関数内のローカル変数(static変数含む)
4 関数内のgotoのラベル
5 関数外のグローバル変数、関数(static変数、関数含む)
上の番号で並べるとどういう順番ですか?
自分は 1→2→3→4→5
という認識ですが、これで合ってますか?
(ラベルの扱いがよくわからない)
0486デフォルトの名無しさん
2005/09/07(水) 10:10:14あまりにも突込みどころ満載過ぎて誰も突っ込んでないようだが。
初期化されてないポインタのbufferにそのまま書き込んでるぞ。
別にファイル丸ごと読み込んで書き込まなければならない
理由はどこにも無い。それだとデカいサイズのファイルをコピーする
際に無駄にメモリを食うことになる。
適当なバッファサイズ(例えば4096とか8192とか)単位で
読み書きするループをまわす方が穏当だし、これだとファイルサイズ
を調べる必要も無くなる。
fopen()で開いたものはclose()ではなくfclose()で閉じる。
stdioのデフォルトはテキストモードなので、ファイルコピーの
ような場合は、明示的に"b"オプションを指定してバイナリモードに
する必要がある。その区別が存在するのはMS-DOSやWINDOWSなどだが、
区別の存在しないUNIXのようなOSで"b"オプションをつけても
害は無いので、つけておいたほうが良い。
fopen()で開くのなら、fileno()でディスクリプタを取得して
fstat()を使うことは可能で、その場合は最初にわざわざ別途に
open()、close()する必要は無い。これは無論ISO標準の範囲外の
話になるが、まあ大抵の環境では使えるだろう。
ちなみにfilelength()とかいう怪しい関数は(f)stat()と違って
ちっとも移植性が無い。
0488デフォルトの名無しさん
2005/09/07(水) 10:13:42そんだけ突っ込みどころがあるってこと。
バグの指摘と、モアベターな方法のサジェスチョンが混じってはいるが。
0489デフォルトの名無しさん
2005/09/07(水) 10:21:32能無しの厨が得得と語るなと……
0490デフォルトの名無しさん
2005/09/07(水) 10:28:20「1」はコンパイルを行なわれる前に実施される。
コンパイラがソースを先頭から舐めて、これは予約語とかこれはラベルとか認識していると思っているなら間違い。
その質問の回答が来ても「字句解析を行ない、構文木を作成し云々」
という様にコンパイラが何をしているかを知らなければ回答が理解出来ない。
「コンパイラを勉強して再度質問する」「なぜそんな事が知りたいかを説明する」
のどちらかの行動をお勧めする
0491デフォルトの名無しさん
2005/09/07(水) 10:30:44>>484
0492デフォルトの名無しさん
2005/09/07(水) 11:58:15まったく参考になりませんでした。
他の人お願いします。
0493デフォルトの名無しさん
2005/09/07(水) 11:58:320494デフォルトの名無しさん
2005/09/07(水) 12:35:58あきらめてsystem()使え
0495デフォルトの名無しさん
2005/09/07(水) 16:44:29プリプロセッサはコンパイルより前に解析される。
あとは、字句が出てきた時に、それが予約語か識別子(予約語でない)かが判定される。
識別子がどういう意味を持ってるかは、文脈から適宜判断される。
0496471
2005/09/07(水) 19:26:31fseek(f,0L,SEEK_END);
size = ftell(f);
fseek(f,0L,SEEK_SET);
でファイルサイズ取得できますた
0497デフォルトの名無しさん
2005/09/07(水) 20:40:54一緒に
hello.tds
hello.obj
と言う変なファイルだ出てきてしまいました。
これはいったい何なのでしょうか?説明お願いします。
0498デフォルトの名無しさん
2005/09/07(水) 20:43:17typedef struct _tagMainteRec
{
int nWave;
double dValue;
} MAINTEREC;
MAINTEREC Rec; convert←(値が入ってるとします)
この構造体のメンバに値をいれたいんですけど
どうすればできますでしょうか?
よろしくお願いします。
0499デフォルトの名無しさん
2005/09/07(水) 20:50:40hello.exeを作るうえでの中間ファイルなんで気にしないでOK
0500デフォルトの名無しさん
2005/09/07(水) 20:52:23convertは何を意味してる?
それだと型が指定されてないからコンパイルエラーになるぞ。
いまいち質問の意味がわからんが、Recのメンバに値を入れるなら
Rec.nWave = (整数値);
Rec.dValue = (実数値);
Rec = (MAINTEREC型の変数);
0501デフォルトの名無しさん
2005/09/07(水) 22:32:03過去ログ(8)にはgcc manualに載っているとあったので読んでみましたが、
それらしい記述は見当たりませんでした。載っているのはコマンドラインの
オプションだけ・・・。どなたかご存じないでしょうか?よろしくお願いします。
0502デフォルトの名無しさん
2005/09/07(水) 23:00:51ありがとうございます。
0503デフォルトの名無しさん
2005/09/07(水) 23:50:33なんて続くバイト列あるんだけどこれ
u_char *になっててテキトウに80バイトぐらい長さあります。
この中からNバイト目にXが存在するかどうかによってこのデータを保存する処理内容を変えたいのですが
一番速い方法ってどんな方法あるか教えてください。
0504デフォルトの名無しさん
2005/09/08(木) 00:00:02if (string[N] == X)?
0505デフォルトの名無しさん
2005/09/08(木) 00:04:28エラーメッセージリストはやっぱりないような気がするけど
gccのマニュアルで役に立つのはmanpageじゃなくて
info gccの方だよ。
0506デフォルトの名無しさん
2005/09/08(木) 00:10:05sprintfはbufferに文字列などを格納し、バイト数を返すとありますが
char buffer[200], s[] = "hoge", c = 'w';
j = sprintf( buffer, " %s\n", s );
j += sprintf( buffer + j, " %c\n", c );
prinf("bufferは%s",buffer);
とした時何故、sとcの文字列が出力されるのですか?
jにはバイト数が入っているのに「buffer+j」の部分で何故sの文字列が代入されているのでしょうか?
さっぱりわかりません・・・
0507デフォルトの名無しさん
2005/09/08(木) 00:15:53なるほど、こんな使い方があったのか(←初心者
0508デフォルトの名無しさん
2005/09/08(木) 00:16:19buffer + j は &buffer[j] と同じ。
0509デフォルトの名無しさん
2005/09/08(木) 00:25:52&buffer[j]の&にはどういう意味があるんでしょうか?
0510デフォルトの名無しさん
2005/09/08(木) 00:30:02buffer + j や &buffer[j] はbufferの j 文字目から、ということになる。
0511デフォルトの名無しさん
2005/09/08(木) 00:30:520512デフォルトの名無しさん
2005/09/08(木) 00:49:39>>508も参考に。
bufferと単に書けば「buffer配列の先頭ポインタ」を意味する。
jには上の行でbufferの先頭から格納されたbyte数が入っているので
buffer+j は(ポインタに整数を加算していて奇異に見えるが)
上の行で格納された文字列の次をポイントする
0513デフォルトの名無しさん
2005/09/08(木) 00:57:03unsigned char* ? それとも char* ?
変数名も bufだったりbuffだったりbだったりする?
0514デフォルトの名無しさん
2005/09/08(木) 01:07:240515デフォルトの名無しさん
2005/09/08(木) 01:37:46俺はchar*
名前はbuf使って、追加で用意するときはbuff
それ以上になったらbuff1, buff2, ...って感じでしてる
0516デフォルトの名無しさん
2005/09/08(木) 01:48:46俺はchar []型だが
>>513はバッファをヒープに取るのか?
0517デフォルトの名無しさん
2005/09/08(木) 01:49:19ありがとうさんです!
0518デフォルトの名無しさん
2005/09/08(木) 01:50:41LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Debug/TestTest.exe : fatal error LNK1120: 外部参照 2 が未解決です
どういうエラーでしょうか?よろしくお願いします。
0519デフォルトの名無しさん
2005/09/08(木) 02:40:56main関数とTakeStudy関数の定義をもう一度見直せ
ライブラリを使ってるなら、パスやヘッダファイルもチェック
0520デフォルトの名無しさん
2005/09/08(木) 03:03:25大きさによるなぁ
どちらかというとまろやかなmalloc使うことが多いと思う
0521デフォルトの名無しさん
2005/09/08(木) 03:10:01jが引っかかっていて何か別の意味があるのかと考えてしまい
>>509のような質問しましたが、>>510さんの説明で理解できました!
j文字目って事だったんですね、これでぐっすり眠れます。
皆さんありがとう^^
0522デフォルトの名無しさん
2005/09/08(木) 16:15:01やっと見直せました。自作関数の定義の仕方が間違ってました。。。。アフーーー!!
ありがとうございます!
0523デフォルトの名無しさん
2005/09/08(木) 22:25:08自分で管理しないと行けないのですが、参考文献や常套手段などありました教えてください。
あとsseを使用してmemcpy実装したけど、全然速くないのですがこれって自分がファビョってるだけですよねぇ
0524デフォルトの名無しさん
2005/09/08(木) 22:44:54馬鹿かお前は
いや、お前は馬鹿だ
0525デフォルトの名無しさん
2005/09/08(木) 23:11:13はじめにmallocで大量にメモリを確保して
first fitなりを実装汁
>>524
場かはおまえ
0526デフォルトの名無しさん
2005/09/08(木) 23:34:32おいおい・・・釣りだよな?
0527デフォルトの名無しさん
2005/09/08(木) 23:49:18mmapで実装すればいいのですか?
それともPosix共有メモリで実装すればいいのですか?
0528デフォルトの名無しさん
2005/09/09(金) 00:05:26定石としては
・頻繁にメモリ確保/解放をしない
・無駄なコピーをしない
かね。
0529デフォルトの名無しさん
2005/09/09(金) 00:08:46なるほどそうなのですか
でもどうしても処理しようとすると最低でも6GBぐらいメモリが必要なのですが
これは分割して確保したほうがいいのでしょうか?
今このマシンメモリ16GB積んでいるのでメモリ取っても問題はないはずなのですが
0530デフォルトの名無しさん
2005/09/09(金) 00:20:08最初にでっかくとっとけ
最近は実際に使い始めるまで実メモリは確保されないんだから
0531デフォルトの名無しさん
2005/09/09(金) 00:24:36下記�@の(int)sizeof(*pBmp)では、構造体のバイト数40が返ってくるので実際にアロックされたバイト数がしりたいのですが…。 (他板より誘導されてこちらにきましたが・・・)
/* 定数・変数定義 */
#define MAP_MAXSIZE (50L*1024L*1024L)
BITMAPINFOHEADER *pBmp;
map *pMap;
// メモリ獲得処理
if ((pBmp = (BITMAPINFOHEADER*)VirtualAlloc(NULL, MAP_MAXSIZE, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE)) == NULL) {
return (-1);
} else {/* ----- �@ここで割り当てられたバイト数を知りたい ----- */
sprintf(logMsg, "メモリリソース獲得後: pointer = BITMAPINFOHEADER %x / size = %d", pBmp, (int)sizeof(*pBmp));
pMap = (map *)pBmp;
}
/* 構造体定義 */
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
typedef struct tag_map {
BITMAPINFOHEADER biInfo;// Bitmap Info Header
BYTE bData[1];// 実際には約10MB分
} map;
0532デフォルトの名無しさん
2005/09/09(金) 00:32:3964 ビット機で計算科学でもやってんの?
どうやるにしろメモリは確保しないといけないのだから、
ある程度時間かかるのはしゃーない。
メモリ食わないアルゴリズムを探せるなら探した方がいいけど・・・
ないなら仕方がないね。
0533デフォルトの名無しさん
2005/09/09(金) 00:49:026GBって・・・
処理に最適と思われるサイズを1ブロックとする
メモリ管理を実装してもいっちゃね?
どっちにしろ最初に最大のブロック数を確保することに
なると思うが。
0534デフォルトの名無しさん
2005/09/09(金) 00:59:44それように最初に頭とケツ押さえて確保してしまいます。
後は、中身を検査して、結合子の入れ替え演算はポインタの付け変えだけで
いいからなんとかなりそうです。ありがとうございます
0535デフォルトの名無しさん
2005/09/09(金) 01:11:47これは釣りだよな、絶対。
0536デフォルトの名無しさん
2005/09/09(金) 01:14:43分かってると思うけど、1ブロックは2の乗数にしてね。
演算はなるべくシフトで。
積み重なったときの速度は全く変わってくるから。
0537デフォルトの名無しさん
2005/09/09(金) 01:47:14CPU:AMD Opteron
Chipset:AMD 8131/8111
使用してます。メモリだけで時価で1枚2万以上したと思います。
1GBx16枚積んでいます。
0538デフォルトの名無しさん
2005/09/09(金) 04:26:380539デフォルトの名無しさん
2005/09/09(金) 06:31:55mallocが遅い、というのはどういう計測の結果確認できたのですか?
原則的に、実装の問題だけでなく、使い方(呼び出し回数等)の問題も
小さくは無いなずなので。(つうか、processの大きさ自体にも……)
(いや、自分のmemcpy()との実装比較もうまくやれて無いようなので、
判断の根拠が気になる……)
0540デフォルトの名無しさん
2005/09/09(金) 07:17:25メモリ使用量が減らないのですが、メモリ使用量を減らすにはどうすればよいですか。
過去ログによると
http://nssearch.hp.infoseek.co.jp/clang/1072212403.html#x937
多くの実装においてmalloc族で確保したメモリは
プロセスが生きている限りOSに返されることはない。
らしいのですが、きちんとfreeしてあるのに減らないと、重いアプリだと思われますよね。
0541デフォルトの名無しさん
2005/09/09(金) 08:00:080542デフォルトの名無しさん
2005/09/09(金) 09:32:52ひょっとして認識できる程時間かかったりするんだろか
そんな環境使った事ないからわかんね
>>531
Win32APIなら該当スレへ、ここじゃない
0543デフォルトの名無しさん
2005/09/09(金) 10:24:55#include <time.h>
#include <stdlib.h>
main ( ) {
int i, j, kotae;
srand(time(NULL));
printf("[計算]\n");
i = rand( )%9+1;
j = 4;
printf(" %d + %d =",i,j);
scanf ( "%d ", kotae );
while( getchar( ) != '\n' ) { }
if ( kotae == i + j ) { printf("正解"); }
else{ printf( "不正解"); }
return 0;
}
おしえてくださいプログラムどこがおかしいんでしょうか
0544デフォルトの名無しさん
2005/09/09(金) 10:27:25うまく動作しません。どなたか詳しい方
どこがおかしいのかおしえてください。
0545デフォルトの名無しさん
2005/09/09(金) 10:36:10↓
scanf ( "%d ", &kotae );
0546デフォルトの名無しさん
2005/09/09(金) 11:48:586GB...もちろんLinuxは64bitOSだよな。
32bitOSだとアドレス空間は2GBまでしか確保できないはず...
> mallocが遅くてどうにもならないので
本当にmallocが遅いのか?実はその次のmemsetでの初期化が遅いとかないか?
prof , gprofを使ってボトルネックを探した方が早い様な気がする。
0547デフォルトの名無しさん
2005/09/09(金) 11:54:38>>1
>エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
今度から気をつけてね。
0548デフォルトの名無しさん
2005/09/09(金) 11:56:59アロケートする傾向に合わせて既存のマネージャ探してみたら。
アルゴリズムはCマガかDDJで見たような気がするけど忘れた。
似たようなサイズの確保・開放が激しいなら
struct buff{
size_t size;
void *p;
struct buff *next;
} buff;
struct buff *reusable_buff_list ;
みたいな感じでプールしといて再利用するとか。
0549デフォルトの名無しさん
2005/09/09(金) 12:19:41手際が悪いだけに見えるんだが、まあ、みんな疑問なのは、
本当に mallocのせいか? mallocの実装より単に大きいブロックから
切り分けりゃいいだけじゃね? ほんとに手順上その sizeが必須なのか?
とさまざまな突込みどころが… (memcpy SSE実装とかも…)
そもそもこれが、
>>Linuxでメモリ管理を自分で行いたいのですがmallocが遅くてどうにもならないので
>>自分で管理しないと行けないのですが、
<<Linuxでmallocが遅くてどうにもならないのでメモリ管理を自分で行いたいのですが
じゃないのがとてもワロタ(ひきつった)。でも激しくスレ違い。
0550デフォルトの名無しさん
2005/09/09(金) 12:25:25548の意見に賛成。
緩衝メモリエリアを設ける方法がいい。
OSの方にも似たような機構があるだろうけどGB単位のバッファは想定外でしょう。
何を計算させるかわからないけど、数値データの初期化だけでもえらく時間がかかりそう
0551デフォルトの名無しさん
2005/09/09(金) 12:31:30worldのリコンパイルの時コンパイルオプションでアーキテクト指定できるから
すでに対応しているような気がするが。
0552デフォルトの名無しさん
2005/09/09(金) 13:05:52おそらく534だと、ほとんど同じようなcellをリストで使うのだろうから、
空セルのリストの先頭を持てばいいだけだろうな。文字列分の生成とかも
必要だと、その種のプールではほとんど意味無いし。
どのみち profileぐらいとったボトルネック評価もしないでいじっても無意味。
0553デフォルトの名無しさん
2005/09/09(金) 13:31:19#include <time.h>
#include <stdlib.h>
main ( ) {
int player, suraimu,player_hp,suraimu_hp;
int p_turn = 1
player_hp = 100;
suraimu_hp = 100;
srand(time(NULL));
printf("スライムが現れた!\n");
for( ; ; p_turn = !p_turn) {
if(p_turn){player = rand( )%20+1;
printf("あなたの攻撃!ダメージ%d\n", player);
suraimu_hp -= player;
printf("スライムの残りHP%d\n",suraimu_hp);
if(suraimu_hp <= 0){ break;}
0554デフォルトの名無しさん
2005/09/09(金) 13:31:56suraimu = 10;
printf("スライムの攻撃! ダメージ%d\n", suraimu);
player_hp -= suraimu;
printf("あなたの残りHP%d\n", player_hp);
if(player_hp <= 0 ) { break; }
}
}
if( p_turn ) { printf( "スライムを倒した!\n"); }
else{ printf ( "あなたは死んだ・・\n");}
return 0;
}
0555デフォルトの名無しさん
2005/09/09(金) 13:33:11コンパイルするとどうしても
8行目のところで宣言の構文エラーとでてしまいます
なぜでしょうか 詳しい方おしえてください
おねがいします
0556デフォルトの名無しさん
2005/09/09(金) 13:34:18自分で考えろ
この程度で書き込むな
0557デフォルトの名無しさん
2005/09/09(金) 13:34:25> int p_turn = 1
セミコロンが抜けてる。
0558デフォルトの名無しさん
2005/09/09(金) 13:35:45スペシャルありがとうございます。
0559デフォルトの名無しさん
2005/09/09(金) 14:03:330560デフォルトの名無しさん
2005/09/09(金) 14:34:090561デフォルトの名無しさん
2005/09/09(金) 15:06:46脱力空笑いな俺がいる
0562C勉強中
2005/09/09(金) 16:00:46main ( ) {
char *str[ ] ={"hoge"};
printf("%d",str+2);
printf("%c", *(str+2));
return 0;
}
基本的なことですいません。このプログラムだと結果が(アドレス)ヨになってしまいます。
*(str+2)ではgがでてこないのでしょうか。詳しい方おしえてください
おねがいします
0563デフォルトの名無しさん
2005/09/09(金) 16:03:41変数宣言おかしくないか?
char str[]={"hoge"};でいいだろ
0564C勉強中
2005/09/09(金) 16:08:44ありがとうございます。ポインタをもっと勉強しておきます。
0565デフォルトの名無しさん
2005/09/09(金) 16:44:24メモリファイルシステムにしてmmapでやればぁ〜
0566デフォルトの名無しさん
2005/09/09(金) 17:00:01いちいち返してると返すたびにオーバーヘッドが発生して重いアプリだと思われるかと
0567デフォルトの名無しさん
2005/09/09(金) 17:35:26これはどういう意味なのでしょうか?
0568デフォルトの名無しさん
2005/09/09(金) 17:35:58abcdefg
と入っている時、
cde
のみ取り出して、別のchar型文字列に入れるにはどうしたら良いでしょうか?
strcpyなどは「"先頭の"何文字をコピーする」なので使えませんよね。
お願いします。
0569デフォルトの名無しさん
2005/09/09(金) 17:38:46RegisterClassが失敗した場合分岐
>>568
string + 2をstrncpyに渡せば途中から取れると思うけど
0570デフォルトの名無しさん
2005/09/09(金) 17:39:36strchrまたはstrstr+strncpy
0571デフォルトの名無しさん
2005/09/09(金) 17:44:01char *s = "abcdefg";
char dst[64];
strncpy( dst, s+2, 3 );
0572デフォルトの名無しさん
2005/09/09(金) 17:45:08それも可能ではあるけど、
普通は char str[]="hoge"; だな。
0573568
2005/09/09(金) 17:50:19そのような使い方が出来るとは・・・勉強が足りませんでした。
>>570
ポインタ等は理解していないので使いたく無いんです(ので逃げていました)。
これを機会に勉強します。
ありがとうございました。
0574デフォルトの名無しさん
2005/09/09(金) 17:53:18char * s = "abcdefg";
char dst[4];
sprintf(dst, "%.3s", s + 2);
char * s = "abcdefg";
char dst[4];
sscanf(s, "%*2s%3s", dst);
strtok()版もやろうかとちょっとだけ思った。
0575デフォルトの名無しさん
2005/09/09(金) 18:41:35ちなみに授業ではBCCというのを使ってます。
0576デフォルトの名無しさん
2005/09/09(金) 18:50:150577デフォルトの名無しさん
2005/09/09(金) 18:51:310578デフォルトの名無しさん
2005/09/09(金) 18:52:30BCC 使ったんでええんでないかい?
エラー・警告メッセージも同じだし。
0579デフォルトの名無しさん
2005/09/09(金) 18:58:25お騒がせしました。
0580デフォルトの名無しさん
2005/09/09(金) 19:00:01開発環境込みだと有料。
ただ、フリーの開発環境もある(検索すればすぐ出てくる)。
0581デフォルトの名無しさん
2005/09/09(金) 19:04:29http://pc8.2ch.net/test/read.cgi/tech/1091066805/10
0582デフォルトの名無しさん
2005/09/09(金) 19:07:10とりあえず計算結果を表示できればいいんで
開発環境とかはさっぱりです。がとりあえず>>581も
見てみます。ありがとうございました。
0583デフォルトの名無しさん
2005/09/09(金) 19:10:14気を抜いてたから>>562に釣られて{}つけた
特に反省はしてない
0584デフォルトの名無しさん
2005/09/09(金) 19:33:45Cはポインタが命 逃げ切れないよ
0585デフォルトの名無しさん
2005/09/09(金) 19:33:57というか、{ } 付きでも通るということに衝撃を受けた。
その間違いは、それはそれで糧になった。
まあ、何かのトリッキーなマクロくらいでしか使えそうにないけど。
0586デフォルトの名無しさん
2005/09/09(金) 19:36:34やはりVisual C++などでWindowsのプログラミングを勉強したほうがよろしいでしょうか?
0587デフォルトの名無しさん
2005/09/09(金) 19:49:18Linuxをインストールして基本的なコマンドのソースを読むんだ
0588デフォルトの名無しさん
2005/09/09(金) 19:51:29それはダメだ
基本的ではないコマンドのコードを読むべき
lsとか面倒くさい
0589デフォルトの名無しさん
2005/09/09(金) 19:53:33あるオープンソースプログラムのクローン(ソースを見ずに独力で複製)を作って、
その後にソースを見比べてみる。
0590デフォルトの名無しさん
2005/09/09(金) 21:03:44grepのソース(コードとの違いはわかりません?)を見たんですが、
難しいですね。易きを求めてもキリが無いので、がっつり打ち込んでみます。
ところで何かお勧めのオープンソースプログラムはあるでしょうか?
0591デフォルトの名無しさん
2005/09/09(金) 21:15:28それは、末尾が\0終端されないという致命的な欠陥がある
0592デフォルトの名無しさん
2005/09/09(金) 21:19:18grep は正規表現だから、ちと難しいかも。
ワイルドカード程度なら簡単なんだけどね。
それでも頑張ってみるのもいいことだけど。
>ソース(コードとの違いはわかりません?)
コードの方が少し意味が広いけど、
文脈が同じなら、違いはない、筈。
0593デフォルトの名無しさん
2005/09/09(金) 21:25:56「打ちこむ」わけ?
0594デフォルトの名無しさん
2005/09/09(金) 21:32:30ついでなのでかじる程度にしか知らない正規表現も勉強したいと思います。
>>593
「Cの学習に打ち込む」の意です。
0595デフォルトの名無しさん
2005/09/09(金) 21:33:370596デフォルトの名無しさん
2005/09/09(金) 21:43:250597デフォルトの名無しさん
2005/09/09(金) 21:44:44とかそんな感じか?
0598デフォルトの名無しさん
2005/09/09(金) 22:07:10ありがとうございました
0599デフォルトの名無しさん
2005/09/09(金) 22:08:53申し訳ない
0600540
2005/09/09(金) 22:23:54このメモリ使用量増加現象は
メモリリークと何か違うのですか?
OSとか他のアプリがメモリを欲しがった場合に回収されて
メモリ使用量は減るんですかね。
PCHAR g_superallocbuf = NULL;
ボタン1押す
if( !g_superallocbuf ){
g_superallocbuf = (PCHAR)calloc( 100000000, sizeof(CHAR) );
memset( g_superallocbuf, 'a', sizeof(CHAR)*100000000 );
}
ボタン2押す
if( g_superallocbuf ){
free( g_superallocbuf );
g_superallocbuf = NULL;
}
という、ボタンに対応してalloc、freeするだけの冶具では、
freeしたときにメモリ使用量がきちんと元に戻ったのでもうわけがわかりません。
0601デフォルトの名無しさん
2005/09/09(金) 22:55:48OS依存だからよそでやれやボケ
0602デフォルトの名無しさん
2005/09/09(金) 23:04:23だから、仮に free がOSにメモリを戻さないような
ことがあっても問題なく動くコードを書くようにするのが
C使いの常識。
というか、malloc と free は本来そうやって使うためのもの。
よく世間で見られる malloc の後に free を呼び忘れないことに
血眼になっている奴等は、例えるならば
フェラーリで下町の路地を無理矢理通り抜けようとして
車体に傷がつかないように必死になっているようなもの。
正に馬鹿としかいいようがない。
0603デフォルトの名無しさん
2005/09/09(金) 23:06:280604デフォルトの名無しさん
2005/09/09(金) 23:06:28二段落目と三段落目とのつながりが無いわけだが
0605デフォルトの名無しさん
2005/09/09(金) 23:07:080606デフォルトの名無しさん
2005/09/09(金) 23:10:480607デフォルトの名無しさん
2005/09/09(金) 23:17:31みなさんはどんな風に分けていますか?
僕の場合はメイン関数は基本的に関数を呼ぶだけで、
メイン関数への戻り値によって処理終了するか続行するかを決める処理なんですけど、
どうでしょうか?
関数内でエラーが発生したらそこから終了させてしまった方が見易いですか?
また、簡単な処理ならメイン関数に書くべきですか?
0608デフォルトの名無しさん
2005/09/09(金) 23:21:21それはC言語の話題ではない。
つ[プログラム設計方法論]
0609デフォルトの名無しさん
2005/09/09(金) 23:29:21mallc/freeに頼らずに自分でメモリ管理するべきということでしょ。
0610デフォルトの名無しさん
2005/09/09(金) 23:30:390611デフォルトの名無しさん
2005/09/10(土) 00:23:130612デフォルトの名無しさん
2005/09/10(土) 01:45:55typedef (*Matrix)(int ret);
Matrix matrix[] [10]={
{step_cnt, (関数名)..., ..., ..., ..., ..., ..., ..., ..., ...., }.
{other, (関数名..., ..., ..., ..., ..., ..., ..., ..., ..., }
};
のような形を使いたいのですが、調べたのですが全然わかりませんでした。
宣言の仕方、テーブルを呼び出す関数の作り方、渡す先の関数の作り方を
教えてもらいたいです。
0613デフォルトの名無しさん
2005/09/10(土) 09:13:46宣言はそれでいいはず。
呼び出すときはmatrix[0][0](0)のようにする。
0614デフォルトの名無しさん
2005/09/10(土) 10:25:260615デフォルトの名無しさん
2005/09/10(土) 10:38:38同じコーディングスタイル。
main以外ではexitしない方がいい。
0616デフォルトの名無しさん
2005/09/10(土) 10:41:060617デフォルトの名無しさん
2005/09/10(土) 10:47:110618デフォルトの名無しさん
2005/09/10(土) 10:47:430619デフォルトの名無しさん
2005/09/10(土) 10:52:27アホ
関数などの機能分割する意味が理解できていないのと
リソース解放の必要性が全く分かってない。
初心者が多い場所で602ワールドの常識をC使いの常識などと
吹聴するのはやめていただこうか。
0620デフォルトの名無しさん
2005/09/10(土) 11:09:12必要があるように上位に伝播させているんだよ。
mainまで戻るのは終了させる必要がからじゃないの。
0621デフォルトの名無しさん
2005/09/10(土) 11:54:45途中の経路でリソース開放が重要なら関数が全部エラー返すようにするのが無難。
エラーしても継続して動作するアプリなら、607氏が悩んでる状況にそもそもならないと思う。
0622デフォルトの名無しさん
2005/09/10(土) 12:10:31void *xmalloc(size_t n)
{
void *p = malloc(n);
if (!p) { perror("malloc"); exit(2); }
return p;
}
みたいなの(要するに呼び出し側に制御を戻すとは限らない関数)を
使うのは珍しいことじゃない。
こういうのが使えるかどうかはプログラムの性質による。
「使える」場合には、当然使ったほうエラー処理が単純になり楽になる。
場合によってはatexit()やsetjmp()、apacheのようなプール管理方式の
使用なども検討しましょう。
0623デフォルトの名無しさん
2005/09/10(土) 12:20:240624デフォルトの名無しさん
2005/09/10(土) 12:23:130625デフォルトの名無しさん
2005/09/10(土) 13:25:19関数外へのジャンプやスタックポインタの明示的な操作もやり放題で。
各CPUへのコンパイラさえあれば、素のマシンコードへ無難に翻訳してくれるような。
0626デフォルトの名無しさん
2005/09/10(土) 13:45:050627デフォルトの名無しさん
2005/09/10(土) 14:00:40ピットシフトはなんの役に立つのでしょうか?
0628デフォルトの名無しさん
2005/09/10(土) 14:01:430629デフォルトの名無しさん
2005/09/10(土) 14:21:01俺も一瞬そう思ったけど、良く見ると「ピ」ットだぜ
0630デフォルトの名無しさん
2005/09/10(土) 14:23:520631デフォルトの名無しさん
2005/09/10(土) 14:29:240632デフォルトの名無しさん
2005/09/10(土) 14:35:310633デフォルトの名無しさん
2005/09/10(土) 14:40:31C言語厨はなんの役に立つのでしょうか?
0634デフォルトの名無しさん
2005/09/10(土) 14:42:400635612
2005/09/10(土) 15:40:23matrix[y軸][x軸]();
としたいのですが、y軸をグローバル変数で宣言していて、
x軸をパラメータとして、この関数テーブルに渡したいのですが、その時は
void call_matrix(int *rec_info)
{
matrix[グローバル変数][*rec_info]();
}
の形でいいんでしょうか?
また、呼び出した先の関数に値やアドレスを渡さない時には
呼び出す先の関数は
void func(void)
{
...
}
でいいでしょうか?
0636デフォルトの名無しさん
2005/09/10(土) 15:47:52matrixにしまうのならMatrix型に合うようにint func(int)にしろ。
0637デフォルトの名無しさん
2005/09/10(土) 15:53:44で、ptrがぬるぽだったら偽と評価されるの?
0638デフォルトの名無しさん
2005/09/10(土) 15:57:04そういうこと
0639デフォルトの名無しさん
2005/09/10(土) 16:28:45OSXならgccが使える。
Appleのサイトで開発環境を無料で入手可能。
0640名無しさん@そうだ選挙に行こう
2005/09/10(土) 16:54:18厨だと役に立たない
0641デフォルトの名無しさん
2005/09/10(土) 16:58:17開発環境は OS X についてきてる筈。
ただ、そのままではインストールされず、
Development Tools って CD が付いてきてるから、
それからインストールする。
0642名無しさん@そうだ選挙に行こう
2005/09/10(土) 18:37:41親切におしえていいただき、ありがたいのですが...
MACOS9なんです。最初にいうべきでしたね...
OS9対応でC言語のコンパイラはありませんか?
0643名無しさん@そうだ選挙に行こう
2005/09/10(土) 18:52:37MPW
0644名無しさん@そうだ選挙に行こう
2005/09/10(土) 18:55:180645名無しさん@そうだ選挙に行こう
2005/09/10(土) 19:44:38void moji(char ch);
int main(void)
{
char ch1;
do{
printf("文字を入力してください: ");
scanf("%c", &ch1);
}while(!(('a'<=ch1) && (ch1<='z')));
moji(ch1);
return 0;
}
void moji(char ch)
{
if(ch<='z'){
printf("%c", ch);
moji(++ch);
}
}
を実行し、わざとa〜z以外の文字(Aとか)を入力すると、
「文字を入力してください: 文字を入力してください: 」
となります
なぜ、こうなるのでしょうか?
また、「文字を入力してください: 」のみを表示することは可能でしょうか?
0646名無しさん@そうだ選挙に行こう
2005/09/10(土) 19:47:28実際は「a〜z 以外の文字」と改行で2文字入力されるから。
期待しない文字だった場合は fflush(stdin) するようにすればいいかな?
0647名無しさん@そうだ選挙に行こう
2005/09/10(土) 19:48:14改行コードの処理
0648名無しさん@そうだ選挙に行こう
2005/09/10(土) 19:48:49A、Bにはあらかじめ何かしらデータが入っているとします。
AとBの内容から、新たにAを作り直すということをやりたいです。
AにBを追記するのではありません。
AのファイルパスをPathA, BのファイルパスをPathBとします。
FILE *fr, *fr2, fw;
fr = fopen(PathA, "r");
fr2 = fopen(PathB, "r");
fw = fopen(PathA, "w");
---処理
fclose(fw);
fclose(fr2);
fclose(fr);
とやってみたのですが、fw = 〜の行が実行された時点で、ファイルAがデータ無し
の状態にクリアされてしまいます(当然ですが)。
どのような方法を取れば良いでしょうか?
0649名無しさん@そうだ選挙に行こう
2005/09/10(土) 19:51:47Cを作れば?
0650名無しさん@そうだ選挙に行こう
2005/09/10(土) 19:53:02>>647
改行も処理されるんですね…orz
fflush(stdin)は便利なので、使っていきたいと思います
どうもありがとうございました
0651名無しさん@そうだ選挙に行こう
2005/09/10(土) 19:57:46入力バッファのフラッシュによる動作は一般に未定義。よって、
fflush(stdin)はあなた方の環境では偶然期待通りに動いているだけ。
ISO/IEC 9899:1999 7.19.5.2 The fflush function -2
0652648
2005/09/10(土) 19:57:49そ、そうですね。
AをCにコピー
fr = fopen(PathC, "r");
fr2 = fopen(PathB, "r");
fw = fopen(PathA, "w");
とすれば出来ました。お恥ずかしい。
ありがとうございます。
0653名無しさん@そうだ選挙に行こう
2005/09/10(土) 20:08:53(; Д ) ゚ ゚
0654名無しさん@そうだ選挙に行こう
2005/09/10(土) 20:18:39>>653
0656612
2005/09/10(土) 20:35:05ありがとうございます。
おかげで完成出来そうです。
0657名無しさん@そうだ選挙に行こう
2005/09/10(土) 20:49:52ここで質問させて頂きたいのですが、(それと、ここだとプログラムの専門家
の方が大勢いらっしゃると思うので)
XY平面上の多角形図形を、直線で分割するCプログラムを作成しているのですが、
凸型の多角形に限定すれば簡単なのですが、凹んでいる多角形なども考慮した
任意の形状の多角形を直線で分割する良いアルゴリズムの開発に苦労しています。
多角形は、以下のような構造体を定義して、リスト構造で表現してみました。
struct Point {
double x;
double y;
struct Point *next;
struct Point *prev;
} ;
例えば、三角形ならば、
(x1,y1) ----(x2,y2)----(x3,y3)----(x1,y1)
のように4つの要素を連結して、表現してみました。
そこでお教えいただきたいのですが、このような問題に対する、お勧めのサイトとか、
アルゴリズムとか、データ構造などに関して、何でも良いので情報をご存知の方
おられましたらアドバイスお願いします。
よろしく。
0658名無しさん@そうだ選挙に行こう
2005/09/10(土) 20:55:17画像処理スレや宿題スレがあるじゃないか
0659名無しさん@そうだ選挙に行こう
2005/09/10(土) 20:56:47まず、そんな効率の悪い方法でやろうとするな
0660名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:11:10独習Cと言う本を買ったけど、コンパイルできなかった。
icrosoft.NET Framework SDKを使用する場合は、コンパイラがコマンドベースなので、
まずメモ帳などのテキストエディタでプログラム用のファイルを作成し保存します。
続いてXPではコマンドプロンプトウィンドウを開いてください。
ソースファイルを保存したディレクトリに移動して、次のコマンドを入力します。
c1 test.c
これでプログラムを実行することができます。次のコマンドを入力してください。
test.exe
と書いてあるんですけど、4行目からわからないです。
c1 test.cコマンドをはどこに入力するんでしょうか。
本当に素人くさい質問ですみません。
0661名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:14:290662名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:19:30初心者に質問する権利は(慣例上)無い。
0663名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:21:27お前、慣例の意味わかってないだろ
0664名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:22:430665名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:26:13c1じゃなくてcl(シーエル)
コマンドプロンプトはスタートメニューのプログラムのアクセサリの中にある。
0667名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:31:500668デフォルトの名無しさん
2005/09/10(土) 21:32:420669名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:34:03責任もって最後まで答えてやれよ
0670名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:35:230671名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:37:38>>664寒冷前線じゃなくて
0672名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:18:000673名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:21:130674名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:32:55clの前に「cd ソースのあるディレクトリ」
0675名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:44:40初心者ですが
デバイスを解放せずにプログラムを終了させると
どうなるんですか?
0676名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:47:430677675
2005/09/10(土) 22:51:25どこかの解説サイトにあったんですが・・・
0678名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:53:190679名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:56:25バイナリが4バイトずつ読んでしまうこともあり、わからないです・・・
手順は
1.ファイル読み込み
2.リソース場所へ移動
3.1バイト、1バイト読んでいく
4.規定外の文字なら今まで読んだところを結合
5.それを保存
6.3-5をループ
7.最後まできたら終わる。
このような感じを考えているのですがヒントをいただけないでしょうか?
参考にしたサイトは
ttp://www9.plala.or.jp/sgwr-t/lib/fread.html
ttp://homepage3.nifty.com/mmgames/c_guide/17-02.html
0680名無しさん@そうだ選挙に行こう
2005/09/10(土) 23:00:53バイトならfread(buf, 1, 1, fp)だよ
0681名無しさん@そうだ選挙に行こう
2005/09/10(土) 23:01:12お前の書いたコードが悪い。
0682名無しさん@そうだ選挙に行こう
2005/09/10(土) 23:04:45ありがとうございます。
早速、取り掛かってみます。
>>681
すみませんでした。
できるだけ良いコードを書けるようにがんばります。
0683名無しさん@そうだ選挙に行こう
2005/09/11(日) 00:39:41思っています.C言語でGUIを作った場合,入力データの受け渡しは簡単だと思うのですが,
GUIを作るのが面倒だと思います.一方,tcl/tkみたいなスクリプトでGUIを作った場合,
GUIは簡単に作れるかわりに,データの受け渡しが面倒だと思います.
開発環境はwindows+cygwinなので,visual studio系は使えません.このような状況で
最も簡単なGUIアプリの作り方はどのような方法が考えられますか?
0684名無しさん@そうだ選挙に行こう
2005/09/11(日) 00:43:01>>1も読めない文盲か。
0685名無しさん@そうだ選挙に行こう
2005/09/11(日) 01:10:17ATL/WTL Part3
http://pc8.2ch.net/test/read.cgi/tech/1095442366/
【C++】マイナーGUIツールキット
http://pc8.2ch.net/test/read.cgi/tech/1065627704/
0686名無しさん@そうだ選挙に行こう
2005/09/11(日) 07:36:46それは getc(fp) と同じだ。
0687名無しさん@そうだ選挙に行こう
2005/09/11(日) 07:52:53CGI
0688名無しさん@そうだ選挙に行こう
2005/09/11(日) 11:57:070689名無しさん@そうだ選挙に行こう
2005/09/11(日) 12:09:140690名無しさん@そうだ選挙に行こう
2005/09/11(日) 12:22:23まず2chブラウザを入れろ
そうしたらスレ一覧から宿題で検索。
おまえの評価はCだ
0691名無しさん@そうだ選挙に行こう
2005/09/11(日) 12:35:31fgetc
0692名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:22:02pfunc = NULL;
これって合法?
0693名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:30:02そこを参照しちゃ駄目だったと思うけど。
0694名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:36:06やっちゃいかんのは
int func(void *arg) { /* ... */ }
void *pfunc = func;
だな。
0695名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:01:382:void (*pfunc)() = func;
3:int (*pfunc)() = func;
0696名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:15:010697名無しさん@そうだ選挙に行こう
2005/09/11(日) 17:00:03NULLがこう定義されているとアウト。
#define NULL (void *)0
オブジェクトへのポインタを関数へのポインタに変換するのは処理系依存か何か。
0698名無しさん@そうだ選挙に行こう
2005/09/11(日) 17:55:16>オブジェクトへのポインタを関数へのポインタに変換するのは……
空ポインタの場合はキャストによる型変換が許されている => JISX3010 6.3.2.3
さらに空ポインタ定数の場合は自動的に型変換される => JISX3010 6.5.16.1
それ以外は未定義
0699名無しさん@そうだ選挙に行こう
2005/09/11(日) 18:27:16C99で改良されていたのね。スマソ
0700名無しさん@そうだ選挙に行こう
2005/09/11(日) 20:42:00ヌルポインタに対する特例は前からあるよ
0701デフォルトの名無しさん
2005/09/11(日) 21:18:08いやあああああああああああああ
0702名無しさん@そうだ選挙に行こう
2005/09/11(日) 21:38:37そこまで行くと一度設計を見直したほうがいいような気がする。
0703名無しさん@そうだ選挙に行こう
2005/09/11(日) 21:54:410704名無しさん@そうだ選挙に行こう
2005/09/11(日) 21:55:53ポインタの指す構造体のメンバの
ポインタの指す構造体のメンバの
ポインタの指す構造体のメンバの
・・・・orz・・・・
0705名無しさん@そうだ選挙に行こう
2005/09/11(日) 22:02:02別に悪いことじゃない
0706名無しさん@そうだ選挙に行こう
2005/09/11(日) 22:49:29Cならありえるしtypedefで隠すことだって出来る
まあ設計の見直しは大切だな
0707名無しさん@そうだ選挙に行こう
2005/09/11(日) 23:20:01多重配列を動的に確保する時にしか
使いどころがない気がする。
0708名無しさん@そうだ選挙に行こう
2005/09/11(日) 23:21:490709名無しさん@そうだ選挙に行こう
2005/09/11(日) 23:30:59それは「エライ」人だな。
「イタイ」人とも言う。
0710デフォルトの名無しさん
2005/09/11(日) 23:57:39最初からC++で書けばいいのに
0711デフォルトの名無しさん
2005/09/12(月) 07:06:19{
int i, no;
int prime[500];
int ptr = 0;
unsigned long counter = 0;
prime[ptr++] = 2;
prime[ptr++] = 3;
for (no = 5; no <= 1000; no += 2) {
int flag = 0;
for (i = 1; counter++, prime[i] * prime[i] <= no; i++) {
counter ++;
if (no % prime[i] == 0) {
flag = 1;
break;
}
}
if (!flag)
prime[ptr++] = no;
}
for (i = 0; i < ptr; i++)
printf("%d\n", prime[i]);
printf("乗除を行った回数:%lu\n", counter);
return (0);
}
素数を求めて乗除を行った回数をもとめるプログラムなのですが、
counter++が2回出てくる理由がわかりません。
御教授ください。
0712デフォルトの名無しさん
2005/09/12(月) 07:31:08最後のprintfからcounterは乗算・除算を行った回数を計測するようだ。
forの条件式でprime[i] * prime[i]を行っているので、ここで1回。
その次、no % prime[i]も除算なので、ここでも1回。
別におかしくもなんともないな。
0713デフォルトの名無しさん
2005/09/12(月) 07:36:11理解できました!
ありがとうございます。
0714デフォルトの名無しさん
2005/09/12(月) 17:18:43が失敗(EOFか0が返る?)した場合、var の内容は
12345 のままですか?
0715デフォルトの名無しさん
2005/09/12(月) 17:21:510716デフォルトの名無しさん
2005/09/12(月) 17:37:49こんなだとコンパイルエラーになります
int hoge(int a){ return a; }
int hage(int a){ return a*2; }
int main(){
int *c[] = {hoge,hage};
printf("%d\n",c[0](3));
printf("%d\n",c[1](3));
}
どう書くのが正しいんでしょうか
0717デフォルトの名無しさん
2005/09/12(月) 17:39:22もう一つ質問なのですが、
int rc = 123 == 123; などのようにした場合、
rc == 1 が真なのはどの環境でも同じですよね?
0718デフォルトの名無しさん
2005/09/12(月) 17:39:49ひょっとしてそれはギャグでやってるのか!?
関数テーブルについて自分で何も調べないで質問してるとしか思えない!
0719デフォルトの名無しさん
2005/09/12(月) 17:40:54同じではあるけど、括弧つけといた方が読みやすい。
0720デフォルトの名無しさん
2005/09/12(月) 17:50:24ありがとうございました。
0721デフォルトの名無しさん
2005/09/12(月) 18:07:03配列cは関数ポインタの関数でなければならない。
関数ポインタの書き方をもう一度良く調べろ。
0722721
2005/09/12(月) 18:08:01×関数ポインタの関数
○関数ポインタの配列
0723デフォルトの名無しさん
2005/09/12(月) 18:15:310724デフォルトの名無しさん
2005/09/12(月) 18:45:43別にintでも大丈夫だよ
呼び出すときに関数のポインタへキャストすれば
ただしintがポインタを表現できる幅を満たしてないとだめだけど
0725デフォルトの名無しさん
2005/09/12(月) 18:48:490726デフォルトの名無しさん
2005/09/12(月) 19:23:020727デフォルトの名無しさん
2005/09/12(月) 19:56:400728デフォルトの名無しさん
2005/09/12(月) 19:57:52MS-DOSや64bitマシンでは通用しない技
0729デフォルトの名無しさん
2005/09/12(月) 20:04:430730デフォルトの名無しさん
2005/09/12(月) 20:38:19short tinko(int a){ return (short)a; }
…
int main()
{
int (*manko[])(int) = {unko,tinko};
…
}
In function main:
warning : initialization from incompatible pointer type
先生!何故かtinkoがshortで定義されています!
0731デフォルトの名無しさん
2005/09/12(月) 20:38:27・MS-DOS
near ポインタになら使えるんじゃ?
far ポインタも間接的になら渡せなくもないが、
long にした方がスマートか?
・64ビット機
32ビット互換モードで動いてたら問題ない。
あと、int が 64 ビットなら使える(普通は 32 ビットみたいだが)。
これも long にすればいいか。
というか、普通は typedef だな。
LPARAM とか代表的な利用例。
0732デフォルトの名無しさん
2005/09/12(月) 20:56:060733デフォルトの名無しさん
2005/09/12(月) 21:21:580734デフォルトの名無しさん
2005/09/12(月) 21:33:310735デフォルトの名無しさん
2005/09/12(月) 21:39:410736デフォルトの名無しさん
2005/09/12(月) 21:57:480737デフォルトの名無しさん
2005/09/12(月) 21:58:190738デフォルトの名無しさん
2005/09/12(月) 22:00:010739デフォルトの名無しさん
2005/09/12(月) 22:31:360740デフォルトの名無しさん
2005/09/12(月) 23:00:10は?それMacOSとかの話じゃなくて?
0741デフォルトの名無しさん
2005/09/12(月) 23:00:57ホント?スレ違いなんで誘導かソースキボン
0742デフォルトの名無しさん
2005/09/12(月) 23:09:200743デフォルトの名無しさん
2005/09/13(火) 00:49:460744デフォルトの名無しさん
2005/09/13(火) 01:41:29確か教祖様が死ぬほど嫌ってたはずだ。
C言語より論理的で美しいから・・・
0745デフォルトの名無しさん
2005/09/13(火) 01:45:450746デフォルトの名無しさん
2005/09/13(火) 01:49:420747デフォルトの名無しさん
2005/09/13(火) 01:58:070748デフォルトの名無しさん
2005/09/13(火) 02:03:110749デフォルトの名無しさん
2005/09/13(火) 03:41:22PascalもCも細部は違うにしろ、似たような言語だろ。
文法レベルでは大した違いはない。
同じアルゴリズムを書くにしてもそれほど大きな違いはないし、
違いがあるとすればソフトウェア工学的な見地からだろう。
0750デフォルトの名無しさん
2005/09/13(火) 04:30:48んー、なんていうか、俺にはそういうお前が一番そういう、どの言語が一番かって
いうことにこだわっているように見えるんだよね。
(10代しゃべり場風に)
0751デフォルトの名無しさん
2005/09/13(火) 09:08:38出るわけないんだよな。
前見てびびったのが、「社会で勝ち組みになる事は大切か?」だった
んだけど、「勝ち組み」の定義が為されてないのに、いい歳ぶっこいた
高校生が真面目に話してたこと。おまえらアホかと。
勝ち組み=金を稼ぐこと、勝ち組み=権力を得ること、とでも定義すれ
ば、ゲイツ、ブッシュって答えすぐ出るのにね。
そこをNHKに突っ込まないでモルモットのように話してる厨房は一回
死になさいってこった。
0752デフォルトの名無しさん
2005/09/13(火) 09:30:100753デフォルトの名無しさん
2005/09/13(火) 12:18:43俺もだけど
0754デフォルトの名無しさん
2005/09/13(火) 13:09:210755デフォルトの名無しさん
2005/09/13(火) 14:03:130756デフォルトの名無しさん
2005/09/13(火) 14:58:36C信者とかっているのか?
0757デフォルトの名無しさん
2005/09/13(火) 15:07:59デバドラ/組み込み系でC言語しか使ってない人とか
・・・違うか。
0758デフォルトの名無しさん
2005/09/13(火) 15:44:00もしコンピュータ言語をなにも知らないなら、まず Python から始めることをおすすめします。
設計がきれいだし、ドキュメントもしっかりしているし、初心者にもそこそことっつきやすくできています。
Java もプログラミングを学ぶにはよい言語です。 Python よりはむずかしいですが、できるコードは Python より高速です。
二番目の言語としてはとてもすぐれていると思います
本気でプログラミングをするなら、C を勉強するしかありません。これは Unix の中核となる言語です。
C++ は C と密接な関係にあります。片方を知っていれば、もう片方を学ぶのはそんなにむずかしくありません。
が、どっちも真っ先に勉強しようとするのには向いた代物ではありません。
0759デフォルトの名無しさん
2005/09/13(火) 16:06:330760デフォルトの名無しさん
2005/09/13(火) 16:20:260761デフォルトの名無しさん
2005/09/13(火) 16:41:460762デフォルトの名無しさん
2005/09/13(火) 16:48:030763デフォルトの名無しさん
2005/09/13(火) 16:55:19エーホ・コラシックや特徴ベクトル法のC、C++によるソースがのってる本、ホームページなど、参考になりそうな資料あったら
おしえてくださいm(−−)m 少しスレとずれてるかも(・・;)
0764デフォルトの名無しさん
2005/09/13(火) 17:03:26ttp://www.namazu.org/
0765デフォルトの名無しさん
2005/09/13(火) 17:12:25最近またCが見直されてますよね?
本屋ではJavaとCが本棚を圧倒しています。
(Java > C だが…また、コンピュータ言語の棚自体は
エクセルやワードなどに圧倒されてはいるが…)
他はVB、C++、C#がちょろちょろ、Ruby、Perl、Shell
が「ほんの」少しってところでしょうか?
大都市「近郊の」本屋では、の話ですが…
(姶良郡?…)
0766デフォルトの名無しさん
2005/09/13(火) 17:14:180767デフォルトの名無しさん
2005/09/13(火) 17:18:030768デフォルトの名無しさん
2005/09/13(火) 17:29:140769デフォルトの名無しさん
2005/09/13(火) 17:30:440770デフォルトの名無しさん
2005/09/13(火) 17:33:580771デフォルトの名無しさん
2005/09/13(火) 17:36:16マジおすすめ
0772デフォルトの名無しさん
2005/09/13(火) 18:21:590773デフォルトの名無しさん
2005/09/13(火) 18:33:43某マンガ誌のイラストパズル解きたさにVBAで組んだ香具師もいることだし。
尤も、形から入りたい日本人にとっては「プログラムしている」気分がしなくてだめらしいが。
0774デフォルトの名無しさん
2005/09/13(火) 18:44:13アメリカはトップダウンだから手段より目的重視だしな
日本人は目的はともかく手段を持ちたがる
ここで一句
プログラム 覚える頃には ニートかな
0775デフォルトの名無しさん
2005/09/13(火) 18:46:180776デフォルトの名無しさん
2005/09/13(火) 18:47:180777デフォルトの名無しさん
2005/09/13(火) 18:54:180778デフォルトの名無しさん
2005/09/13(火) 19:08:560779デフォルトの名無しさん
2005/09/13(火) 19:25:500780デフォルトの名無しさん
2005/09/13(火) 20:07:320781デフォルトの名無しさん
2005/09/13(火) 20:32:490782デフォルトの名無しさん
2005/09/13(火) 20:35:560783デフォルトの名無しさん
2005/09/13(火) 21:21:39fopenをr+で開いたときに
<TABLE WIDTH=9> を <TABLE WIDTH=90> に書き換えたとしよう
すると一文字多くなるので、次の行の最初の1文字が上書きされて消えてしまいます
文字の上に上書きじゃなくインサートさせたいときはどうすればよかか?
0784783
2005/09/13(火) 21:24:16(書き換え前)
<TABLE WIDTH=9>\n
<TD>\n
(書き換え後)
<TABLE WIDTH=90>\n
TD>\n
0785デフォルトの名無しさん
2005/09/13(火) 21:27:48よくこんなのが普及したものだ・・・
0786デフォルトの名無しさん
NGNGファイルは上書きしかできないよ。
0787デフォルトの名無しさん
2005/09/13(火) 21:38:45とても正しい答え方ですね。感服しました
0788デフォルトの名無しさん
2005/09/13(火) 22:29:03#include <stdio.h>
int main(int argc, char **argv)
{
printf("%p\n", *argv);
printf("%p\n", argv);
printf("%p\n", &argv[0]);
return 0;
}
以上のプログラムを実行したときに最初と後二つのprintfの結果が違うのはなぜでしょうか?
0789デフォルトの名無しさん
2005/09/13(火) 22:32:38*argvは1つ間接参照している。argv[0]と同じ。
argvと&argv[0]は同じことで、間接参照を全くしていない。
0790デフォルトの名無しさん
2005/09/13(火) 22:32:440791デフォルトの名無しさん
2005/09/13(火) 22:43:349 以降のファイルの内容を全部メモリに読み込んで、
0 以降を全部書き込みなおすか、
別ファイルに 0 込みで書き込んでリネーム。
後者を勧める。
0792デフォルトの名無しさん
2005/09/13(火) 22:48:53printf("%p\n", *argv)はポインタargvに代入されている値(アドレス値)を出力しているということでしょうか?
0793デフォルトの名無しさん
2005/09/13(火) 22:59:56その文章は正しいが、お前が理解しているようには思えない。
ついでにargvはchar **だからprintf("%s", *argv);は有効。
0794デフォルトの名無しさん
2005/09/13(火) 23:01:41*argvって書いてあるんだから *argv に代入されている値に決まってるじゃん
0795デフォルトの名無しさん
2005/09/13(火) 23:29:542つの整数値(整数Aと整数B)を読み込んで、前者の値が後者の何%であるかを表示する
というプログラムを作成していました。
しかし、どうやっても答えには整数Aの値が出てきてしまいます。
以下が作成したプログラムです。
#include<stdio.h>
int main(void)
{
int na, nb;
puts("二つの整数を入力してください。");
printf("整数A:"); scanf("%d" , &na);
printf("整数B:"); scanf("%d" , &nb);
printf("Aの値はBの値の%dです。\n", na % nb);
return (0);
}
本当に分からないので、どなたかよろしくお願いします。
0796デフォルトの名無しさん
2005/09/13(火) 23:32:36○100*na/nb
0797デフォルトの名無しさん
2005/09/13(火) 23:34:22あぁっ!本当だ!!
こんなくだらない質問に答えてくれてありがとうございましたm(_ _)m
助かりました。
0798デフォルトの名無しさん
2005/09/13(火) 23:39:270799デフォルトの名無しさん
2005/09/13(火) 23:50:02後半は参照されたポインタの持つアドレス値を先頭とする文字列が出てくるということですね。
>>794
理解不足のためくだらない質問をしてすいません。
もうひとつ質問させてください。
>>792のソースをコンパイルしたプログラムをa.exeとして、
コマンドラインで
>a.exe b c
と実行したとき、"a.exe","b","c"はそれぞれ文字列としてメモリのどこかの配置されるわけですが、
このとき上の3つの文字列の先頭文字のアドレスは、あるchar型ポインタの配列に代入されると説明されていました。
この配列名は何なんでしょうか?
0800デフォルトの名無しさん
2005/09/13(火) 23:57:04argv
0801デフォルトの名無しさん
2005/09/14(水) 00:05:20argvはchar型ポインタへのポインタとして宣言されていたのに、
なぜargvが配列名としてつかえるんでしょうか?
0802デフォルトの名無しさん
2005/09/14(水) 00:06:170803デフォルトの名無しさん
2005/09/14(水) 00:09:280804デフォルトの名無しさん
2005/09/14(水) 00:09:390022ef24 argv = 0x611576b0
|
└→ 611576b0 argv[0] = 0x611576f8 ――┐
611576b4 argv[1] = 0x61157710 ―┐|
611576b8 argv[2] = 0x61157728 ┐||
|||
||└→ 611576f8 argv[0][0] = 'a'
|| 611576f9 argv[0][1] = '.'
|| 611576fa argv[0][2] = 'e'
|| 611576fb argv[0][3] = 'x'
|| 611576fc argv[0][4] = 'e'
|| 611576fd argv[0][5] = '\0'
||
|└―→ 61157710 argv[1][0] = 'b'
| 61157710 argv[1][1] = '\0'
|
└――→ 61157728 argv[2][0] = 'c'
61157728 argv[2][1] = '\0'
0805デフォルトの名無しさん
2005/09/14(水) 00:13:030806デフォルトの名無しさん
2005/09/14(水) 00:16:080807デフォルトの名無しさん
2005/09/14(水) 00:42:13の2式で何とかわかってきました。
>>804
>>806
図式化までしてくださって、ありがとうございます。
くどいようですが、
a.exe a b
と実行された時点で、a.exe、a、bにがメモリに配置され、
その先頭の文字のアドレス('a'、'b'、'c'のアドレス)が
argv[0]、argv[1]、argv[2]に代入されるということでよろしいでしょうか?
0808デフォルトの名無しさん
2005/09/14(水) 00:45:30int main( int a, char *b[])
とかでもOK
0809デフォルトの名無しさん
2005/09/14(水) 00:49:04そういうこと。
0810デフォルトの名無しさん
2005/09/14(水) 01:02:09夜遅くまでお付き合いくださってありがとうございました。
0811デフォルトの名無しさん
2005/09/14(水) 11:39:30VC6の bitset ってバグ有り?
bitset<32> bsVal(0xFFFFFFFF);
cout << bsVal[0]; // 結果:12FEC4
cout << bsVal.test(0); // 結果:1
Borland C++ 5.5.1 では、問題なし
0813デフォルトの名無しさん
2005/09/14(水) 12:31:030814デフォルトの名無しさん
2005/09/14(水) 12:37:110815デフォルトの名無しさん
2005/09/14(水) 15:09:15> と実行された時点で、a.exe、a、bにがメモリに配置され、
> その先頭の文字のアドレス('a'、'b'、'c'のアドレス)が
> argv[0]、argv[1]、argv[2]に代入されるということでよろしいでしょうか?
うむ、そこら辺の処理はスタートアップルーチンがやってくれる。
0816初心者
2005/09/14(水) 17:48:17って読むときどこで区切ればいいんですか?
教えてください。
0817デフォルトの名無しさん
2005/09/14(水) 17:51:46くぎらない
0818デフォルトの名無しさん
2005/09/14(水) 18:02:280819デフォルトの名無しさん
2005/09/14(水) 18:03:190820C勉強中
2005/09/14(水) 18:11:16void ymd( int *y, int *m, int *d);
main ( ) {
int y, m, d;
printf("生年月日は?");
ymd(&y ,&m ,&d );
return 0;
}
void ymd( int *y, int *m, int *d) {
scanf( "%d", y);
scanf( "%d", m);
scanf("%d", d);
printf( "あなたの生まれた年月日は>%d %d %d",*y, *m, *d );
}
0821C勉強中
2005/09/14(水) 18:12:07どういうものなのでしょうか?詳しい方おしえてください
おねがいします。
ymbで変更されたら、mainでもその変更された値を使いたいから
0823デフォルトの名無しさん
2005/09/14(水) 18:31:44必要な言語って気軽にプログラム作れないからつまんない。
0825デフォルトの名無しさん
2005/09/14(水) 18:34:33簡単にコンパイルが通るようなコンパイラは恐くて使えない
0826デフォルトの名無しさん
2005/09/14(水) 18:49:39#include <stdio.h>
void ymd( int *y, int *m, int *d);
main ( ) {
int y, m, d;
printf("生年月日は?");
ymd(&y ,&m ,&d );
printf( "あなたの生まれた年月日は>%d %d %d",y, m, d );
return 0;
}
void ymd( int *y, int *m, int *d) {
scanf( "%d", y);
scanf( "%d", m);
scanf("%d", d);
}
こうなら多少意味があると思うけど...これは意味が無いような気がする
0827デフォルトの名無しさん
2005/09/14(水) 18:51:54#define MAX_ARRAY (10000000)
char array[MAX_ARRAY];
int main( void )
{
unsigned long long n, i;
/* 配列を初期化する */
for( i = 0; i < MAX_ARRAY; i++ )
array[i] = 0;
/* 配列をふるいにかける */
for( n = 2; n <= MAX_ARRAY; n++ ) {
if( array[n] == 0 ) {
for( i = 2; i * n < MAX_ARRAY; i++ )
array[i * n] = 1;
}
}
/* ふるいで残った数は素数である */
for( n = 2; n < MAX_ARRAY; n++ ) {
if( array[n] == 0 )
printf( "%qu\n", n );
}
}
エラトステネスのふるいのプログラムなんですけどアルゴリズムってどのような感じになるでしょうか?
0828デフォルトの名無しさん
2005/09/14(水) 19:01:560829デフォルトの名無しさん
2005/09/14(水) 19:12:18始まったのですが難しくてついていけません。
基礎を教えてもらえないでしょうか?
0830デフォルトの名無しさん
2005/09/14(水) 19:15:11>>1
>まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
~~~~~
ここは質問スレであって教室スレでも輪講スレでもない。
0831デフォルトの名無しさん
2005/09/14(水) 19:22:540832デフォルトの名無しさん
2005/09/14(水) 19:44:460833デフォルトの名無しさん
2005/09/14(水) 19:54:48ウホッ
0834デフォルトの名無しさん
2005/09/14(水) 20:55:03なんでウホッなんだよ。ここはヒギィッだろ。
0835デフォルトの名無しさん
2005/09/14(水) 21:09:59CHECK(case BadAlloc: case BadWindow:, "cannot set forecolor.");
というのがデバッグ時は
rc = XSetForeground(dsp, gc, fg);
switch (rc) {
case BadAlloc: case BadWindow:
fprintf(stderr, "%s(%d):%s\n", __FILE__, __LINE__, "cannot set forecolor.");
} /* fprintf のあとに goto つきのやつもあり */
リリース時は
XSetForeground(dsp, gc, fg);
とだけ展開されるようにして
GETRC(fd != -1 && close(fd) == -1);
CHECK(case 1:, "cannot close file.");
とか延々書いてるようなスタイルをあみだしたんですが、これってうざいですか?
0836デフォルトの名無しさん
2005/09/14(水) 21:42:470837デフォルトの名無しさん
2005/09/14(水) 21:45:30別にいいんじゃないかと思うけど、case hoge: はちょっと美しくないかな。
配列を渡すようにして、for で判定するとか。
0838デフォルトの名無しさん
2005/09/14(水) 22:07:53すいません。
自分でHP探して勉強します・・・
0839デフォルトの名無しさん
2005/09/14(水) 22:47:22あっちでもスレ違いだっつっただろうが。間抜け。
0840デフォルトの名無しさん
2005/09/14(水) 22:51:33代入する変数XXごとに、GETXX マクロを作る必要があるのか?
0841デフォルトの名無しさん
2005/09/14(水) 22:53:12上手なデバッグプリント文とかデバッグマクロとかおせーて。
0842デフォルトの名無しさん
2005/09/14(水) 23:18:29gdb
0843デフォルトの名無しさん
2005/09/14(水) 23:28:38グッジョブ?
0844デフォルトの名無しさん
2005/09/15(木) 00:00:56gbx
0845デフォルトの名無しさん
2005/09/15(木) 00:31:20char hoge[HOGE];
hogeと&hoge[0]が等しいのはわかるが
memset( &hoge, 0, sizeof(hoge) );
と書いた場合の挙動(hogeの中身)はどうなります?
コンパイラ gcc3.2くらいかな
0846デフォルトの名無しさん
2005/09/15(木) 00:35:07{0,0,0,0,0}
0847デフォルトの名無しさん
2005/09/15(木) 00:35:260848デフォルトの名無しさん
2005/09/15(木) 00:40:03アホか。
0849デフォルトの名無しさん
2005/09/15(木) 00:43:28アドレスは等しいんだけど、
その2つは厳密には等しくない。
hoge は配列だけど、&hoge[0] は1要素を指すポインタになる。
即ち、hoge の型は char[HOGE] であり、&hoge[0] の型は char* である。
この違いは殆どのところで効いてこないけど、
影響のある場合が2つある。
1つは、sizeof の挙動。
sizeof hoge は配列全体のサイズになり、
sizeof &hoge[0] はポインタのサイズになる。
もう1つは、& の挙動。
&hoge は配列へのポインタ(型は char(*)[HOGE])になり、
&&hoge[0] は右辺値のアドレスを取ろうとしてるのでコンパイルエラーになる。
&hoge と hoge は、型が若干違うだけで、メモリ上の位置としては同じ場所を指す。
従って、memser( &hoge, 0, sizeof(hoge) ); は望むとおりの挙動を示す。
0850デフォルトの名無しさん
2005/09/15(木) 00:49:18他にも影響ある点があるがキニシナイ!
今回の話では、この2点が分かってれば十分だ。
0851デフォルトの名無しさん
2005/09/15(木) 01:10:33前スレ655をちょこっと改造。
↓みたいなのは良く使ってる。
-- hoge.h ---------------------------
#define _DEBUG_FLAG
#ifdef _DEBUG_FLAG
extern void _DebugLog( const char *format, ...);
#define DBG_LOG(...) _DebugLog(__VA_ARGS__)
#else
#define DBG_LOG(...) ((void)0)
#endif //_DEBUG_FLAG
-- hoge.c ---------------------------
#include "hoge.h"
#ifdef _DEBUG_FLAG
#include <stdio.h>
#include <stdarg.h>
void _DebugLog( const char *format, ...)
{
va_list args;
va_start(args, format);
vfprintf(stderr, format, args);
va_end(args);
}
#endif //_DEBUG_FLAG
0852デフォルトの名無しさん
2005/09/15(木) 01:34:32#define DEBUG if(0)
#define RELEASE if(1)
#else
#define DEBUG if(1)
#define RELEASE if(0)
#endif
DEBUG {
int i;
for(i = 0; i < hoge; i++) {
printf("%d : %d\n", i, foo[i]);
}
}
とか。
0853デフォルトの名無しさん
2005/09/15(木) 03:29:380854デフォルトの名無しさん
2005/09/15(木) 03:31:480855デフォルトの名無しさん
2005/09/15(木) 03:33:370856デフォルトの名無しさん
2005/09/15(木) 04:38:56おにぎりとおむすびの違いって何ですか?
0857デフォルトの名無しさん
2005/09/15(木) 04:45:390858デフォルトの名無しさん
2005/09/15(木) 04:50:150859デフォルトの名無しさん
2005/09/15(木) 04:52:310860デフォルトの名無しさん
2005/09/15(木) 04:54:130861デフォルトの名無しさん
2005/09/15(木) 04:55:490862デフォルトの名無しさん
2005/09/15(木) 06:20:12おにぎり → おむすび
おむすび → おにぎり
て無限ループになってたな
0863デフォルトの名無しさん
2005/09/15(木) 06:25:520864デフォルトの名無しさん
2005/09/15(木) 06:38:17おにぎりが女性語とのこと。
0865デフォルトの名無しさん
2005/09/15(木) 06:41:230866デフォルトの名無しさん
2005/09/15(木) 06:44:48if(TraceLevel() >= TRACE_LEVEL_ERROR) TraceWriteLine("エラーが出たぞ");
みたいな感じにしてTraceLevel()の値はINIファイルから呼び出して
同一バイナリでログ吐いたり吐かなかったりできるようにしてる。
JavaのLog4jとか.NETのTraceあたりを参考にしてみたら。
0867デフォルトの名無しさん
2005/09/15(木) 09:34:17まぁ、どこのスレがスレ違いじゃないか、間抜けには誘導すらできないだろうけどな
0868デフォルトの名無しさん
2005/09/15(木) 09:37:570869デフォルトの名無しさん
2005/09/15(木) 11:55:52int a[34][4] = {
{ 1,1,1,1},
{ 2,2,2,2},
//以下略
};
初期化子が多すぎるとエラーが出るのですが,こういう場合どう直せばよいでしょうか?
0870デフォルトの名無しさん
2005/09/15(木) 11:57:300871デフォルトの名無しさん
2005/09/15(木) 11:59:05とりあえずintの前にstaticつけてみれば
0872デフォルトの名無しさん
2005/09/15(木) 12:02:13>エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
0873デフォルトの名無しさん
2005/09/15(木) 12:02:29素早いレス、ありがとうございます
その案でちょっとやってみたいと思います。
0874デフォルトの名無しさん
2005/09/15(木) 12:22:25その案は意味のある解決策ではない。
ちゃんとエラーメッセージを理解できないかぎり何も無駄。
なので >>1 を理解して、勉強しなおすか、初心者スレにでも逝け。
(正確にエラーメッセージを引用する知恵ぐらいつければいいのに。
C言語以前にプログラムの考え方も不足してるのだろうけど…)
(本当に「初期化子が多すぎる」エラーなら、初期化子を適切な数にするか、
配列を必要な数の初期化子を格納できる大きさにするかだろうけど)
>>870,871
あほが無駄なレスつけるなよ…
0875デフォルトの名無しさん
2005/09/15(木) 12:40:05ファイルから読み込むようにすると、
バッファオーバーランして危険だね。
0876デフォルトの名無しさん
2005/09/15(木) 13:00:33int a[100][4] = {
{ 1,1,1,1},
{ 2,2,2,2},
//以下略
};
これに直して通ったら、[34]があってない
0877デフォルトの名無しさん
2005/09/15(木) 13:04:02int a[][4] = {
{ 1,1,1,1},
{ 2,2,2,2},
//以下略
};
[34]は、省略できる
0878デフォルトの名無しさん
2005/09/15(木) 13:05:00俺もそれ書こうと思ったんだが、
34 という数値に大きな意味があれば、
34 と書いておいた方が
サイズチェックしてくれるのでいいと思った。
0879デフォルトの名無しさん
2005/09/15(木) 13:06:560880デフォルトの名無しさん
2005/09/15(木) 13:12:250881デフォルトの名無しさん
2005/09/15(木) 13:17:19どうすればいいのでしょうか?
char str;
str = 'a';
char* str_p;
str_p = str;//×
0882デフォルトの名無しさん
2005/09/15(木) 13:19:45頭悪い?
0883デフォルトの名無しさん
2005/09/15(木) 13:24:34何をしたいのか知らんが、初心者質問スレに行くか日本語の勉強をしてくれ。
0884デフォルトの名無しさん
2005/09/15(木) 13:25:56とりあえず、入門書のポインタを嫁
0885デフォルトの名無しさん
2005/09/15(木) 13:30:520886デフォルトの名無しさん
2005/09/15(木) 13:32:19string str;
str = 'a';
char* str_p;
str_p = &str;
0887デフォルトの名無しさん
2005/09/15(木) 13:35:240888デフォルトの名無しさん
2005/09/15(木) 13:37:46まだポインタの理解が足りていないのでもう少し勉強してみます
0889デフォルトの名無しさん
2005/09/15(木) 14:15:52全然解決にならないんだが
0890デフォルトの名無しさん
2005/09/15(木) 14:53:360891デフォルトの名無しさん
2005/09/15(木) 15:08:06もっともらしく表面的な回答だけするなと。
喋りたきゃ初心者スレでしたり顔が答えて叩かれてろと。
0892デフォルトの名無しさん
2005/09/15(木) 15:10:410893デフォルトの名無しさん
2005/09/15(木) 15:15:02単なる嫌がらせのようなことをしてるだけ。
たまに天然も居るのかもしれんが。
0894デフォルトの名無しさん
2005/09/15(木) 15:21:480895デフォルトの名無しさん
2005/09/15(木) 15:24:03891は随分素直なんだな。
0896デフォルトの名無しさん
2005/09/15(木) 15:31:30よそで遊んでろ、と言われてるんだろうに、ずいぶん天然なんだな。
0897デフォルトの名無しさん
2005/09/15(木) 15:32:330898デフォルトの名無しさん
2005/09/15(木) 15:34:190899デフォルトの名無しさん
2005/09/15(木) 15:35:13限られたヒントの中から問題を推測して正解を導くのは
結構面白いぞ
0900デフォルトの名無しさん
2005/09/15(木) 15:38:280901デフォルトの名無しさん
2005/09/15(木) 16:09:160902デフォルトの名無しさん
2005/09/15(木) 16:11:030903デフォルトの名無しさん
2005/09/15(木) 16:11:370904デフォルトの名無しさん
2005/09/15(木) 16:15:41VIP ででも遊んでろ。
0905デフォルトの名無しさん
2005/09/15(木) 16:35:59そんなこと言ってると奴らが巣から出てくるぞ・・・w
0906デフォルトの名無しさん
2005/09/15(木) 16:36:11文字列にする方法も教えてください
0907デフォルトの名無しさん
2005/09/15(木) 16:39:310908デフォルトの名無しさん
2005/09/15(木) 16:42:02お前こんなところで質問してる場合じゃないぞ。
ともかく先に本一冊通して嫁。
0909デフォルトの名無しさん
2005/09/15(木) 16:44:33色々テストプログラム組んで、仕様を体で理解しないと。
0910デフォルトの名無しさん
2005/09/15(木) 16:47:44しょうがないなぁ
0911デフォルトの名無しさん
2005/09/15(木) 16:49:010912C勉強中
2005/09/15(木) 17:08:22main ( )
{
char *str[ ] = {"hogebaka"};
printf("%s\n",str);
printf("%c", *(str+4));
return 0;
}
0913C勉強中
2005/09/15(木) 17:09:16しまいました。どこがおかしいんでしょうか?おしえてください。
おねがいします。
0914デフォルトの名無しさん
2005/09/15(木) 17:10:17ァ ∧_∧ ァ,、
,、'` ( ´∀`) ,、'`
'` ( ⊃ ⊂) '`
0915デフォルトの名無しさん
2005/09/15(木) 17:11:47char str[ ] = {"hogebaka"};
0916デフォルトの名無しさん
2005/09/15(木) 17:14:13>>562
0917デフォルトの名無しさん
2005/09/15(木) 17:49:23それとも、たまたま同じ名前の別人がたまたま同じ質問をしたのか
0918デフォルトの名無しさん
2005/09/15(木) 17:54:100919デフォルトの名無しさん
2005/09/15(木) 17:54:42C言語は人間の思考との距離感が
良いんじゃないでしょうかねぇ?
すぐ目的に達しないところというか
一旦マシーンよりに思考を変換しないと
上手なプログラムが作れないところが
魅力だと考えますが。
0920デフォルトの名無しさん
2005/09/15(木) 18:10:15つ http://pc8.2ch.net/test/read.cgi/tech/1123587908/
0921デフォルトの名無しさん
2005/09/15(木) 18:24:04この手の質問スレは見ないほうがいいぞw
0922デフォルトの名無しさん
2005/09/15(木) 18:51:32こう書くヤツむかつく。
char str[] = {"HogeBar"};
こう書くべき。
char *str = "HogeBar";
これならいいけどね。
0923デフォルトの名無しさん
2005/09/15(木) 18:54:11ツッコむ気も失せるわ、この田吾作がァ!
0924デフォルトの名無しさん
2005/09/15(木) 19:21:55プログラミング言語C(通称 K&R)
って本はC言語初心者でも大丈夫なのか?
0925デフォルトの名無しさん
2005/09/15(木) 19:22:22while(1) {} // 無限ループをこう書く奴むかつく
for(;;) {} // これならいいけどね
0926デフォルトの名無しさん
2005/09/15(木) 19:25:08一人でやってろ。
0927デフォルトの名無しさん
2005/09/15(木) 19:26:10多分、こっちで聞いた方がいいと思う。
推薦図書/必読書のためのスレッド PART25
ttp://pc8.2ch.net/test/read.cgi/tech/1119115838/
0928デフォルトの名無しさん
2005/09/15(木) 19:35:49ちょっと試そうとしてもさっぱり分からない、というケースは多いだろう。
中身はしっかり書いてあるけど、まったくの初心者に理解を
求めるのはちょっと酷かもしれない。もっと初心者向きのやさしい
本で勉強してCをマスターしてから読み直すと感銘を受けるだろう。
つまりは、そういう本であるということだ。これからCを続けるつもりなら
買っておいても損はないと思うぞ。今は分からなくても読みこなせるような
力が伴って来たらK&Rから多くのことを学べるだろう。
0929デフォルトの名無しさん
2005/09/15(木) 19:36:330930デフォルトの名無しさん
2005/09/15(木) 19:40:28>プログラミング言語C(通称 K&R)
>って本は
良いよね。ホント。
0931デフォルトの名無しさん
2005/09/15(木) 19:43:17>Cを続けるつもりなら
C以外の言語をやる場合でも、だよね?
0932デフォルトの名無しさん
2005/09/15(木) 19:49:110933デフォルトの名無しさん
2005/09/15(木) 19:59:05と
し
の
強
は
お
っ
0934デフォルトの名無しさん
2005/09/15(木) 20:06:020935デフォルトの名無しさん
2005/09/15(木) 20:08:200936デフォルトの名無しさん
2005/09/15(木) 20:09:240937デフォルトの名無しさん
2005/09/15(木) 20:22:000938デフォルトの名無しさん
2005/09/15(木) 20:39:270939デフォルトの名無しさん
2005/09/15(木) 20:39:530940デフォルトの名無しさん
2005/09/15(木) 20:41:58おまえには、わかんめー
0941デフォルトの名無しさん
2005/09/15(木) 20:50:020942デフォルトの名無しさん
2005/09/15(木) 21:48:14ァ ∧_∧ ァ,、
,、'` ( ´∀`) ,、'`
'` ( ⊃ ⊂) '`
0943デフォルトの名無しさん
2005/09/15(木) 22:19:450944デフォルトの名無しさん
2005/09/15(木) 22:54:26ttp://homepage3.nifty.com/mmgames/c_guide/index.html
先ほどこのサイトを読み終えました
次のステップに進みたいので、いいサイトを教えて頂けませんか
0945デフォルトの名無しさん
2005/09/15(木) 23:26:45次の目標を見つける事が次へのステップだ
0946デフォルトの名無しさん
2005/09/15(木) 23:55:030947デフォルトの名無しさん
2005/09/16(金) 00:14:10例えば"100%"という文字列を読み込んでそのまま書き込むと
なぜか'%'だけが書き込まれないという問題が発生しています。
'%%'と続けて書くと'%'が1文字書き込まれることが分かったので、
しかたなくその変換も組み込んだのですが、
これはそういう仕様になっているのでしょうか?
読み込みはfgets関数、書き込みはfprintf関数を使用しています。
0948デフォルトの名無しさん
2005/09/16(金) 00:14:370949947
2005/09/16(金) 00:16:03fprintf( file, str );
としてました・・・。
fprintf( file, "%s", str );
で無事に書き込めました。orz
0950デフォルトの名無しさん
2005/09/16(金) 00:24:020951デフォルトの名無しさん
2005/09/16(金) 00:33:38はっきり言って無駄なので、普通はそんなことしない。
0952デフォルトの名無しさん
2005/09/16(金) 00:41:04デバッガが無いので、教えて下さい。
unsigned long と、unsinged long longの変数は、バイト空間では
どのように格納されるのでしょうか。
なお、PCはIntel系CPU、OSはLinuxの場合です。
以上、よろしくお願いします。
0953デフォルトの名無しさん
2005/09/16(金) 01:06:24最初のバイトは256^0の位
次のバイトは256^1の位
その次のバイトは256^2の位
・・・
ってな具合。
0954デフォルトの名無しさん
2005/09/16(金) 01:09:53今やっている仕事で、unsigned long longの場合は、バイト順入れ替えを
行わなくてはいけないといわれていたので、何か特別なフォーマットなのかと
思ってしまっていました。なにか他の理由があるのですね。
どうも有難うございます。
0955デフォルトの名無しさん
2005/09/16(金) 01:25:05>行わなくてはいけないといわれていたので、何か特別なフォーマットなのかと
>思ってしまっていました。
こういう情報を先に出さないのは質問下手ですよ。
0956952
2005/09/16(金) 01:39:11それは、どうもすいませんでした。
0957デフォルトの名無しさん
2005/09/16(金) 05:21:020958デフォルトの名無しさん
2005/09/16(金) 06:39:39バイト順を入れ換える必要があるということは通信が絡んでいるんじゃないか?
ネットワークとか、とにかく外にバイナリデータを出す場合は何故かビッグ
エンディアンが標準になっている。(ネットワークバイトオーダーとも言う)。
0959デフォルトの名無しさん
2005/09/16(金) 07:00:39なかなかいい方法が浮かばないんで、何かいい方法があれば
教えてください。
二次元配列のデータ
dat[i][j]
という200x200くらいのデータ(モノクロ画像データ)があります。
そのデータに対して、i,j面でスムージングをして、new_dat[i][j]
を作りたいのですが、どうするのが簡単で良い方法でしょうか?
簡単にスムージング(もどき)が出来るアルゴリズムをご存知の方が
居られれば教えてください。
0960デフォルトの名無しさん
2005/09/16(金) 07:30:35スレタイ嫁
0961デフォルトの名無しさん
2005/09/16(金) 09:24:01<集大成>アルゴリズム大辞典
http://pc8.2ch.net/test/read.cgi/tech/1086272325/
0962デフォルトの名無しさん
2005/09/16(金) 09:25:290963デフォルトの名無しさん
2005/09/16(金) 09:28:55スレ違いとか下らん事言ってスレ消費してる暇あったら教えてやれっつーの
0964デフォルトの名無しさん
2005/09/16(金) 09:32:060965デフォルトの名無しさん
2005/09/16(金) 10:50:57俺?もちろんわからないさアハハハ・・・orz
0966デフォルトの名無しさん
2005/09/16(金) 11:37:50ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら
0967デフォルトの名無しさん
2005/09/16(金) 12:11:200968デフォルトの名無しさん
2005/09/16(金) 12:12:570969デフォルトの名無しさん
2005/09/16(金) 13:47:48一つ前と自分と一つ後ろとで平均を取って、自分をその平均にする
それを全部についてやって、別バッファに書き出す
こんどはそのバッファに対して
0970デフォルトの名無しさん
2005/09/16(金) 13:48:31そうすると、画像が全体的にぼやけるので
0971デフォルトの名無しさん
2005/09/16(金) 14:35:36ここの http://oku.edu.mie-u.ac.jp/~okumura/algo/
spline.c スプライン補間
0972デフォルトの名無しさん
2005/09/16(金) 14:54:51http://pc8.2ch.net/test/read.cgi/tech/1086272325/で答えたら良いのに。
0973デフォルトの名無しさん
2005/09/16(金) 17:19:32複写するプログラムを書け」をやって、一応問題なく動くプログラムはできたんですが
これだと空白以外の文字のときにputchar()とflag戻しがセットになってて冗長に思えます。
ちょこっと改造してもっとスマートにできます?
#include <stdio.h>
int main(void)
{
int c, flag_space;
flag_space = 0;
while((c = getchar()) != EOF){
if(c == ' '){
if(flag_space == 0){
flag_space = 1;
putchar(c);
}
}else{
putchar(c);
flag_space = 0;
}
}
return 0;
}
0974デフォルトの名無しさん
2005/09/16(金) 17:37:15calloc,malloc,reallocと三つありますよね?
全ての機能(新規、追加)をカバーし、おまけにfreeまで
出来るreallocを皆さん、あまり使わないようですが、
何故なんでしょうか?
0975デフォルトの名無しさん
2005/09/16(金) 17:41:51自分だったら前の入力値を保持する形で書く。こんな感じ
#include <stdio.h>
int main(void)
{
int c, prev = EOF;
while((c = getchar()) != EOF){
if(c != prev || c != ' ') putchar(c);
prev = c;
}
return 0;
}
0976デフォルトの名無しさん
2005/09/16(金) 17:42:29むしろ逆じゃないのか?
わざわざ第一引数0(null)設定してrealloc呼び出すならmallocでいいじゃん。
/* メモリ確保 */
char* p;
p = (char *)realloc(0, size);
あと文脈的にも微妙だしな。
0977デフォルトの名無しさん
2005/09/16(金) 17:47:49日本語でも同じ単語が文脈によって異なる意味になったら混乱するだろ?
プログラムでも同じ。同じ関数がパラメータによって機能が変化するのは嫌。
構造化設計でもそれはあまり好ましくない設計
0978デフォルトの名無しさん
2005/09/16(金) 17:48:11const書くのが面倒だといって書かないのと似たようなもんだな。
0979ビタミンC
2005/09/16(金) 17:56:22struct {
char *name;
int age;
}naru , sinobu;
int main() {
naru.name = "成瀬川なる";
naru.age = 17;
sinobu.name = "前原しのぶ";
sinobu.age = 13;
printf("名前\t\t年齢\n");
printf("%s\t%d\n" , naru.name , naru.age);
printf("%s\t%d\n" , sinobu.name , sinobu.age);
return 0;
}
0980ビタミンC
2005/09/16(金) 17:57:25わからないのでおしえてください おねがいします
構造体のところです
0981デフォルトの名無しさん
2005/09/16(金) 17:58:210982デフォルトの名無しさん
2005/09/16(金) 17:58:52余計なメモリを使わなくてすむし、
配列の要素の数をいちいち考慮してなくていいからじゃない?
自信はない。
0983デフォルトの名無しさん
2005/09/16(金) 18:00:37構造体そのものはポインタのサイズ分しか確保しない。
ポインタに対して初期化が行われたら文字列テーブルを作成する。
0985篠
2005/09/16(金) 21:26:13文字列もそうでありまするが、関数や高速化に使えるのです。
ポインタのサイズは軽いので、関数の引数が大きい場合にアドレスを渡し、
更にポインタを駆使して処理を施すことにより、メモリ節約・高速化と
正にウハウハでありましょう。関数の引数にアドレスを渡さないときは、
これは実体がいちいちそのままコピーされてしまうのです。
>>982
>配列の要素の数をいちいち考慮してなくていいからじゃない?
それじゃ、*(array+i) のiをどうするのさ?
要素数は配列の実体とsizeofで調べられるから(調べるよろし)
アドレスと要素数を関数に渡すよろし。
0986デフォルトの名無しさん
2005/09/16(金) 21:31:330987デフォルトの名無しさん
2005/09/16(金) 22:04:22元々の質問にも無いことをうだうだと…
0988デフォルトの名無しさん
2005/09/16(金) 22:06:180989デフォルトの名無しさん
2005/09/16(金) 22:10:07文字の配列はその要素数をインターフェースにしたくないから文字列にはターミネーター(nulコード)が存在している
と思っていましたが。
0990デフォルトの名無しさん
2005/09/16(金) 22:15:190991デフォルトの名無しさん
2005/09/16(金) 22:17:140992デフォルトの名無しさん
2005/09/16(金) 22:21:13そのメモリは何らかの形で確保しないとダメなのだよ。
それを構造体に配列として直接与えるなら、サイズをその時に決めないとダメだし、
動的に確保したりどっかに確保したものを利用したりといった場合には
ポインタを使うことになる。
0993デフォルトの名無しさん
2005/09/17(土) 00:27:29C言語なら俺に聞け! Part 114
http://pc8.2ch.net/test/read.cgi/tech/1126884418/
0994デフォルトの名無しさん
2005/09/17(土) 00:30:520995デフォルトの名無しさん
2005/09/17(土) 01:46:420996デフォルトの名無しさん
2005/09/17(土) 01:49:060997デフォルトの名無しさん
2005/09/17(土) 01:55:490998デフォルトの名無しさん
2005/09/17(土) 03:37:230999デフォルトの名無しさん
2005/09/17(土) 03:42:381000デフォルトの名無しさん
2005/09/17(土) 03:43:4410011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。