トップページ⇒tech
1001コメント268KB

C言語なら俺に聞け! Part 113

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2005/08/27(土) 18:54:38
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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:40
C言語で画像や音楽や映像を出すにはどうすればいいですか?
0004デフォルトの名無しさん2005/08/27(土) 19:30:13
ネタなら面白い事書け
0005デフォルトの名無しさん2005/08/27(土) 19:33:01
白馬 白熊 白兎
0006デフォルトの名無しさん2005/08/27(土) 19:36:12
>>3
標準では出来ない。環境依存の方法を使うことになる。
では次の方〜
0007デフォルトの名無しさん2005/08/27(土) 19:38:50
 main()
 {
 int _a1;
   printf("%d"_a1)
   return 0;
 }

>>3
とりあえずこれをコンパイルしてみろ。
0008デフォルトの名無しさん2005/08/27(土) 19:40:01
>>7
コンパイルしましたが実行ファイルができただけでつ
0009デフォルトの名無しさん2005/08/27(土) 19:41:38
>>8
それを実行した結果がお前の人生だ。分かったな。
0010デフォルトの名無しさん2005/08/27(土) 19:57:01
Cを始めたいのですがPCがネット出来る環境にありません
明解C言語と言うのが良いらしいんですが、これにC言語及びコンパイラ等付属しているんですか?
0011デフォルトの名無しさん2005/08/27(土) 20:01:37
>>10
ふつう、OSにコンパイラがあらかじめ入っている。
0012デフォルトの名無しさん2005/08/27(土) 20:04:55
どこのOSだよ
0013デフォルトの名無しさん2005/08/27(土) 20:07:22
ふつうのOSですよ
0014デフォルトの名無しさん2005/08/27(土) 20:08:06
>>10
Linuxインストールすれば開発環境一式そろう。
Fedora Core でも、Debian でも、本の付録で着いてくるからそれでOK。
0015デフォルトの名無しさん2005/08/27(土) 20:13:35
ふつうの初心者はふつうのOSはWindowsだと思っているのがふつうなわけで
いやむしろOSってなんですかてきなやつもふつうにいるわけで
0016デフォルトの名無しさん2005/08/27(土) 20:14:07
>>14
Turbo・・・
0017デフォルトの名無しさん2005/08/27(土) 20:14:23
それはあなたの思い込みですね
0018デフォルトの名無しさんNGNG
CDから起動できるLinuxなら、インストールしなくても使えるしね。
0019デフォルトの名無しさん2005/08/27(土) 20:22:07
volatileとasmのコードが解読できません。
0020デフォルトの名無しさん2005/08/27(土) 20:33:38
その人に、パソコン=Windowsの等式が成り立っている以上
OSって何?でしょうね。
0021デフォルトの名無しさん2005/08/27(土) 20:36:41
うちの会社新規プロジェクトはVB.NETだから
Cしか使えない奴全員解雇だってさ。
もう終わったな、C
0022デフォルトの名無しさん2005/08/27(土) 20:39:14
終わってんのはオマエの会社の方じゃねえの?w
0023ケンカする人嫌いです・・・あ、いや・・・やめてほしいな2005/08/27(土) 20:42:20
VIPから来てあげたわよ

いまVIPが、世界が認めてない東海って名前を、
日本海に直してもらう作戦を行ってるのは、当然知ってるわよね?

VIPPERの力で、Googleが東海の単独表記を取り下げたのは有名ね。

でも、いまVIPは大きな問題を抱えてる。
ITスキル、特に鯖関係のものが、圧倒的に足りないのよ。

それでなんだけど・・・んちょっと、、、VIPに協力してほしいのよね。
べ、べつにあんただったから頼みに来たわけじゃないわよ!勘違いしないでよね!

でも、あなたの力があれば、日本海を取り戻すのが近くなるのは・・・確かだわ。
もし・・・協力してくれるんなら、このスレに書き込んでほしい。
http://ex11.2ch.net/test/read.cgi/news4vip/1125074145/

・・・・やっぱり、あなたに協力して・・・ほしいから。
0024デフォルトの名無しさん2005/08/27(土) 20:42:26
VB.NETってそれ..........
0025デフォルトの名無しさんNGNG
>>21
まあ、言語一つしかできないようなのはクビでいいだろな。
0026デフォルトの名無しさん2005/08/27(土) 21:16:53
>>21
ワロス
0027デフォルトの名無しさん2005/08/27(土) 21:23:31
猫のページを参考に
BCCでlibファイルを作りたいのですが、"'MYLIB' not found in library"と吐いてしまいます。
一応"MAKE End!!"とは出てるので一連の動作は成功してるようなのですが・・

使ってるIDEはBCC Developerでプロジェクトの設定はライブラリ(TLIB使用)にチェックが入っています。
0028デフォルトの名無しさん2005/08/27(土) 21:25:37
>> http://pc8.2ch.net/test/read.cgi/tech/1123432321/979
簡単な実装としては、前の百分率を保存しといて、
前と同じなら表示しなければいい。
0029デフォルトの名無しさん2005/08/27(土) 22:21:40
>>28
http://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:41
何だそれ、__func__ というマクロがあるのか。
0032デフォルトの名無しさん2005/08/28(日) 00:07:42
printf(
    "%s IN\n"
    ,__func__); 

printf(
    "%s OUT\n"
    ,__func__); 
0033デフォルトの名無しさん2005/08/28(日) 00:08:53
初心者で悪いんだが、++aとかa++とか意味あるのか?普通に-で演算しても同じ事じゃないの?
0034デフォルトの名無しさん2005/08/28(日) 00:11:00
-だと減るじゃん
0035デフォルトの名無しさん2005/08/28(日) 00:17:17
printf の %f ってどんな時使うんですか?
0036デフォルトの名無しさん2005/08/28(日) 00:18:07
>>33
プログラマのコーディング効率も上がるし、それに演算速度を上げられる可能性があるから。
0037デフォルトの名無しさん2005/08/28(日) 00:18:50
>>35
ネタはもういいからね。
0038デフォルトの名無しさん2005/08/28(日) 00:23:18
>>31
#define ENTER_FUNC printf("%s IN\n", __func__);
#define LEAVE_FUNC printf("%s OUT\n", __func__);


って、いや、デバッガのコールスタックを利用すればいいと思う。
0039デフォルトの名無しさん2005/08/28(日) 00:27:34
他の高級言語を使ってたが、Cを学習してから毎日Cを手放せなくなった。
0040デフォルトの名無しさん2005/08/28(日) 00:31:08
__func__ て処理系で定義されているマクロなのかいな。
0041デフォルトの名無しさん2005/08/28(日) 00:35:28
そうだよ。
0042デフォルトの名無しさん2005/08/28(日) 00:36:22
そうか、そんなのがあるのか。
どんな処理系で使えるのかな。
0043デフォルトの名無しさん2005/08/28(日) 01:00:06
正確に言うとマクロじゃなくて識別子。
C99 で正式に C の仕様に導入された。
0044デフォルトの名無しさん2005/08/28(日) 01:53:19
__func__ ってbcc32だとエラーが出て
CYGWINだとコンパイルできたけど、表示されなかったぞ
0045デフォルトの名無しさん2005/08/28(日) 02:15:03
Cygwin の GCC で表示できるが?
何か間違えてないか?
もしくは、コンパイラがめっさ古いか。

あと、BCC はできんかもしれんね。
0046デフォルトの名無しさん2005/08/28(日) 02:50:44
VC++.NETでは円周率は定義されていないのでしょうか?
0047デフォルトの名無しさん2005/08/28(日) 02:53:16
>>45
できた
でもさっきは表示されなかったのは何故だろ
0048デフォルトの名無しさん2005/08/28(日) 03:03:06
今思ったんだけど
>>8って本当にそれコンパイルできた?
0049デフォルトの名無しさん2005/08/28(日) 03:27:25
>>46
.NET Frameworkでという意味ならSystem.Math.PIというフィールドがあるが、
このスレである以上managed C++ということも考えにくいから…
「C言語に標準で」、という意味ならば、提供されていない。
4 * atan(1.0)で求めよ。
0050デフォルトの名無しさん2005/08/28(日) 03:28:15
3.141592653589793 くらい覚えとけよ。
0051デフォルトの名無しさん2005/08/28(日) 04:07:32
一夜一夜に人見ごろなら・・・
0052デフォルトの名無しさん2005/08/28(日) 04:21:38
ひとよひとよにひーとーみーごろぉー♪
って歌のアニメがあったな。
子供の頃見てたけど、タイトル忘れた。
結構好きだったんだけどすぐに終わってしまったような記憶が…
不人気だったんだろか。
0053デフォルトの名無しさん2005/08/28(日) 04:26:30
人並みにおごれよ
0054デフォルトの名無しさん2005/08/28(日) 04:32:37
>>53
や
0055デフォルトの名無しさん2005/08/28(日) 04:57:01
>>52
こういうのって、英語圏の人達や、その他の言語の人達は、
どうやって記憶してるんだろうか・・・って思う

円周率16桁は、#define PI 3.141592653589793
を繰り返すうちに自然に数字で覚えてしまったが・・・
0056デフォルトの名無しさん2005/08/28(日) 04:57:35
>>55
ヒント:電話番号
0057デフォルトの名無しさん2005/08/28(日) 04:57:59
英語圏の人は授業で電卓つかうよ
0058デフォルトの名無しさん2005/08/28(日) 05:03:57
フランス語は数を勘定できない言葉ですから国際語として失格している
0059デフォルトの名無しさん2005/08/28(日) 05:11:01
>>55
ヒント: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
>>59
なるほど、すごいな
0061デフォルトの名無しさん2005/08/28(日) 05:42:01
フランスごは数数えるのが大変というけれど
日本語だって負けちゃいないぜ!

アラビア数字が輸入されるまではマジで大変だったよ
でも日本にも優れた数学者は山ほどいるわけで

言語的に数が数えやすいのと、数学が得意な人種というのは
実は 相関関係が無い
0062デフォルトの名無しさん2005/08/28(日) 06:03:21
>>61
あんた何歳?
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:03
池澤春菜が姫のコスプレして色々教えてくれたけどすっかり忘れた
0065デフォルトの名無しさん2005/08/28(日) 06:54:36
まあ60までは簡単だ。

フランス語の数体系
http://www.sf.airnet.ne.jp/~ts/language/number/frenchj.html
0066デフォルトの名無しさん2005/08/28(日) 06:56:09
フランス語も知ってるんだ。
ギリシャ生まれというのは聞いているが......。

と思って調べたら、フランス語会話に生徒役で出てたのな。
0067デフォルトの名無しさん2005/08/28(日) 08:12:53
トラックバック:http://etc3.2ch.net/test/read.cgi/qa/1125155354/
0068デフォルトの名無しさん2005/08/28(日) 10:01:27
時々他の高級言語のやつがその言語の話を割り込んでくるのは何でだろうな。
Pascalだったらまだ許容する。
0069デフォルトの名無しさん2005/08/28(日) 10:09:03
Ruby>>>>>>>>>>>>>>>>>>>>>C
0070デフォルトの名無しさん2005/08/28(日) 10:09:11
池澤春菜ってフランス人だったのか
0071デフォルトの名無しさん2005/08/28(日) 10:12:47
Perl>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Ruby
0072デフォルトの名無しさん2005/08/28(日) 10:17:22
そんな歴史の浅い変てこりんな高級言語を支持してどうするのかね
0073デフォルトの名無しさん2005/08/28(日) 10:20:18
pyhon >>>>>>>>>>>>>>>>>>
0074デフォルトの名無しさん2005/08/28(日) 10:30:23
実行と同時に音楽(mp3)を鳴らしたいのですが、
hMCI=MCIWndCreate(hWnd,hInst,NULL,"D:\\a.mp3");
を使用すると画面上に再生やらストップやらのマークなどが出て相応しくないのです。

またPlaySoundを使うと固まります・・・

誰かいい方法を教えてくださいです
0075デフォルトの名無しさん2005/08/28(日) 10:53:42
カレントディレクトリにソース(a.c)がある場合に
makefile を自動で作成するようなコマンドはある
のでしょうか?
0076デフォルトの名無しさん2005/08/28(日) 10:55:41
autoconf/automakeという糞ツールがあるけど手書きした方が16777216倍まし
0077デフォルトの名無しさん2005/08/28(日) 11:01:15
>>75
その前にmakeの関数は調べたか?
0078デフォルトの名無しさん2005/08/28(日) 11:10:11
wildcard 使った汎用 make ファイルを作っておけば、
同じの使いまわして随分いける。
個別設定は別にできるようにしとけばいい。
0079デフォルトの名無しさん2005/08/28(日) 11:23:50
Makefileってそこそこ汎用的に書くと結構な分量になるんだよな。
提供してる機能がしょぼすぎるんだよ。
(Antは単体でも使えるにしても)Javaに縛られてないMakefile++誰か作れ。
0080デフォルトの名無しさん2005/08/28(日) 11:27:11
>> 77 関数は特にないです。
printf()での”Hello Word "くらいのサンプルです。

>> 78 まずは汎用性のある makeファイルの入手が必要ですね。
0081デフォルトの名無しさん2005/08/28(日) 11:36:57
>>80
>まずは汎用性のある makeファイルの入手が必要ですね。
自分で作るという選択肢はないのかw
0082デフォルトの名無しさん2005/08/28(日) 11:45:44
>>81
もちろん、オリジナルで作成する選択はあると思います。
0083デフォルトの名無しさん2005/08/28(日) 11:47:57
make の仕様くらい目を通しといた方がいいよ。
0084デフォルトの名無しさんNGNG
>>55
英語圏じゃないけど、ピーターフランクルは、円周率は約3としか憶えてないって言ってたよ。
日本で「おおよそ3」が非難される、だいぶ前に。
0085デフォルトの名無しさん2005/08/28(日) 12:23:44
彼の生き方ではソレで良いのでしょう。
昔のやり方はすべての分野を教えて、そこから専門分野を取捨選択する方法。
専門外の使用頻度の低い知識が多数生まれる。

一方、今の頭の悪い教育方針は広く浅くを基本とする。
どの分野を取っても知識不足という頭の悪い状況になっている。
0086デフォルトの名無しさん2005/08/28(日) 12:33:10
何この糞な流れ
0087デフォルトの名無しさん2005/08/28(日) 13:12:59
>>80
そうじゃない。
makeには、ソースやディレクトリ指定を楽にするための組み込み関数が用意されている。
widcard や、patsubst といった関数を使てmakefileを書けば、いちいち対象ソース名を記述しなくても、
「あるディレクトリ内のある拡張子のファイル全部」といった指定を一行で記述することができる。
外部ツールに頼る前に、makeのマニュアルや、仕様書をよく読めちゅ−こと。
0088デフォルトの名無しさん2005/08/28(日) 13:15:21
×widcard
○wildcard
0089デフォルトの名無しさん2005/08/28(日) 13:18:36
makeスレ逝け
0090デフォルトの名無しさん2005/08/28(日) 14:31:26
>>85
数学ではπとしか使わないから、具体的な数値なんてどうでもいいのさ。
物理だと概算でいいから、またいい加減でいいんだが。
プログラムだと16桁は欲しい。
0091デフォルトの名無しさん2005/08/28(日) 16:22:20
>>90
π≒3 → 円は、ほぼ6角形として扱われる
float型しか使わなければ6桁でおk
0092デフォルトの名無しさん2005/08/28(日) 16:24:49
2,30桁くらいすぐ憶えられるだろ。

産医師、異国へ向こう、産後厄無く、身に宮代に虫さんざん闇に鳴く
3.141592653589793238462643383279
0093デフォルトの名無しさん2005/08/28(日) 16:25:24
「異国に」だった・・・。
0094デフォルトの名無しさん2005/08/28(日) 16:30:34
>>92
"身に宮代に"だと"323842"と書いてしまいそうだ。
0095デフォルトの名無しさん2005/08/28(日) 17:34:20
約3
Yes.
約3.14
Yes, I have.
約3.1416
Yes, I have a number.

単語の文字数が数値になる。
0096デフォルトの名無しさん2005/08/28(日) 18:28:41
0文字の処理は?
空白二個は読みづらいし、エクスクラメーションやカンマも使いづらい。

それに7文字以上の単語もそうそうない
0097962005/08/28(日) 18:30:53
7:someone/thought
8:language/
9:something/

ゴメン。考えてみると結構ありそうだね。
009895≠592005/08/28(日) 20:05:57
>>97
>>59

偶々0がないらしい。
0099デフォルトの名無しさん2005/08/28(日) 20:07:53
それがCとどういう関係があるんでしょうか?
初心者なのでわかりやすく教えてください。
0100デフォルトの名無しさん2005/08/28(日) 22:34:51
Cする
おっπ
という関係
0101デフォルトの名無しさん2005/08/29(月) 00:14:05
大事なのは桁数の大小ではなく有効桁数
0102デフォルトの名無しさん2005/08/29(月) 02:06:33
>>92
語呂合わせ何かなくても、その程度の桁数ならそのまま覚えられるじゃん。
世界記録の数万とかのは分からんが。

>>98
よく考えたら、初めて 0 が出てくるのって
小数点以下 32 桁目なんだな。
結構出てこないもんだな。

>>99
πは 16 桁(double の精度だとこれ以上は無意味)くらい覚えとけという話。
0103デフォルトの名無しさん2005/08/29(月) 06:59:47
いい加減うぜーよ市ね
0104デフォルトの名無しさん2005/08/29(月) 07:03:47
なら質問カモーン
0105デフォルトの名無しさん2005/08/29(月) 07:29:52
ここの連中レベル低くて質問する気が起きないんだよね。
答えてるのCかじり立ての学生ばっかでしょ。
0106デフォルトの名無しさん2005/08/29(月) 07:33:28
いまどき C なんて使わないしね。
0107デフォルトの名無しさん2005/08/29(月) 09:17:03
1. 質問したければすればいい。
2. 質問したくなければしなければいい。
3. 答えたいならば答えればいい。
4. 答えたくなければ答えなければいい。
5. 2と4に該当するなら無理に書き込まなくていい。
0108デフォルトの名無しさん2005/08/29(月) 09:36:52
新5. 2と4に該当するなら書き込まず黙ってどっかに行く。
0109デフォルトの名無しさん2005/08/29(月) 11:24:56
答えてるとみせかけて大抵茶化してる奴多いからな
0110デフォルトの名無しさん2005/08/29(月) 14:48:29
質問です。
srand()関数の発生系列の限界を知りたいんですけど
どうしたらわかりますか?
0111デフォルトの名無しさん2005/08/29(月) 15:14:34
>>110
質問には答えられないが、この辺が参考になるかも
ttp://www001.upp.so-net.ne.jp/isaku/rand.html
0112デフォルトの名無しさん2005/08/29(月) 15:15:17
たしかrand()自体が0からRAND_MAXまでの一様乱数を返すとしか定義されてないはず。
つまり実装はライブラリ毎に異なるんで自分で調べるしかない。
まぁ大抵は32bitの線形合同法だろうけど。
ちゅうか自分で実装した方がいいよ。
0113デフォルトの名無しさん2005/08/29(月) 15:26:48
MT使っとけ
01141102005/08/29(月) 15:58:09
僕が聞きたかったこととは違いますが質問に答えていただいてありがとうございます。
僕が聞きたかったことは
プログラムを実行するたびに異なる系列(seedを変える)で擬似乱数を
発生させ続けると同じ擬似乱数が出てくるようになる。そのループする
限界を知りたいんです。
文章がわかりにくかったらスイマセン。
0115デフォルトの名無しさん2005/08/29(月) 16:04:30
ここも人大杉が解除されているぅ♪
0116デフォルトの名無しさん2005/08/29(月) 16:09:29
>>114
自分の環境のドキュメントかソースを読め。
0117デフォルトの名無しさん2005/08/29(月) 16:19:02
普通は何入れても 2^32 だと思うがね。
粗悪なやつ(右シフトしてないやつ)は
% (2^n) すると周期が 2^(32-n) になるが。
0118デフォルトの名無しさん2005/08/29(月) 18:40:11
関数の仮引数で、int **argという*演算子が2つ付いたのを見ますが
これはポインタの配列を引数として受け取るということでしょうか?
いまいち、どういう場合に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
>>118
ポインタのポインタ。
引き数として配列を渡すことはできない。
0121デフォルトの名無しさん2005/08/29(月) 18:50:37
>>119
ポインタのアドレスって……
0122デフォルトの名無しさん2005/08/29(月) 18:53:50
>>119-120
ありがとうございました。おかげですっきりしました
0123デフォルトの名無しさん2005/08/29(月) 19:12:28
バカばっかかよ!
ポインタ変数の配列を引数に取るときでもいいし、
ポインタ変数を直接操作したい場合にも使える。
typedef int* PINT;
として PINT *arg を考えればいい。
0124デフォルトの名無しさん2005/08/29(月) 20:44:56
お前が一番馬鹿だな
0125デフォルトの名無しさん2005/08/29(月) 20:53:51
このスレ読むと
「本当に有能な人間は他者を馬鹿にしない」
という言葉が真実だということが良くわかる。
0126デフォルトの名無しさん2005/08/29(月) 20:54:29
char **argv も使ったことないのか。
0127デフォルトの名無しさん2005/08/29(月) 21:50:51
main( int argc, char *argv[] ) {
int 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:57
単に日本語を除外したいだけなら、
0x80 以上の値が出てきたら(最上位ビットが 1 なら)
次の文字を無視すればいい。
Shift-JIS でも EUC でもいける。
文字コードの正当性まで知りたいのならこれではだめだが、
そんなのはどうでもいいっしょ? 多分。
0129デフォルトの名無しさん2005/08/29(月) 22:01:06
>>127
うん。fgetwcを使うのが簡単だよ。何か躊躇することでもある?
どうしても嫌なら'['の1文字前が2バイト文字の1バイト目かどうか確かめればいいよ。
0130デフォルトの名無しさん2005/08/29(月) 22:01:56
とか思ったけど、Shift-JIS の半角カナがあると話が変わるんだった。
Shift-JIS なら、0xA0 〜 0x9F だったら次のを除外しないようにする。
EUC なら必要ない。
0131デフォルトの名無しさん2005/08/29(月) 22:32:44
>>128-130
ありがとうございました。日本語コードとかの話になると、つい敬遠しがちでしたが
お陰さまで少し興味がもてましたです。
0132デフォルトの名無しさん2005/08/30(火) 23:30:42
構造体を示す慣用的な表現ってありますか?
typedef struct Argfoo Argfoo;

自分ではArgxxxで構造体を示すと決めていますが、
もし何か慣用的なものがあればそっちに習おうと思いました。
0133デフォルトの名無しさん2005/08/30(火) 23:34:53
なんで構造体にArg?
ていうか、名前に型を示すプレフィックスをつけるとかは今時
流行らんからやめれ。
0134デフォルトの名無しさん2005/08/30(火) 23:35:56
fopenしたものから、ファイルディスクリプタを得る
関数って何でしたっけ??
0135デフォルトの名無しさん2005/08/30(火) 23:38:41
fopen()が返す値がファイルディスクリプタそのもの
0136デフォルトの名無しさん2005/08/30(火) 23:46:13
>>134
そんなこと標準Cの範囲ではないからすれ違い。
0137デフォルトの名無しさん2005/08/30(火) 23:46:44
>>135
あほはしね
>>134
fileno()
0138デフォルトの名無しさん2005/08/30(火) 23:51:17
ストリーム(FILE *)からファイルディスクリプタ(int)
fileno()だた。。

解決しますた。m(__)mどもども
0139デフォルトの名無しさん2005/08/31(水) 00:36:02
データの入力と処理に関する質問です。

2 3 4
1 5 2

の様なスペースで区切られた約40000行のデータファイルがあります。
このデータファイルを読み込んで、各列ごとにヒストグラムにしたいのです。
どのようなCプログラムを作ればいいのでしょうか?
初心者なので具体例を提示していただければありがたいのですがm(__)m
0140デフォルトの名無しさん2005/08/31(水) 00:41:30
宿題は宿題スレにGO
ただしもっと仕様を明確にしてな
01411392005/08/31(水) 00:43:49
>>140
宿題では無いのですが、宿題スレに行って来ます!
0142デフォルトの名無しさん2005/08/31(水) 00:44:45
>>139
ここはC言語のテクニカルノウハウなどに付いてのスレです。
アルゴリズムスレや初心者スレ、或いは宿題スレなどへどうぞ。
#つーか、情報量が少なすぎて回答しようも。
入力部はfgets()+sscanf()を行数分回せばいいとして、ヒストグラムの仕様が判らないとデータ設計できないし……
0143デフォルトの名無しさん2005/08/31(水) 00:45:44
>>139
各項目は全て整数値?
各項目の値域は?
#・・・Cで書くわけね
0144デフォルトの名無しさん2005/08/31(水) 01:25:57
AWK で書きてー。
0145デフォルトの名無しさん2005/08/31(水) 01:27:54
AWKは書かねぇ
0146デフォルトの名無しさん2005/08/31(水) 10:25:55
下のプログラムは、4つの数字を入力して、+−×の演算を使用し、計算結果が10になる式を出力するものです。
しかし、意味が分かりません。だれか、詳しく教えてくれませんか?お願いします。
#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:36
>>146
80列×8行にプログラムを詰め込むという制限をかけた特殊なプログラムなので、
分かりやすいよう整形、リネームするか、
別のプログラムを探すかしよう。
0148デフォルトの名無しさん2005/08/31(水) 10:32:46
>void main()
ここに突っ込んで話を迷走させようぜ
0149デフォルトの名無しさん2005/08/31(水) 11:17:25
短くするためにちょっとズルしてるだけだろ。
0150デフォルトの名無しさん2005/08/31(水) 11:25:43
Cでは不適切だから、スレ違い。
0151デフォルトの名無しさん2005/08/31(水) 11:35:13
短くしたいだけならmain()と書けばよい
0152デフォルトの名無しさん2005/08/31(水) 12:24:43
戻り値がありません。
0153デフォルトの名無しさん2005/08/31(水) 12:49:53
プリプロセッサ通して適当に改行/整形してみたけど、90行にもなったし
かなりトリッキーなので解説するには向かないね。
0154デフォルトの名無しさん2005/08/31(水) 12:57:30
自分で宣言すれば#includeの行は削れそうだな
0155デフォルトの名無しさん2005/08/31(水) 13:06:11
>>145
たかが越前ってか?
0156デフォルトの名無しさん2005/08/31(水) 13:33:20
>>154
Cだから関数宣言はなくてもコンパイル通る。
0157デフォルトの名無しさん2005/08/31(水) 13:34:49
可変長の関数はプロトタイプないとバグるぞ
0158デフォルトの名無しさん2005/08/31(水) 14:29:14
お尋ねしたいのですが、if (test == 1) /* なんかの処理 */;
みたいに単文だからと中括弧を省略していると、おめー中括弧かけよ と決まって注意されます

個人的には省略いらねーだろ と思うのですが、これはやはり宗教的なところですか?
注意を無視しててもようございましょうか?
0159デフォルトの名無しさん2005/08/31(水) 14:33:36
>>158
注意してきた人にもよるだろ。
自分で判断できないのか。
0160デフォルトの名無しさん2005/08/31(水) 14:37:06
>>152
K&Rのhello, worldはmain()で戻り値無しだよ
0161デフォルトの名無しさん2005/08/31(水) 14:43:26
会社やプロジェクトのコーディング規約に載ってるなら、それに従う。

規約がなくとも、省略したがってるのに「個人的には省略いらねーだろ」
なんて不思議な日本語書いてしまううかつさんには、
意識して書いてもらえる方が周囲の人間は安心できる。
0162デフォルトの名無しさん2005/08/31(水) 14:48:22
>>158
中括弧を省略してもいいと思っているのか、
そんな省略なんて必要ないと思ってるのか
はっきりしてくれ。
0163デフォルトの名無しさん2005/08/31(水) 14:50:34
単文で中カッコを付けるかどうかは、
その人のコーディングスタイルによる。
それ以上でもそれ以下でもない。

switch〜caseのインデントとか
ifやforの中カッコを同一行に書くか改行するか、とかも同じ話。
0164デフォルトの名無しさん2005/08/31(水) 14:55:49
俺はmain関数やユーザ関数の中括弧は改行してからで、
ifやforはfor(〜〜){と続けるな
省略は絶対にしない。
0165デフォルトの名無しさん2005/08/31(水) 15:03:51
あまり省略はしないけど、return 1文のときのみはたまに省略するな

if (〜)
 return false;

みたいな
0166デフォルトの名無しさん2005/08/31(水) 15:08:11
スタイルの話はよそでやれよ。
0167デフォルトの名無しさん2005/08/31(水) 15:09:37
>>166
自分がピザだからっていじけるなよ。
0168デフォルトの名無しさん2005/08/31(水) 15:16:15
どっちがいいかはともかく何のメリットがあるのかって話じゃないのか。
俺にはメリットがよくわからん。
0169デフォルトの名無しさん2005/08/31(水) 15:18:17
どちらのメリットかもよくわからん
0170デフォルトの名無しさん2005/08/31(水) 15:18:33
>>168
・無駄なタイプが少なくなる
・ファイルサイズが若干小さくなる
これだけ。
どうせコンパイラが吐くコードは同じだし。
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
>>157
どうバグるんだ?そんなはずないと思っているわけだが。

>>160
K&Rにも間違いはあるし現在ならC99を中心に考えた方がいいぞ
0175デフォルトの名無しさん2005/08/31(水) 15:32:56
単文では括弧を使ってはならない、と規定されているのでなければ、
「本来」というのは大げさな、恣意的な表現だな。
0176デフォルトの名無しさん2005/08/31(水) 15:40:06
>>173
それは「なくてもいい」ってだけだろ
0177デフォルトの名無しさん2005/08/31(水) 15:42:13
>>175
じゃあ中括弧をつけるのは、
「本来不要なものだけど、保守性等の面で推奨される書き方」
という表現も恣意的なわけ?
0178デフォルトの名無しさん2005/08/31(水) 15:45:23
「本来の書き方」「本来不要」なんて、当然そうあるべきルールがあるように書いてるのは君だけ。
「省略」という言い方が気に入らない?なら、他の言い方をどうぞ。

皆、どちらも同じだがそれぞれの流儀で使ってるというのは理解してるだろう。
0179デフォルトの名無しさん2005/08/31(水) 15:53:54
>当然そうあるべきルールがあるように
ルールではありません。文法です。
>「省略」という言い方が気に入らない?なら、他の言い方をどうぞ。
ありがとう。「本来の文法に沿って記述しない」位が適切かな。
>それぞれの流儀で使ってるというのは理解してるだろう。
そうですね。スタイル論議をするつもりは無いのですけど、
「省略」という表現が不適切に感じたからレスしたのみ でしたw
0180デフォルトの名無しさん2005/08/31(水) 15:54:23
>>174
> どうバグるんだ?そんなはずないと思っているわけだが。
>>157ではないし、具体的にどうバグるかはわからんが、
C言語 FAQには次のように書いてある
ttp://www.kouno.jp/home/c_faq/c15.html#0
0181デフォルトの名無しさん2005/08/31(水) 15:54:46
Cスレの半分は無駄話で出来ています
0182デフォルトの名無しさん2005/08/31(水) 15:55:16
おいおい、単文に括弧つけるのは文法違反ときたかw
0183デフォルトの名無しさん2005/08/31(水) 15:56:01
>>182
よく読め
0184デフォルトの名無しさん2005/08/31(水) 15:56:55
> 「本来の文法に沿って記述しない」
どう嫁と
0185デフォルトの名無しさん2005/08/31(水) 15:58:40
本来の文法に沿ってはいないが文法には違反していない、
つまり「文法」と「本来の文法」は別物なんだよ。
0186デフォルトの名無しさん2005/08/31(水) 16:09:27
>>179
単文 : 「;」で終端される<式>。
複文 : 「{}」で複数の単文を括った文。
文 : 単文、複文を含めたもの
ifの文法 : if( <式> ) <文>

if( /*略*/ ) { /*略*/ }
の、どこが文法に沿っていないのだ?
0187デフォルトの名無しさん2005/08/31(水) 16:10:33
>>179は宿題ができなくて暴れてるリア厨だろ。
そんなにいじめるな
01881862005/08/31(水) 16:10:40
×複文 : 「{}」で複数の単文を括った文。
○複文 : 「{}」で複数の文を括った文。

でつた…orz
0189デフォルトの名無しさん2005/08/31(水) 16:46:05
括弧の話題はのびるな…
ところで、これも単文に入った?
a=1,b=2;
0190デフォルトの名無しさん2005/08/31(水) 16:48:21
>>189
>>186
0191デフォルトの名無しさん2005/08/31(水) 18:11:43
>>174
実際問題としてはK&RのHello worldの例をコンパイルすることのできない
Cコンパイラって存在しないんじゃない?
0192デフォルトの名無しさん2005/08/31(水) 18:12:47
文法的には{}付けても付けなくとも正しいだろ
何でそのレベルで議論になるんだ
0193デフォルトの名無しさん2005/08/31(水) 18:17:18
>>191
現状での C の正しい仕様としては、
int main の return を省略することはできない。
C++ なら、省略すると return 0; が暗黙に加えられるが。
K&R C の時代のことは知らん。

それを言ったら void main も仕様外だから、
>>146 も、void 削って戻り値無視ってのも、
大して変わらんのだけどね。
0194デフォルトの名無しさん2005/08/31(水) 18:20:15
>>193
C99ではreturnの省略可能。(ISO/IEC 9899:1999 5.1.2.2.3 Program termination -1)
0195デフォルトの名無しさん2005/08/31(水) 18:21:20
>>192
本来の文法に沿った書き方があるから
0196デフォルトの名無しさん2005/08/31(水) 18:24:11
>>194
ああ、そうだった。C99 だとできるようになったんだった。忘れてた。
0197デフォルトの名無しさん2005/08/31(水) 19:00:04
>>189
単文なんて俺用語の用法を聞くなと。
複文以外の文を単文と呼ぶのが普通だと思うが>>186の定義によると「;」で終端される<式>などというCの文法に存在しないものを単文と呼ぶらしい。
a=1,b=2;
は式文という文で式じゃないから186の定義では単文ではない。
{}で囲んでないから複文でもない。
0198デフォルトの名無しさん2005/08/31(水) 19:02:57
,は順次演算子
0199デフォルトの名無しさん2005/08/31(水) 19:06:51
>>197
カンマ演算子だね
つ[ ttp://pc8.2ch.net/test/read.cgi/tech/1112011590/l50 ]
0200デフォルトの名無しさん2005/08/31(水) 19:09:08
?
「単文」そのものはオレ用語じゃないだろ
0201デフォルトの名無しさん2005/08/31(水) 19:09:15
C FAQの7.21に次のような記述があるんですが、ISO C規格上の根拠についておしえてください。
「解放されたポインターの値は厳密にいえば無効で、それをどう使っても、たとえ間接参照
以外のことに使っても理屈の上ではトラブルの元である。」

free済みのポインタを、prinrf("%p", p); したりするだけでも規格違反(unspecified?)です
か?

C99の7.20.3あたりには特に何も書いていないように思います。
02021972005/08/31(水) 19:09:55
いや、知ってるがそれが何だ?
0203sage2005/08/31(水) 19:10:03
URLを貼り忘れました
http://www.kouno.jp/home/c_faq/c7.html#21
0204デフォルトの名無しさん2005/08/31(水) 19:10:24
本来の文法、ねぇ……
お笑いと厨は帰れ。終了。
02051972005/08/31(水) 19:11:18
>>202は>>199
0206デフォルトの名無しさん2005/08/31(水) 19:19:07
>>200
規格書に載ってないものを俺用語っていうんじゃねーの?
あれ「複文」も載ってないや、複合文だた。
0207デフォルトの名無しさん2005/08/31(水) 19:26:08
というか、自分の説明の中で「単文と呼ぶのが普通だと思うが」とか書いてるし。
0208デフォルトの名無しさん2005/08/31(水) 19:29:29
日本語で用語定義している規格書って、何を参照してるん?
K&Rでは「複文」←→「単一の文」だな。
0209デフォルトの名無しさん2005/08/31(水) 19:30:49
>>208
JISじゃない?
0210デフォルトの名無しさん2005/08/31(水) 19:35:17
>>197
カンマを使うと <式1>,<式2> というのも1つの<式>となるため、
> a=1,b=2;
> は式文という文で式じゃないから186の定義では単文ではない。
というのは間違い。
0211デフォルトの名無しさん2005/08/31(水) 19:36:46
質問させてください。
cccというポインタの配列の0番目を上書きしたいのですが、
どのようにすればいいのでしょうか?
やりたいことは下の様な感じなのですが・・・

struct kouzoutai *ccc;
&(aaa->bbb[0].ccc[0]) = ccc;
0212デフォルトの名無しさん2005/08/31(水) 19:36:48
>>210
; が付いてるからそれは既に式じゃないだろ。
0213デフォルトの名無しさん2005/08/31(水) 19:39:01
>>207
それが正しいとは言ってないだろ?
「普通だと思う」と言ってるだけで。

>>210
a=1,b=2は式だが
a=1,b=2;は式じゃない。
カンマ演算子は関係ない。
0214デフォルトの名無しさん2005/08/31(水) 19:42:43
>>212-213
186の定義が発端じゃないの?
>単文 : 「;」で終端される<式>。
だから、式の後ろにカンマがついてる、のを問題にするのは変では?

つか、>>197で「単文」は「俺用語」で<式>は「存在しない」と書いてるように読めるが、
式もダメなのかい。
0215デフォルトの名無しさん2005/08/31(水) 19:43:24
>>211
それ以前にやりたい事に間違いだらけですが...。
cccもポインタ配列になっていませんし。
0216デフォルトの名無しさん2005/08/31(水) 19:45:41
>>214
><式>は「存在しない」と書いてるように読めるが
ええと、違う

「「;」で終端される<式>」は存在しない。
0217デフォルトの名無しさん2005/08/31(水) 19:47:56
>>214
>単文 : 「;」で終端される<式>。
この日本語だと、「単文は、〜〜〜 な <式> である。」と言う形になっている。
言い換えると、『<式> のうち、「;」で終わってるものを「単文」と呼ぶ』という意味になる。
<式> はどう頑張っても文にはならない。明らかにおかしい。

 単文 : <式> の後ろに「;」を付けた物。

ならいい。
0218デフォルトの名無しさん2005/08/31(水) 19:48:16
>>216
それは読み方が違うんじゃないか、単文(文/単一の文)の定義を書いてるんだろ。
単文→ <式>; ってだけだろ、BNFっぽく書いてるんなら。
0219デフォルトの名無しさん2005/08/31(水) 19:50:11
なんか、曲解、揚げ足鳥合戦でもやってんの?
0220デフォルトの名無しさん2005/08/31(水) 19:52:21
日本語講座をやってます。
0221デフォルトの名無しさん2005/08/31(水) 19:53:33
その論法で逝くと、複文の説明も辺だな。
括弧込みというならブロックとかだろ。
0222デフォルトの名無しさん2005/08/31(水) 19:54:03
だな。低脳厨が脳内文法の変形作業を騒ぐのはスレ違い。でてけ。
0223デフォルトの名無しさん2005/08/31(水) 19:54:23
いや、もういいよ。どっちでもいいって。事の発端はvoid main()だったっけ?
0224デフォルトの名無しさん2005/08/31(水) 19:55:24
>>148
見事に迷走しました
0225デフォルトの名無しさん2005/08/31(水) 19:56:27
式と文は違うということじゃね?
通常のALGOL文法では式と文は大きな違いがある

Lispには式しかないけど
0226デフォルトの名無しさん2005/08/31(水) 19:57:27
>>221
K&Rでは複文=ブロックだし、複文も規格にない用語だから気にすることないんじゃない?

>>218
それはそれで珍しい定義だよな。
0227デフォルトの名無しさん2005/08/31(水) 20:08:36
珍しいのか、式+セミコロン前提でアレコレやってたようだが。
0228デフォルトの名無しさん2005/08/31(水) 20:11:19
>>211
「やりたいこと」というのが良くわからんので
ヒントだけ

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
>>227
>>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:25
つーかコーディングの作法について議論したいなら他所でやれ
0233デフォルトの名無しさん2005/08/31(水) 20:35:53
>>232 今の流れが分かってない人発見。
0234デフォルトの名無しさん2005/08/31(水) 20:54:34
スレ的には 232が正しくて他はたわ言に過ぎない。
0235デフォルトの名無しさん2005/08/31(水) 20:56:27
>>228
ありがとうございます!
ヒントを元にポインタの勉強をしてこようと思います。
0236デフォルトの名無しさん2005/08/31(水) 21:00:01
>>234
コーディングスタイルではなく、C言語について語っていると思ったのだが。
0237デフォルトの名無しさん2005/08/31(水) 21:09:59
>>236
はぁあ? >>158 を元にたわ言だけを展開するのを、語ると言ってもよいと?
0238デフォルトの名無しさん2005/08/31(水) 21:24:43
>>237
今は式や文といった用語の定義について話てるんでわ?
少なくともスタイルじゃないだろ。
0239デフォルトの名無しさん2005/08/31(水) 21:36:52
>>231
確かにその定義だと制御文は全部単文になるね。
でも、

 if(...) { ...; ...; ...; } else { ...; ...; }

を「単文」と呼ぶのも気が引けるような。
かといって、上のが複文で

 if(...) ...;

は単文ってのも何か違うような気もするし。
単文って言葉自体が害悪に思えてきた。
C の規格票で「単文」って言葉がないのも分かる気がする。
文法定義を書いてみようと思ってみても、
確かに「単文」なんて項目は作りそうにないね。
0240デフォルトの名無しさん2005/08/31(水) 22:27:03
だからたわ言は終了。
0241デフォルトの名無しさん2005/09/01(木) 00:42:47
ソースに対して期待された結果が出ればそれでよかろう・・・
それにK&Rがさまざまな方言生んじゃったのも事実だし
0242デフォルトの名無しさん2005/09/01(木) 00:47:09
>>241
K&Rは方言を無くすために書かれました
0243デフォルトの名無しさん2005/09/01(木) 00:53:58
今後Cのソースは .cpp で保存しようと思うのですが
0244デフォルトの名無しさん2005/09/01(木) 00:58:17
頭はgoサインを出しているのですが、体は拒否してます。
どうすればいいですか?
0245デフォルトの名無しさん2005/09/01(木) 00:58:35
無くすために書かれても一部曖昧だから方言生んだじゃん
そこでISOとANSIが慎重になって標準化した
0246デフォルトの名無しさん2005/09/01(木) 00:59:24
それは C のソースじゃなく C++ のソースだ。
0247デフォルトの名無しさん2005/09/01(木) 01:01:09
既にあったのなら、生んだってのは
02482422005/09/01(木) 01:04:49
>>241>>242>>245はすべて真です

私は補足しただけ
>>241へのアンカーが良くなかったですか?
0249デフォルトの名無しさん2005/09/01(木) 01:21:57
方言が嫌な奴にC/C++は適さない
0250デフォルトの名無しさん2005/09/01(木) 02:15:34
LSIっていうフリーのコンパイラをインストールしたんですけど、コンパイルってどうやれば出来ますか?
0251デフォルトの名無しさん2005/09/01(木) 02:30:30
ググれ
0252デフォルトの名無しさん2005/09/01(木) 02:35:14
>>251
教える気が無いなら黙ってろ。
お前が教える気がないだけで、他の人は教えるかも知れないだろ。
0253デフォルトの名無しさん2005/09/01(木) 02:36:42
>>250
lcc ファイル名 [オプション]
0254デフォルトの名無しさん2005/09/01(木) 02:55:56
>>252
スレ違いなんだよドアホ
0255デフォルトの名無しさん2005/09/01(木) 03:09:34
>>252
”Cコンパイラの使い方なら俺に聞け”というスレでも立ててそこでやってくれ。

0256デフォルトの名無しさん2005/09/01(木) 03:55:22
#include<就活.h>
main(){
 int 無職歴;
 for(無職歴=1年目 ; 内定数>=1 ; 無職歴++){
 printf("不採用\n");
 }
}


就職できません('A`)
0257デフォルトの名無しさん2005/09/01(木) 04:05:02
>>256
""で囲んでない
int mainのintを省略できるのはC++、その場合はヘッダ名がC就活になり.hはいらない
0258デフォルトの名無しさん2005/09/01(木) 04:08:04
>>257
>intを省略できるのはC++
関数は省略したらintじゃないか?Cでも。
0259デフォルトの名無しさん2005/09/01(木) 05:02:26
>int mainのintを省略できるのはC++
仕様上はできねーよ。
省略できるのは return 0; の方だけだ。
0260デフォルトの名無しさん2005/09/01(木) 05:08:30
省略するのはvoidな
0261デフォルトの名無しさん2005/09/01(木) 05:53:52
>>241>>245
K&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
>>262
激しくスレ違い。>>1読め。
0264デフォルトの名無しさん2005/09/01(木) 10:53:23
>>262
一応答えておくか

ランダムにやるならrand()かそれに相当する処理を使うのがベスト
手順は以下のとおり

1) A、B、Cを配列に格納する
2) 各配列に対し以下の操作を行う
 2-1) インデックスの個数を取得(1〜要素数の間でランダム)
 2-2) インデックスを取得(1〜↑で指定した個数の間でランダム)
   ※この時、既に取得したインデックスと重複しないようにする
 2-3) 取得したインデックスの値を表示
02652622005/09/01(木) 11:54:49
>>263
勉強して出直します。

>>264
回答サンクスです。学校で常に赤点だった男なんでちんぷんかんぷんですが、なんとか頑張ってみます。
02662642005/09/01(木) 16:17:12
ちょっと間違ってたので訂正

2-2)
 誤) インデックスを取得(1〜↑で指定した個数の間でランダム)
 正) ↑で指定した個数分だけ、配列のインデックスを取得(1〜要素数の間でランダム)
0267デフォルトの名無しさん2005/09/01(木) 22:29:59
>>253
>>252のような奴には一切教えないようにしよう。
0268デフォルトの名無しさん2005/09/02(金) 03:42:20
↑253乙
0269デフォルトの名無しさん2005/09/02(金) 11:05:22
そろそろ学校でC言語を習うのですが、出来るだけ予習しておきたいです
C言語の知識は全くありません。そんな僕にオススメの本やサイトはありますか?
0270デフォルトの名無しさん2005/09/02(金) 11:09:23
学校の教科書読め。
余力があったら、実際にプログラム書いてみればいい。
0271デフォルトの名無しさん2005/09/02(金) 11:09:57
学校のお勉強なら、授業で使う教科書を予習
0272デフォルトの名無しさん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:43
いちいち密度の低いスレだな
0276デフォルトの名無しさん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:02
暗黙の型変換
0278デフォルトの名無しさん2005/09/02(金) 11:35:10
眠い
0279デフォルトの名無しさん2005/09/02(金) 11:35:58
>>272-274
習得が目的じゃなく、授業への備えじゃないの、コイツは。
0280デフォルトの名無しさん2005/09/02(金) 15:49:50
俺が勉強に使ったのは「入門ソフトウェアシリーズ�@ C言語」ってやつだったな
0281デフォルトの名無しさん2005/09/02(金) 16:22:26
>>280
あの糞本か・・・
よく頑張った。
0282デフォルトの名無しさん2005/09/02(金) 16:29:25
河西本って昔のワープロの説明書みたいな感じだよね。
0283デフォルトの名無しさん2005/09/02(金) 16:32:54
やはり「作ってわかるCプログラミング」を選ぶべきですね :)
0284デフォルトの名無しさん2005/09/02(金) 16:35:32
スレ違いだっつうの
0285デフォルトの名無しさん2005/09/02(金) 16:36:38
スレ違いということに…、いやスマン
0286デフォルトの名無しさん2005/09/02(金) 16:46:19
>>280
うはっwww俺の学校もそれだ
正直分かりにくかった記憶しかない
0287デフォルトの名無しさん2005/09/02(金) 17:38:09
>>274
凄いんだけど、それ。
何かを履き違えている気がする。
0288デフォルトの名無しさん2005/09/02(金) 21:17:45
C言語始めたんですが意味わからない・・・。
これはどこから始めればいいんでしょうか?
定義を覚える以前に・・・自分がなにやってるんだが分からない・・・orz
0289デフォルトの名無しさん2005/09/02(金) 21:42:07
memcpyとmemmoveの違いってコピー元とコピー先の領域が重なったときの動作の可否だけなんですか?
0290デフォルトの名無しさん2005/09/02(金) 21:46:01
>>288
Hello World!
0291デフォルトの名無しさん2005/09/02(金) 21:56:02
>>289
そう。
0292デフォルトの名無しさん2005/09/02(金) 22:14:50
>>289
それが原因で速度に変化が出る場合もある。
0293デフォルトの名無しさん2005/09/02(金) 22:51:15
俺、スゴイことを発見した。

C言語でプログラム書くとき、
できるかぎり一行でカッコとか使わず処理を書いたり、
ポインタをいっぱい使ったり、
複雑で分かり難い長い宣言を書いたりすると、
ほめられる、ってことに・・・

これで、冬のボーナスは、確実にアップだな
0294デフォルトの名無しさん2005/09/02(金) 23:13:46
こうしてマ板に壊れたPGが流れ込むわけだ
0295デフォルトの名無しさん2005/09/02(金) 23:35:14
>>293
コメントは全て英語で書いて、後から読む奴を寄せ付けるな
こいつすげー・・・こりゃ敵わないや・・・
となる事間違いなし。給料2倍
0296デフォルトの名無しさん2005/09/02(金) 23:36:44
いや、英語ぐらいは読めるだろ
0297デフォルトの名無しさん2005/09/03(土) 00:31:48
読めるけど、読みたくないし、書いてる方が間違ってる可能性大。
0298デフォルトの名無しさん2005/09/03(土) 03:42:26
Japanese Englishなコメント書くくらいなら日本語で書けよ。
0299デフォルトの名無しさん2005/09/03(土) 03:50:14
すみません。詳しい方にお聞きしたいのですが

 switch(9 <= num <= 17){

という意味の式をつくりたいので以下に直したのですが、

 switch((9<=num) && ( num>=17)){

Cの演算子を使う場合、この式であれば合ってますでしょうか?

0300デフォルトの名無しさん2005/09/03(土) 03:52:29
違う
0301デフォルトの名無しさん2005/09/03(土) 03:53:14
詳しいっていうか
入門書の一章読んだら十分分かるだろ
0302デフォルトの名無しさん2005/09/03(土) 03:54:30
>>299
おまいは算数もできんのか。
0303デフォルトの名無しさん2005/09/03(土) 03:54:53
>>299
>switch(9 <= num <= 17){
そもそもこれがありえない
0304訂正2005/09/03(土) 03:55:43
 switch((9<=num) && ( num<=17)){

打ちまちがえました。
0305デフォルトの名無しさん2005/09/03(土) 03:55:53
 switch((9<=num) && ( num>=17)){
これもなんだか・・・
0306デフォルトの名無しさん2005/09/03(土) 03:58:22
switch文で真偽返してどうすんの?
0307デフォルトの名無しさん2005/09/03(土) 03:58:23
>>305
打ちまちがえました。
0308デフォルトの名無しさん2005/09/03(土) 03:59:37
switchを調べろ
0309デフォルトの名無しさん2005/09/03(土) 04:01:29
>>304
それもなんだか・・・
0310デフォルトの名無しさん2005/09/03(土) 04:08:32
switch()の判定文に入れるのは整数値を表す変数。
caseに付けるラベルは整数の固定値。
範囲チェックしたいならif使え。
0311デフォルトの名無しさん2005/09/03(土) 04:08:56
演算子がどうとかいうより、switchの構文理解してないじゃねーか
0312デフォルトの名無しさん2005/09/03(土) 04:19:04
if(num== 310) puts("そうします。レス有難うございます");
else puts("参考書のメモに「複雑な式は使えない」と自分で書いておいたのを見つけました。");

puts("皆さんレスありがとうございました。");
0313デフォルトの名無しさん2005/09/03(土) 04:59:09
>>312
文字化けしてる
0314デフォルトの名無しさん2005/09/03(土) 05:09:11
ttp://www.asahi-net.or.jp/~uc3k-ymd/Lesson/Section01/gcc_sjis.html
0315デフォルトの名無しさん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
>>315
ざんねん
0317デフォルトの名無しさん2005/09/03(土) 07:12:48
>>315
誰もおまえの意見など聞いちゃいないw
0318デフォルトの名無しさん2005/09/03(土) 07:13:49
でも、無意味な文章をありがとうございます。
0319デフォルトの名無しさん2005/09/03(土) 07:23:11
・ ((9<=num)&&(num<=17)) は Cの論理式として決して複雑ではない

そんなことわかってるよw 複雑じゃないんなら、これでswitch( )書いてよw 

・ 「数学で (9 <= num <= 17)」と言いたいだけだろ? C真似て紛らわしい質問。

自分が読み誤ったのを正当化したいだけでしょう
0320デフォルトの名無しさん2005/09/03(土) 07:27:35
なら無視するか、誘導してもらって。で、よかったのに

何得意げに答えてんの?w

まぁ、他の人には感謝。

あ、アンカー↓
>つか、C入門書のはじめからと論理初歩やり直せ。当分初心者スレ以外に投稿すな。
0321デフォルトの名無しさん2005/09/03(土) 07:28:16
switch ((9<=num)&&(num<=17))
{
case 0:
moge();
break;

case 1:
hoge();
break;
}
0322デフォルトの名無しさん2005/09/03(土) 07:31:00
C言語のswitchには残念ながら範囲を指定する方法はない。
0323デフォルトの名無しさん2005/09/03(土) 07:39:33
箇条書きにしてる部分は>>315の被害妄想でしかないと思うけど、
参考になるスレなので荒れると嫌だから、しばらくロムります
03243152005/09/03(土) 07:44:42
>>312
>"参考書のメモに「複雑な式は使えない」と自分で書いておいたのを見つけました。"
<<switch()の判定文に入れるのは整数値を表す変数。
<<caseに付けるラベルは整数の固定値。
つ "C入門書のはじめからと論理初歩やり直せ。当分初心者スレ以外に投稿すな。"
>>312並以下のアホだか脳無しまで沸いてるなあ。特に下記は憐れをもよおす。
>>319
>>そんなことわかってるよw 複雑じゃないんなら、これでswitch( )書いてよw 
>>322
>>C言語のswitchには残念ながら範囲を指定する方法はない。
0325デフォルトの名無しさん2005/09/03(土) 07:47:43
被害妄想がひとりいるなw
0326デフォルトの名無しさん2005/09/03(土) 07:51:14
>>315
憐れをもよおす。漏れはおまえに吐き気をもよおすよw
0327デフォルトの名無しさん2005/09/03(土) 07:51:16
if(CHECK_IN_RANGE(num, 9, 17))
{
;
}
0328デフォルトの名無しさん2005/09/03(土) 07:56:39
釣られはせんぞ。釣らせはせんぞ。釣らせはせんぞ。
0329デフォルトの名無しさん2005/09/03(土) 08:09:08
switchの存在意義って見易いこと意外にある?
0330デフォルトの名無しさん2005/09/03(土) 08:14:01
if elseの羅列より高速化される場合がある。
03313152005/09/03(土) 08:29:39
「w」好きの低脳ってどこで見ても必死な低脳だな。
どう条件分岐したいかもわからずに書けないどうこうの能天気さが天晴れだ。
念の為。>>303は俺じゃない。こういう勘違い因縁づけは303,319ぐらい?
>>325
つ 325
>>326
つ 326
0332デフォルトの名無しさん2005/09/03(土) 08:34:52
ここですか? 315という被害妄想男が、頑張っているスレは
0333デフォルトの名無しさん2005/09/03(土) 09:26:39
他の言語だとcaseに範囲を指定できる
0334デフォルトの名無しさん2005/09/03(土) 09:36:22
/* <= sentence between these two symbols are comments => */
/* 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:17
9 <= num <= 17 って書きたきゃ、Python やろうぜ。
0336デフォルトの名無しさん2005/09/03(土) 10:02:39
C++でもできるな。
0337デフォルトの名無しさん2005/09/03(土) 10:32:23
Cでもできる。 値は常に1だけどな。
0338デフォルトの名無しさん2005/09/03(土) 10:56:27
C++でも無理
0339デフォルトの名無しさん2005/09/03(土) 11:30:51
>>337
そういうのはできるとは言わない
0340デフォルトの名無しさん2005/09/03(土) 12:06:22
どう考えても釣りだろ?
あんな間違いするヤツは、いない。
0341デフォルトの名無しさん2005/09/03(土) 13:02:29
>>322
できないことはない。
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:31
>>329
switch文はlコンパイル時にテーブルとして展開される。
if文は逐次判定処理。

そのため、判定条件が多くなるとswitch文の方が高速化される傾向にある。
しかし、判定条件が多すぎると却ってif文より遅くなる諸刃の剣。
0343デフォルトの名無しさん2005/09/03(土) 13:08:53
>>341
TRUEが1である保証はないから、正常に動作するとは限らない。
0344デフォルトの名無しさん2005/09/03(土) 13:11:42
>>343
これは釣りか?
0345デフォルトの名無しさん2005/09/03(土) 13:17:39
>>343
クマー
つ switch ((num < 9)?1:0 + (num < 17)?1:0)
0346デフォルトの名無しさん2005/09/03(土) 13:22:21
>>343
ハァ? 関係式は1か0しか返しませんが
0347デフォルトの名無しさん2005/09/03(土) 13:24:01
>>343
大漁おめでとう。
0348デフォルトの名無しさん2005/09/03(土) 13:24:06
>>343>>345
本気だとしたら嘆かわしいことだ。
http://www.kouno.jp/home/c_faq/c9.html

>組み込みの演算子によってブール値が産み出されるときは、
>1か0であることが保証されている。
0349デフォルトの名無しさん2005/09/03(土) 13:34:50
こんなのでも釣れてしまうとは嘆かわしいことだ。
0350デフォルトの名無しさん2005/09/03(土) 13:57:24
(勉強になったなんて言えない)
0351デフォルトの名無しさん2005/09/03(土) 13:58:11
m9(^Д^)プギャー
0352デフォルトの名無しさん2005/09/03(土) 14:30:39
>>350
(ぶっちゃけ、勉強になった)
0353初心者の日記2005/09/03(土) 14:33:37
struct a{
 unsigned 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:33
>>345は演算子の優先順位表も見ておくこと。
0355デフォルトの名無しさん2005/09/03(土) 14:38:18
>>353
unsigned shortは%huだろうが
0356デフォルトの名無しさん2005/09/03(土) 14:42:23
>>353
× %d
○ %hd
0357デフォルトの名無しさん2005/09/03(土) 14:44:54
ネタだろうが釣りだろうが、
こうやってちゃんと正しとかないと、
第三者の初心者が勘違いするといけないから困る。
0358デフォルトの名無しさん2005/09/03(土) 14:46:17
こういう見事な例って本当に初心者なのかなとは思うな
sscanfとか普通使わないだろうし
0359デフォルトの名無しさん2005/09/03(土) 14:50:08
>>358
> sscanfとか普通使わないだろうし
ハァ?
0360デフォルトの名無しさん2005/09/03(土) 14:50:31
覚えたての初心者がってこと
0361デフォルトの名無しさん2005/09/03(土) 14:51:28
>>358
むしろ初心者だからこそ行き詰った時にsscanfを連発するのではないかと
0362デフォルトの名無しさん2005/09/03(土) 14:52:45
たいがいの初心者は sscanf の %[文字クラス] は使わないわな。
0363デフォルトの名無しさん2005/09/03(土) 14:55:54
林の糞本にも書いてあることが理解できない奴は初心者ですらないわな。
0364デフォルトの名無しさん2005/09/03(土) 16:48:22
某入門書にHelloを10回繰り返すfor文のサンプルがあったんですが、
それを作ろうとしてコンパイルしたら警告がでたけど、意味不明だから無視して実行したら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
sscanf(str, "%127[^,],%hd,%hd,%hd", test->str, &test->i, &test->j, &test->k);
%d だと 後半 test->k が4バイトで、[0000 0003 0000 0000]と言う具合に 2バイトオーバー
して上書きするから「あ」が消滅してしまうんですね・・・ 迂闊でした

皆さんご教示ありがとうございました
0366デフォルトの名無しさん2005/09/03(土) 16:51:08
1<=10
1 じゃない i ダ!
おもしろくもなんともないぞhage
0367デフォルトの名無しさん2005/09/03(土) 16:51:51
>>364
釣りだよな?
0368デフォルトの名無しさん2005/09/03(土) 16:57:56
>>365
ま、scanf()だとかprintf()みたいな可変長引数関数の書式指定子は
型チェックできないから気をつけろってこった

gccとかはprintf()を「知って」いるからそこまで見てくれたりするけどな
0369デフォルトの名無しさん2005/09/03(土) 17:18:06
>>365
だから%huだってば
0370デフォルトの名無しさん2005/09/03(土) 17:33:29
>>364
forの条件が常に成り立つようになってる
0371デフォルトの名無しさん2005/09/03(土) 17:43:29
>>364
ちなみに、何てエラーが出たんだ?
0372デフォルトの名無しさん2005/09/03(土) 17:48:20
は?エラー?
0373デフォルトの名無しさん2005/09/03(土) 17:48:53
>>372
すまん。警告だ。
0374デフォルトの名無しさん2005/09/03(土) 18:09:18
警告:
>>364は実はリアルだった
03753642005/09/03(土) 18:36:05
>>366
あ、ありがとうございます。解決しました。





○| ̄|_
0376デフォルトの名無しさん2005/09/03(土) 18:41:14
警告の意味をよく調べて、
何でその警告が出たのか解析しといた方がいいぞ。
03773642005/09/03(土) 19:15:17
今度は警告すら出てないのに無限ループするようになった・・・・・orz
0378デフォルトの名無しさん2005/09/03(土) 19:30:49
独り言はやめてくれ
0379デフォルトの名無しさん2005/09/03(土) 19:42:50
警告がでないのは文法上はおかしくないって事だけだろ
内容がどうであれ、コンパイラが緩衝しないのは当り前
0380デフォルトの名無しさん2005/09/03(土) 23:51:49
C言語で、ある画像内の指定ポイント(画素)の輝度を
取得するプログラムを作成することは可能ですか?
0381デフォルトの名無しさん2005/09/03(土) 23:55:02
>>380
可能か不可能かって言えば可能だろ
0382デフォルトの名無しさん2005/09/04(日) 00:13:58
>>380
その画像の該当画素を取り出せたら、0.299R + 0.587G + 0.114B
0383デフォルトの名無しさん2005/09/04(日) 00:19:49
元々輝度値で記録されている可能性もある。
03843802005/09/04(日) 01:34:14
うーん・・・C言語で画像を扱ったことがないので、さっぱり分からないです。
(画像を入力する方法もわかりません)
もっと勉強してきます。
0385デフォルトの名無しさん2005/09/04(日) 02:10:37
そりゃ全然だめだな。画像形式すら書いてないし。
0386デフォルトの名無しさん2005/09/04(日) 02:30:52
>>380
処理の概要だけ。

画像が未圧縮のDIBだと仮定して、
1) 画像ファイルを開く(fopen)
2) 先頭から1画素ずつ走査し、該当画素を取得(fread)
  ※ファイルヘッダがあるなら読み飛ばす
3) 画素から輝度を取得 (>>382)
4) 処理が終わったらファイルを閉じる(fclose)

ファイル名や画素の位置はコマンドライン引数で指定するなり
ソース中で定義するなりお好きなように。
0387デフォルトの名無しさん2005/09/04(日) 02:46:34
おいおい
お前びっくりするな
03883802005/09/04(日) 17:33:17
>>386
画像はBMPです。
処理の仕方はDIBと同じですか?
0389デフォルトの名無しさん2005/09/04(日) 19:34:08
BMPとDIBの画像形式に付いて調べろ
0390デフォルトの名無しさん2005/09/04(日) 23:37:43
ブール値ってなんかの論理式の結果だと必ず0か1だけど
if(a) で成り立つけど if(a==1)で成り立たないのって
軽くヤバくない?

a とだけ書いたとき、これってif文から見たらゼロじゃないからTRUEだけど
0以外であって1というわけではないよね
でも、これをaではなく真偽値を返す関数と置き換えて考えてみると
if(a())で成り立つけど if(a()==1) と書きたくならない?

あー、ならないか・・・おれでもこうは書かないな
すまん忘れてくれ
0391デフォルトの名無しさん2005/09/04(日) 23:40:04
>>390
BOOL a(void){
return TRUE;
}

if (a() == TRUE)

じゃ駄目なの?
0392デフォルトの名無しさん2005/09/04(日) 23:44:25
>if(a) で成り立つけど if(a==1)で成り立たないのって
>軽くヤバくない?
成り立たないと困るのに成り立たないとしたらただのバグ。
aに0,1以外を突っ込むのやめればいいだけの話。
0393デフォルトの名無しさん2005/09/04(日) 23:53:01
真偽値を返す関数を書くとき、ついつい
真に0、偽に0以外を設定しちゃうんだよね
偽にはエラー要因
0394デフォルトの名無しさん2005/09/05(月) 00:08:55
>>390
!!を使えば0か1になる
0395デフォルトの名無しさん2005/09/05(月) 00:10:52
頼むから止めてくれ
0396デフォルトの名無しさん2005/09/05(月) 00:15:27
俺くらいの上級ハッカーになると
FALSE:失敗、TRUE:成功、その他:エラーと自由自在に使い分けるんだけどな。
0397 ◆i6G.jsz.NY 2005/09/05(月) 00:17:23
俺くらいの士官候補生になると
TRUEあるのみ
0398デフォルトの名無しさん2005/09/05(月) 04:42:54
>>390
>if(a())で成り立つけど if(a()==1) と書きたくならない?
ならない。
「真偽を返す」という定義の関数なんだから、
意味的に言って、その戻り値は if にそのままつっこむべき。
0399デフォルトの名無しさん2005/09/05(月) 07:17:42
typedef int BOOL;

BOOL hoge(int x)
{
return x -10;
}

こういう関数かもしれないしな。
0400デフォルトの名無しさん2005/09/05(月) 10:13:04
まさに is 系関数がそういうやつで、
真でも 1 以外の値が返ってくるのが普通。
絶対に 1 と比較してはならない。
0 との比較ならいいけど、
予めブール値に変換しておくような場合以外ではやる必要がない。
if とかではそのまま ( ) に突っ込んでおけばよし。
0401デフォルトの名無しさん2005/09/05(月) 11:21:49
つか、そんな事は各関数の戻り値の仕様を確認しろとしか
0402デフォルトの名無しさん2005/09/05(月) 11:25:09
Cに言語仕様としての論理値はないんだから(stdboolは後から取ってつけたライブラリ)
あくまで0か非0で考えるべき。
0か1か(それ以外か)はenumだろ。
0403デフォルトの名無しさん2005/09/05(月) 11:47:13
>>401
あんまり細かい仕様は把握してる人も少ないし、
時々処理系側でその仕様が無視されてることすらある。
安全のため、0 か非 0 が返ってくるものとしてプログラムを書くのが良い。
つか、こっちのが処理速い。
0404デフォルトの名無しさん2005/09/05(月) 11:50:32
Don't think, accpept!
0405デフォルトの名無しさん2005/09/05(月) 13:08:40
>>403
1と比較していいのかなんて話題出してるから、言ってる。

> あんまり細かい仕様は把握してる人も少ないし、
> 安全のため、0 か非 0 が返ってくるものとしてプログラムを書くのが良い。

論外、安全とか言う前にドキュメント読み返せ。
0406デフォルトの名無しさん2005/09/05(月) 13:27:14
1 と比較するメリットがないっていってんだよ。
0407デフォルトの名無しさん2005/09/05(月) 13:33:50
1と比較しろなんて言ってない、
仕様の確認もしない人に安全とか逝って欲しくないのだよ。
0408デフォルトの名無しさん2005/09/05(月) 13:34:51
確認しないとは言ってないだろう。
0409デフォルトの名無しさん2005/09/05(月) 13:35:44
あーウンコしたい
0410デフォルトの名無しさん2005/09/05(月) 16:50:29
トイレからカキコ
0411デフォルトの名無しさん2005/09/05(月) 19:43:56
    ラッセーラー ラッセーラ

ヾ(・ω・ )シ
 へ(  )
     >

    ラッセーラー ラッセーラ

ヾ( ・ω・)シ
  (  )へ
  く

  ( ・ω・ ) ウーーーーーーー
   └   ┘
   / ̄~ヽ

 ( ・ω・ )  ファビョ〜ン
゙_/( へ \_"
  <
0412デフォルトの名無しさん2005/09/05(月) 22:46:34
構造体の単方向チェインについて質問があるんですが、ここで聞いても大丈夫ですか?
0413デフォルトの名無しさん2005/09/05(月) 23:51:32
単方向チェインとは何ぞや
0414デフォルトの名無しさん2005/09/06(火) 00:07:55
単方向リストかな
0415デフォルトの名無しさん2005/09/06(火) 00:25:02
>>412
単方向チェイン=単方向のリンクリストのこと?
まあ、とりあえず質問してみ
スレ違いだったら誘導するから。
0416デフォルトの名無しさん2005/09/06(火) 00:30:40
この流れだけでスレ違い確定じゃねぇか。やめれ。
>>1嫁。せめて初心者系か ttp://pc8.2ch.net/test/read.cgi/tech/1123220967/
0417デフォルトの名無しさん2005/09/06(火) 02:44:35
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?
0418デフォルトの名無しさん2005/09/06(火) 02:45:46
>>417
ここで、ゼナ。
0419デフォルトの名無しさん2005/09/06(火) 03:05:34
>>417
ビットシフト演算をしたい時に役立つ。w

えーと。たとえば非常に遅いCPUのマシンで腐ったCコンパイラを
使っている場合、2を掛ける時に << 1 でやった方が速いとかね。
2で割りたい時に >> 1 でやった方が速いとかね。昔のコンパイラは
最適化が悪かったのでよくやりました。今どきのコンパイラは * 2
と書こうが / 2 と書こうが勝手に一番速く実行するコードを出す
だろうから、読み易い方で書いておいて良いと思います。
0420デフォルトの名無しさん2005/09/06(火) 03:08:26
>>419
一番よく使うのはマスクじゃまいか?
0421デフォルトの名無しさん2005/09/06(火) 03:12:00
ビットシフト久しぶりだな
0422デフォルトの名無しさん2005/09/06(火) 03:35:02
#define BIT(n) (1u << (n)) /* n ビット目が 1 の値を取得 (n は 0 から始まる) */

というように、ビットフラグを作るときによく使う。

掛け算割り算でも、かける値、わる値が変数になってる場合、
ビットシフトにした方が効率がいい。
ただし、2の累乗で・・・って制限のある場合にしか使えないけど。
0423デフォルトの名無しさん2005/09/06(火) 03:57:13
ゲームとか暗号とか通信とかで役立つ>ビット演算
あと趣味
0424デフォルトの名無しさん2005/09/06(火) 04:14:27
ビットフィールドを理解できない厨房がよく使う
0425デフォルトの名無しさん2005/09/06(火) 04:39:54
FLAG flag = { 0 };

flag.a = 1;
flag.b = 1;
flag.e = 1;
flag.j = 1;

hoge(flag);

テラメンドス
0426デフォルトの名無しさん2005/09/06(火) 04:44:12
あそうだ。ビットシフトは2のn乗の計算がサクっとできるという利点があった。
0427デフォルトの名無しさん2005/09/06(火) 08:35:43
コピペにマジレスするのはやめてくれ
0428デフォルトの名無しさん2005/09/06(火) 09:06:52
マジレスしかしないってあの娘と約束したんだ……
0429デフォルトの名無しさん2005/09/06(火) 09:10:27
>>428
氏ねよ
0430デフォルトの名無しさん2005/09/06(火) 09:58:40
 ∧||∧
(  ⌒ ヽ 氏ねだと!? よし、死んでやる。 さきに死ねば、
 ∪  ノ  天上ではこちらが先達だ。 雑用にこき使ってやるから見ておれよ
  ∪∪
0431デフォルトの名無しさん2005/09/06(火) 10:02:52
C++ C#にくらべてCって何か利点あるんですか?
0432デフォルトの名無しさん2005/09/06(火) 10:07:13
>>431
コンパクト
0433デフォルトの名無しさん2005/09/06(火) 12:05:23
・より多くのプラットフォームに対するコンパイラがある。
・脱落する人が比較的少ない。
・C# とは比べるのが面倒になるくらい別物。
0434デフォルトの名無しさん2005/09/06(火) 12:09:30
コンパイラあるならC++使えって感じ
0435デフォルトの名無しさん2005/09/06(火) 12:18:11
Cスレで何を言ってるんだ?
0436デフォルトの名無しさん2005/09/06(火) 12:55:50
レスありがとうです
0437デフォルトの名無しさん2005/09/06(火) 13:45:28
劣悪な(開発・実行)環境にいるならC使えって事だな。
0438デフォルトの名無しさん2005/09/06(火) 14:27:51
>>52

おれは直角 / 小山ゆう
0439デフォルトの名無しさん2005/09/06(火) 14:37:40
>437
ライト環境と受け取りました
0440デフォルトの名無しさん2005/09/06(火) 14:47:52
組み込み
0441デフォルトの名無しさん2005/09/06(火) 14:55:27
返り値を返せと良く言われますが、void の関数でも
返り値を返すべきなの? その場合は、return NULL
にすべきなの? 返さないとどうなるの?
0442デフォルトの名無しさん2005/09/06(火) 15:01:09
voidなら戻り値不要。
return NULL; はNULLポインタを返すって意味だから
return; とだけ書けばいいし、関数の最後ならいちいちreturnする必要はない。
0443デフォルトの名無しさん2005/09/06(火) 15:43:40
>>441
可能ならvoidを使わず成否をちゃんと返せ
0444デフォルトの名無しさん2005/09/06(火) 16:00:29
>>441
やればわかることだと思うが、void の関数で return で値を返そうとすると
普通はコンパイルエラーになってコンパイル不能。
0445デフォルトの名無しさん2005/09/06(火) 16:12:01
>>444
void func(void) {
    return (void)1;
}
0446デフォルトの名無しさん2005/09/06(火) 16:24:46
>>444
んなこたない
0447デフォルトの名無しさん2005/09/06(火) 16:44:02
>>444
エラーじゃなくて警告な。
別に値返しても、使えなくて意味がないだけで、有害なわけじゃないからな。

>>445
それ、警告出るコンパイラと出ないコンパイラがあったと思う。
0448デフォルトの名無しさん2005/09/06(火) 17:07:52
C言語だと思うんで、質問します。よろしくお願いします。

csv形式のファイルがあり、ファイルから一行データを取得しました。
その内容が 整数,実数 であり、整数と実数に分けたいんですけど
どうすればできますか?
例 123,0.123 っていうデータがありました。
123と0.123を分けるにはどうしたらいいんでしょうか?
0449デフォルトの名無しさん2005/09/06(火) 17:09:17
文字列中に . があるかどうか
0450デフォルトの名無しさん2005/09/06(火) 17:09:43
>>448
面白くねえぞ?
0451デフォルトの名無しさん2005/09/06(火) 17:18:58
>>450
いやいやマジ質問ですよ!!
>>449 
もうちょい詳しく教えてください!
0452デフォルトの名無しさん2005/09/06(火) 17:20:00
strtokでいいだろ
sscanfでもできるけど
0453デフォルトの名無しさん2005/09/06(火) 17:21:42
http://pc8.2ch.net/test/read.cgi/tech/1123661447/702
0454デフォルトの名無しさん2005/09/06(火) 17:26:44
>>453
これ俺っす!
0455デフォルトの名無しさん2005/09/06(火) 17:26:57
>>448
int intValue;
double doubleValue;
if (sscanf("123,0.123", "%d,%lg", & intValue, & doubleValue) < 2) {
/* Illegal data? */
}
0456デフォルトの名無しさん2005/09/06(火) 17:27:55
アフォ
0457デフォルトの名無しさん2005/09/06(火) 17:29:54
>>454
ttp://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:14
>>457
2ちゃんねるでクロスポストする方法ありますか?
0461デフォルトの名無しさん2005/09/06(火) 18:15:43
>>448
とりあえず、ここからはでてけ。
(あれだけレスもらって、仕様の確認指摘されてて…)
0462デフォルトの名無しさん2005/09/06(火) 18:25:47
>>458
Google で検索して上から調べていくべし。
すぐ見つかる。
0463デフォルトの名無しさん2005/09/06(火) 18:56:17
>>441
voidの関数から値を返すと未定義動作
だから値を返しちゃいけない
>>444は値を返してるわけじゃないから問題ない
0464デフォルトの名無しさん2005/09/06(火) 23:17:32
コマンドプロンプトで始めにcd c  って打つんですけど指定されたパスが見つかりません
って出ます。何でですか?  ファイル名c です。」
0465デフォルトの名無しさん2005/09/06(火) 23:18:27
ウゼー
0466デフォルトの名無しさん2005/09/06(火) 23:19:13
>>464
100歩譲ってもC言語じゃないぞ
初心者板いけ
0467デフォルトの名無しさん2005/09/06(火) 23:25:44
初心者です。
C言語にはremoveとかunlinkはあるのに、
何故ファイルコピーの関数?は無いんでしょうか?

あと、ファイルコピーにfgets,fgetcを使ってるのは見つけたのですが、
freadは見当たりません。処理速度の問題ですか?


0468デフォルトの名無しさん2005/09/06(火) 23:33:41
>>467
CopyFile

既存のファイルを新しいファイルへコピーします。

CopyFileEx 関数は、2 つの追加機能を提供しています。CopyFileEx は、コピー操作の特定の部分が完了するたびに、指定された 1 個のコールバック関数を呼び出すことができます。さらに、コピー操作の最中にこの関数を中止することもできます。

BOOL CopyFile(
LPCTSTR lpExistingFileName, // 既存のファイルの名前
LPCTSTR lpNewFileName, // 新しいファイルの名前
BOOL bFailIfExists // ファイルが存在する場合の動作
);
0469デフォルトの名無しさん2005/09/06(火) 23:38:14
exitって関数、俺の知らぬ間に勝手に呼ばれるの?
0470デフォルトの名無しさん2005/09/06(火) 23:39:26
>>467
基本はfopen,fread,fwriteの組み合わせでファイルを操作する。
バイナリ、テキストモードを調べろ。ftell fseekも要参照。
他にもあるが後は自分で調べろ。
0471デフォルトの名無しさん2005/09/07(水) 00:11:00
ファイルを読み込む前にそのファイルのデータの入れ物を用意するのに
ファイルのデータサイズが知りたいのですが、どうやったら取得できるのでしょうか?
0472デフォルトの名無しさん2005/09/07(水) 00:11:22
>>468
Win32APIじゃねーか
0473デフォルトの名無しさん2005/09/07(水) 00:32:25
>>449,452,453,455
ありがとうございます!とても助かります!お礼遅くなってすみません。。。
0474デフォルトの名無しさんNGNG
>>469
main()からリターンすると、exit()と同等の処理が行われる(と思う)
0475デフォルトの名無しさん2005/09/07(水) 01:20:20
>>467
標準関数では、ファイルシステムに依存するような関数は省かれている。
だから、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
>>476
その論理演算の結果が使われているわけではないから、printf()の戻り値は考慮する必要がない。
尤も、printf()はきちんと意味のある戻り値を戻しているが、それはmanページでも自分で調べよ。
0478デフォルトの名無しさん2005/09/07(水) 01:37:17
>>477
レスありがとうございます
調べてみます
0479デフォルトの名無しさん2005/09/07(水) 02:15:54
while((c = getchar()) != EOF){
if(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:06
>>479
ungetc()自体はMSDNで調べるなり、ググればすぐに見つかるが
指定した入力ストリームに一字押し込む
んで、getcharで取り出したcは演算子の判別に使用してるし
数字はscanfで取り込んだ方が手間が掛からないから、その為に
演算子か数字かの判定用に取って来ちゃったcを押し戻してる
0481デフォルトの名無しさん2005/09/07(水) 02:56:46
>470
有難うございます。

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:23
>>480
ungetcは一応調べたのですが、ピンとこなかったので質問させていただきました。
自分でも理解しているかどうかわかりませんが、
getcharにより最初の文字が取り出される、というあたりで
なんとなくわかった気がします。
ありがとうございました。
0483デフォルトの名無しさん2005/09/07(水) 03:19:41
>>482
分かったっぽいが一応

要は入力ストリーム=1文字ずつ入ったコンテナが乗ったベルトコンベアと思えばいい
getcharはそこから最初のコンテナを下ろして中身を取り出す
ungetcはある文字をコンテナに入れてコンベアの先頭に強引に載せる
0484デフォルトの名無しさん2005/09/07(水) 07:37:30
>>481
判っているのか判っていないのか判らないからフォローしておくと、
入力用ストリームは出力できない。つーか、それじゃコピーにならないやん。
それと、filelength()だけのために低水準を使うのは感心しない。
stat()かなにかでサイズを得る方がいいかもしれない。
#ま、その辺は環境依存にもなってくるので詳しくは各環境のスレででも。
0485デフォルトの名無しさん2005/09/07(水) 07:52:57
C言語のシンボルの認識順序って

1 プリプロセッサ
2 予約語
3 関数内のローカル変数(static変数含む)
4 関数内のgotoのラベル
5 関数外のグローバル変数、関数(static変数、関数含む)

上の番号で並べるとどういう順番ですか?

自分は 1→2→3→4→5
という認識ですが、これで合ってますか?
(ラベルの扱いがよくわからない)

0486デフォルトの名無しさん2005/09/07(水) 10:10:14
>>481
あまりにも突込みどころ満載過ぎて誰も突っ込んでないようだが。

初期化されてないポインタのbufferにそのまま書き込んでるぞ。

別にファイル丸ごと読み込んで書き込まなければならない
理由はどこにも無い。それだとデカいサイズのファイルをコピーする
際に無駄にメモリを食うことになる。
適当なバッファサイズ(例えば4096とか8192とか)単位で
読み書きするループをまわす方が穏当だし、これだとファイルサイズ
を調べる必要も無くなる。

fopen()で開いたものはclose()ではなくfclose()で閉じる。
stdioのデフォルトはテキストモードなので、ファイルコピーの
ような場合は、明示的に"b"オプションを指定してバイナリモードに
する必要がある。その区別が存在するのはMS-DOSやWINDOWSなどだが、
区別の存在しないUNIXのようなOSで"b"オプションをつけても
害は無いので、つけておいたほうが良い。

fopen()で開くのなら、fileno()でディスクリプタを取得して
fstat()を使うことは可能で、その場合は最初にわざわざ別途に
open()、close()する必要は無い。これは無論ISO標準の範囲外の
話になるが、まあ大抵の環境では使えるだろう。
ちなみにfilelength()とかいう怪しい関数は(f)stat()と違って
ちっとも移植性が無い。
04874812005/09/07(水) 10:11:33
>>486
有難うございます。

ただ、レスがちょっと長いので3行くらいにまとめてもらえないでしょうか?
0488デフォルトの名無しさん2005/09/07(水) 10:13:42
>>487
そんだけ突っ込みどころがあるってこと。
バグの指摘と、モアベターな方法のサジェスチョンが混じってはいるが。
0489デフォルトの名無しさん2005/09/07(水) 10:21:32
いやだから、スレ違いのマヌケ(>>1嫁)に
能無しの厨が得得と語るなと……
0490デフォルトの名無しさん2005/09/07(水) 10:28:20
>>485
「1」はコンパイルを行なわれる前に実施される。
コンパイラがソースを先頭から舐めて、これは予約語とかこれはラベルとか認識していると思っているなら間違い。
その質問の回答が来ても「字句解析を行ない、構文木を作成し云々」
という様にコンパイラが何をしているかを知らなければ回答が理解出来ない。
「コンパイラを勉強して再度質問する」「なぜそんな事が知りたいかを説明する」
のどちらかの行動をお勧めする
0491デフォルトの名無しさん2005/09/07(水) 10:30:44
>>481
>>484
0492デフォルトの名無しさん2005/09/07(水) 11:58:15
>>490
まったく参考になりませんでした。
他の人お願いします。
0493デフォルトの名無しさん2005/09/07(水) 11:58:32
ワロタ
0494デフォルトの名無しさん2005/09/07(水) 12:35:58
>>481
あきらめてsystem()使え
0495デフォルトの名無しさん2005/09/07(水) 16:44:29
>>485
プリプロセッサはコンパイルより前に解析される。
あとは、字句が出てきた時に、それが予約語か識別子(予約語でない)かが判定される。
識別子がどういう意味を持ってるかは、文脈から適宜判断される。
04964712005/09/07(水) 19:26:31
すみません自己解決しますた

fseek(f,0L,SEEK_END);
size = ftell(f);
fseek(f,0L,SEEK_SET);

でファイルサイズ取得できますた
0497デフォルトの名無しさん2005/09/07(水) 20:40:54
bccを今日始めて入れてhello wordを出す事に成功したのですが
一緒に
hello.tds
hello.obj
と言う変なファイルだ出てきてしまいました。

これはいったい何なのでしょうか?説明お願いします。
0498デフォルトの名無しさん2005/09/07(水) 20:43:17
こんばんわよろしくお願いします
typedef struct _tagMainteRec
{
int nWave;
double dValue;
} MAINTEREC;
MAINTEREC Rec; convert←(値が入ってるとします)
この構造体のメンバに値をいれたいんですけど
どうすればできますでしょうか?

よろしくお願いします。
0499デフォルトの名無しさん2005/09/07(水) 20:50:40
>>497
hello.exeを作るうえでの中間ファイルなんで気にしないでOK
0500デフォルトの名無しさん2005/09/07(水) 20:52:23
>>498
convertは何を意味してる?
それだと型が指定されてないからコンパイルエラーになるぞ。

いまいち質問の意味がわからんが、Recのメンバに値を入れるなら
 Rec.nWave = (整数値);
 Rec.dValue = (実数値);
 Rec = (MAINTEREC型の変数);
0501デフォルトの名無しさん2005/09/07(水) 22:32:03
gccのエラーメッセージ一覧を探してネットをさまようも見つかりません。
過去ログ(8)にはgcc manualに載っているとあったので読んでみましたが、
それらしい記述は見当たりませんでした。載っているのはコマンドラインの
オプションだけ・・・。どなたかご存じないでしょうか?よろしくお願いします。
0502デフォルトの名無しさん2005/09/07(水) 23:00:51
>>499
ありがとうございます。
0503デフォルトの名無しさん2005/09/07(水) 23:50:33
11 40 8F 20 9E 40 40 EA EA CD FF FF FF CD 2E 4D 65 65 7E.......
なんて続くバイト列あるんだけどこれ
u_char *になっててテキトウに80バイトぐらい長さあります。

この中からNバイト目にXが存在するかどうかによってこのデータを保存する処理内容を変えたいのですが
一番速い方法ってどんな方法あるか教えてください。
0504デフォルトの名無しさん2005/09/08(木) 00:00:02
>>503
if (string[N] == X)?
0505デフォルトの名無しさん2005/09/08(木) 00:04:28
>>501
エラーメッセージリストはやっぱりないような気がするけど
gccのマニュアルで役に立つのはmanpageじゃなくて
info gccの方だよ。
0506デフォルトの名無しさん2005/09/08(木) 00:10:05
sprintfについての質問です。
sprintfは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
sprintfの返値は出力したバイト数だっけ?
なるほど、こんな使い方があったのか(←初心者
0508デフォルトの名無しさん2005/09/08(木) 00:16:19
>>506
buffer + j は &buffer[j] と同じ。
0509デフォルトの名無しさん2005/09/08(木) 00:25:52
>>508
&buffer[j]の&にはどういう意味があるんでしょうか?
0510デフォルトの名無しさん2005/09/08(木) 00:30:02
&はもうちょっと勉強すればそのうち出てくる。
buffer + j や &buffer[j] はbufferの j 文字目から、ということになる。
0511デフォルトの名無しさん2005/09/08(木) 00:30:52
アドレス演算子でしょ
0512デフォルトの名無しさん2005/09/08(木) 00:49:39
>>506
>>508も参考に。
bufferと単に書けば「buffer配列の先頭ポインタ」を意味する。
jには上の行でbufferの先頭から格納されたbyte数が入っているので
buffer+j は(ポインタに整数を加算していて奇異に見えるが)
上の行で格納された文字列の次をポイントする
0513デフォルトの名無しさん2005/09/08(木) 00:57:03
みんなはバッファはナニ使ってる?

unsigned char* ? それとも char* ?
変数名も bufだったりbuffだったりbだったりする?
0514デフォルトの名無しさん2005/09/08(木) 01:07:24
uint8_t buffer[100];
0515デフォルトの名無しさん2005/09/08(木) 01:37:46
>>513
俺はchar*
名前はbuf使って、追加で用意するときはbuff
それ以上になったらbuff1, buff2, ...って感じでしてる
0516デフォルトの名無しさん2005/09/08(木) 01:48:46
>>513
俺はchar []型だが
>>513はバッファをヒープに取るのか?
0517デフォルトの名無しさん2005/09/08(木) 01:49:19
>>500
ありがとうさんです!
0518デフォルトの名無しさん2005/09/08(木) 01:50:41
testtest.obj : error LNK2001: 外部シンボル ""bool __cdecl TakeStudy(char)" (?TakeStudy@@YA_ND@Z)" は未解決です
LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Debug/TestTest.exe : fatal error LNK1120: 外部参照 2 が未解決です

どういうエラーでしょうか?よろしくお願いします。
0519デフォルトの名無しさん2005/09/08(木) 02:40:56
>>518
main関数とTakeStudy関数の定義をもう一度見直せ
ライブラリを使ってるなら、パスやヘッダファイルもチェック
0520デフォルトの名無しさん2005/09/08(木) 03:03:25
>>516
大きさによるなぁ
どちらかというとまろやかなmalloc使うことが多いと思う
0521デフォルトの名無しさん2005/09/08(木) 03:10:01
>>506です。&は先頭アドレスを表すことは知っていたのですが
jが引っかかっていて何か別の意味があるのかと考えてしまい
>>509のような質問しましたが、>>510さんの説明で理解できました!
j文字目って事だったんですね、これでぐっすり眠れます。
皆さんありがとう^^
0522デフォルトの名無しさん2005/09/08(木) 16:15:01
>>519
やっと見直せました。自作関数の定義の仕方が間違ってました。。。。アフーーー!!
ありがとうございます!
0523デフォルトの名無しさん2005/09/08(木) 22:25:08
Linuxでメモリ管理を自分で行いたいのですがmallocが遅くてどうにもならないので
自分で管理しないと行けないのですが、参考文献や常套手段などありました教えてください。
 あとsseを使用してmemcpy実装したけど、全然速くないのですがこれって自分がファビョってるだけですよねぇ
0524デフォルトの名無しさん2005/09/08(木) 22:44:54
>>523
馬鹿かお前は
いや、お前は馬鹿だ
0525デフォルトの名無しさん2005/09/08(木) 23:11:13
>>523
はじめにmallocで大量にメモリを確保して
first fitなりを実装汁

>>524
場かはおまえ
0526デフォルトの名無しさん2005/09/08(木) 23:34:32
>>525
おいおい・・・釣りだよな?
0527デフォルトの名無しさん2005/09/08(木) 23:49:18
>>525
mmapで実装すればいいのですか?
それともPosix共有メモリで実装すればいいのですか?
0528デフォルトの名無しさん2005/09/09(金) 00:05:26
>>523
定石としては
・頻繁にメモリ確保/解放をしない
・無駄なコピーをしない
かね。
0529デフォルトの名無しさん2005/09/09(金) 00:08:46
>>528
なるほどそうなのですか
でもどうしても処理しようとすると最低でも6GBぐらいメモリが必要なのですが
これは分割して確保したほうがいいのでしょうか?
今このマシンメモリ16GB積んでいるのでメモリ取っても問題はないはずなのですが
0530デフォルトの名無しさん2005/09/09(金) 00:20:08
>>529
最初にでっかくとっとけ

最近は実際に使い始めるまで実メモリは確保されないんだから
0531デフォルトの名無しさん2005/09/09(金) 00:24:36
初心者です。VirtualAllocを使用し、構造体にメモリを割り当てようをしています。割り当ての成功or失敗は戻り値がNULLかどうかで判定できますが、何バイト割り当てられているのか�@で知る方法がわかりません。
下記�@の(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:39
>>529
64 ビット機で計算科学でもやってんの?
どうやるにしろメモリは確保しないといけないのだから、
ある程度時間かかるのはしゃーない。
メモリ食わないアルゴリズムを探せるなら探した方がいいけど・・・
ないなら仕方がないね。
0533デフォルトの名無しさん2005/09/09(金) 00:49:02
>>529
6GBって・・・
処理に最適と思われるサイズを1ブロックとする
メモリ管理を実装してもいっちゃね?
どっちにしろ最初に最大のブロック数を確保することに
なると思うが。

0534デフォルトの名無しさん2005/09/09(金) 00:59:44
なるほど、では最大1600000個の要素が入ってくるので
それように最初に頭とケツ押さえて確保してしまいます。
後は、中身を検査して、結合子の入れ替え演算はポインタの付け変えだけで
いいからなんとかなりそうです。ありがとうございます
0535デフォルトの名無しさん2005/09/09(金) 01:11:47
>今このマシンメモリ16GB積んでいるので
これは釣りだよな、絶対。
0536デフォルトの名無しさん2005/09/09(金) 01:14:43
>>534
分かってると思うけど、1ブロックは2の乗数にしてね。
演算はなるべくシフトで。
積み重なったときの速度は全く変わってくるから。

0537デフォルトの名無しさん2005/09/09(金) 01:47:14
>>535
CPU:AMD Opteron
Chipset:AMD 8131/8111
使用してます。メモリだけで時価で1枚2万以上したと思います。
1GBx16枚積んでいます。
0538デフォルトの名無しさん2005/09/09(金) 04:26:38
(゚д゚ )ポカーン 俺のHDDよりでかい
0539デフォルトの名無しさん2005/09/09(金) 06:31:55
>>523
mallocが遅い、というのはどういう計測の結果確認できたのですか?
原則的に、実装の問題だけでなく、使い方(呼び出し回数等)の問題も
小さくは無いなずなので。(つうか、processの大きさ自体にも……)
(いや、自分のmemcpy()との実装比較もうまくやれて無いようなので、
判断の根拠が気になる……)
0540デフォルトの名無しさん2005/09/09(金) 07:17:25
allocした領域をfreeしてもタスクマネージャーで確認できる
メモリ使用量が減らないのですが、メモリ使用量を減らすにはどうすればよいですか。
過去ログによると

http://nssearch.hp.infoseek.co.jp/clang/1072212403.html#x937
多くの実装においてmalloc族で確保したメモリは
プロセスが生きている限りOSに返されることはない。

らしいのですが、きちんとfreeしてあるのに減らないと、重いアプリだと思われますよね。
0541デフォルトの名無しさん2005/09/09(金) 08:00:08
C言語関係ないじゃん
0542デフォルトの名無しさん2005/09/09(金) 09:32:52
malloc遅いってのは、確保する容量大きいので
ひょっとして認識できる程時間かかったりするんだろか
そんな環境使った事ないからわかんね

>>531
Win32APIなら該当スレへ、ここじゃない
0543デフォルトの名無しさん2005/09/09(金) 10:24:55
#include <stdio.h>
#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 );
↓
scanf ( "%d ", &kotae );
0546デフォルトの名無しさん2005/09/09(金) 11:48:58
>>523
6GB...もちろんLinuxは64bitOSだよな。
32bitOSだとアドレス空間は2GBまでしか確保できないはず...

> mallocが遅くてどうにもならないので
本当にmallocが遅いのか?実はその次のmemsetでの初期化が遅いとかないか?
prof , gprofを使ってボトルネックを探した方が早い様な気がする。
0547デフォルトの名無しさん2005/09/09(金) 11:54:38
>>544

>>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
いや、>>534 なんかみると、単に無駄にちまちま mallocしてるだけで
手際が悪いだけに見えるんだが、まあ、みんな疑問なのは、
本当に mallocのせいか? mallocの実装より単に大きいブロックから
切り分けりゃいいだけじゃね? ほんとに手順上その sizeが必須なのか?
とさまざまな突込みどころが… (memcpy SSE実装とかも…)
そもそもこれが、
>>Linuxでメモリ管理を自分で行いたいのですがmallocが遅くてどうにもならないので
>>自分で管理しないと行けないのですが、
<<Linuxでmallocが遅くてどうにもならないのでメモリ管理を自分で行いたいのですが
じゃないのがとてもワロタ(ひきつった)。でも激しくスレ違い。
0550デフォルトの名無しさん2005/09/09(金) 12:25:25
>>523
548の意見に賛成。
緩衝メモリエリアを設ける方法がいい。
OSの方にも似たような機構があるだろうけどGB単位のバッファは想定外でしょう。
何を計算させるかわからないけど、数値データの初期化だけでもえらく時間がかかりそう
0551デフォルトの名無しさん2005/09/09(金) 12:31:30
memcpy SSEってSSE2のことだよな。

worldのリコンパイルの時コンパイルオプションでアーキテクト指定できるから
すでに対応しているような気がするが。
0552デフォルトの名無しさん2005/09/09(金) 13:05:52
>>548,550
おそらく534だと、ほとんど同じようなcellをリストで使うのだろうから、
空セルのリストの先頭を持てばいいだけだろうな。文字列分の生成とかも
必要だと、その種のプールではほとんど意味無いし。
どのみち profileぐらいとったボトルネック評価もしないでいじっても無意味。
0553デフォルトの名無しさん2005/09/09(金) 13:31:19
#include <stdio.h>
#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:56
}else{
suraimu = 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
553 554をかきこんだものですが、
コンパイルするとどうしても
8行目のところで宣言の構文エラーとでてしまいます
なぜでしょうか 詳しい方おしえてください
おねがいします
0556デフォルトの名無しさん2005/09/09(金) 13:34:18
>>555
自分で考えろ
この程度で書き込むな
0557デフォルトの名無しさん2005/09/09(金) 13:34:25
>>555
> int p_turn = 1
セミコロンが抜けてる。
0558デフォルトの名無しさん2005/09/09(金) 13:35:45
>557
スペシャルありがとうございます。
0559デフォルトの名無しさん2005/09/09(金) 14:03:33
(;´Д`)
0560デフォルトの名無しさん2005/09/09(金) 14:34:09
いつからここはケアレスミスを見つけるスレになったんですか?
0561デフォルトの名無しさん2005/09/09(金) 15:06:46
何この流れ
脱力空笑いな俺がいる
0562C勉強中2005/09/09(金) 16:00:46
#include <stdio.h>

main ( ) {
char *str[ ] ={"hoge"};

printf("%d",str+2);
printf("%c", *(str+2));

return 0;
}
基本的なことですいません。このプログラムだと結果が(アドレス)ヨになってしまいます。
*(str+2)ではgがでてこないのでしょうか。詳しい方おしえてください
おねがいします
0563デフォルトの名無しさん2005/09/09(金) 16:03:41
>>562
変数宣言おかしくないか?
char str[]={"hoge"};でいいだろ
0564C勉強中2005/09/09(金) 16:08:44
>563
ありがとうございます。ポインタをもっと勉強しておきます。
0565デフォルトの名無しさん2005/09/09(金) 16:44:24
>540
メモリファイルシステムにしてmmapでやればぁ〜
0566デフォルトの名無しさん2005/09/09(金) 17:00:01
>>540
いちいち返してると返すたびにオーバーヘッドが発生して重いアプリだと思われるかと
0567デフォルトの名無しさん2005/09/09(金) 17:35:26
if (!RegisterClass(&wc))

これはどういう意味なのでしょうか?
0568デフォルトの名無しさん2005/09/09(金) 17:35:58
char型の文字型配列に
abcdefg
と入っている時、
cde
のみ取り出して、別のchar型文字列に入れるにはどうしたら良いでしょうか?
strcpyなどは「"先頭の"何文字をコピーする」なので使えませんよね。
お願いします。

0569デフォルトの名無しさん2005/09/09(金) 17:38:46
>>567
RegisterClassが失敗した場合分岐

>>568
string + 2をstrncpyに渡せば途中から取れると思うけど
0570デフォルトの名無しさん2005/09/09(金) 17:39:36
>>568
strchrまたはstrstr+strncpy
0571デフォルトの名無しさん2005/09/09(金) 17:44:01
>568

char *s = "abcdefg";
char dst[64];
strncpy( dst, s+2, 3 );
0572デフォルトの名無しさん2005/09/09(金) 17:45:08
>>563
それも可能ではあるけど、
普通は char str[]="hoge"; だな。
05735682005/09/09(金) 17:50:19
>>569,571
そのような使い方が出来るとは・・・勉強が足りませんでした。

>>570
ポインタ等は理解していないので使いたく無いんです(ので逃げていました)。
これを機会に勉強します。

ありがとうございました。
0574デフォルトの名無しさん2005/09/09(金) 17:53:18
>>568
char * 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
C言語を勉強できるフリーソフトでオススメなのはありますか?
ちなみに授業ではBCCというのを使ってます。
0576デフォルトの名無しさん2005/09/09(金) 18:50:15
BCC か GCC
0577デフォルトの名無しさん2005/09/09(金) 18:51:31
.NET Framework開発ツールでCコンパイラも落とせる
0578デフォルトの名無しさん2005/09/09(金) 18:52:30
てか、授業で BCC 使うんなら、
BCC 使ったんでええんでないかい?
エラー・警告メッセージも同じだし。
0579デフォルトの名無しさん2005/09/09(金) 18:58:25
BCCっててっきり製品かと思ってたらフリーだったんですね・・・
お騒がせしました。
0580デフォルトの名無しさん2005/09/09(金) 19:00:01
コンパイラだけならね。 >フリー
開発環境込みだと有料。
ただ、フリーの開発環境もある(検索すればすぐ出てくる)。
0581デフォルトの名無しさん2005/09/09(金) 19:04:29
>>580については
http://pc8.2ch.net/test/read.cgi/tech/1091066805/10
0582デフォルトの名無しさん2005/09/09(金) 19:07:10
まだ入門書の1章とかなんで
とりあえず計算結果を表示できればいいんで
開発環境とかはさっぱりです。がとりあえず>>581も
見てみます。ありがとうございました。
0583デフォルトの名無しさん2005/09/09(金) 19:10:14
>>572
気を抜いてたから>>562に釣られて{}つけた
特に反省はしてない
0584デフォルトの名無しさん2005/09/09(金) 19:33:45
>573
Cはポインタが命 逃げ切れないよ
0585デフォルトの名無しさん2005/09/09(金) 19:33:57
>>583
というか、{ } 付きでも通るということに衝撃を受けた。
その間違いは、それはそれで糧になった。

まあ、何かのトリッキーなマクロくらいでしか使えそうにないけど。
0586デフォルトの名無しさん2005/09/09(金) 19:36:34
本格的に学ぶためには次にどんなことを学べばいいでしょうか?
やはりVisual C++などでWindowsのプログラミングを勉強したほうがよろしいでしょうか?
0587デフォルトの名無しさん2005/09/09(金) 19:49:18
>>586
Linuxをインストールして基本的なコマンドのソースを読むんだ
0588デフォルトの名無しさん2005/09/09(金) 19:51:29
>>587
それはダメだ
基本的ではないコマンドのコードを読むべき
lsとか面倒くさい
0589デフォルトの名無しさん2005/09/09(金) 19:53:33
>>586
あるオープンソースプログラムのクローン(ソースを見ずに独力で複製)を作って、
その後にソースを見比べてみる。
0590デフォルトの名無しさん2005/09/09(金) 21:03:44
>>587-589
grepのソース(コードとの違いはわかりません?)を見たんですが、
難しいですね。易きを求めてもキリが無いので、がっつり打ち込んでみます。
ところで何かお勧めのオープンソースプログラムはあるでしょうか?
0591デフォルトの名無しさん2005/09/09(金) 21:15:28
>>571
それは、末尾が\0終端されないという致命的な欠陥がある
0592デフォルトの名無しさん2005/09/09(金) 21:19:18
>>590
grep は正規表現だから、ちと難しいかも。
ワイルドカード程度なら簡単なんだけどね。
それでも頑張ってみるのもいいことだけど。

>ソース(コードとの違いはわかりません?)
コードの方が少し意味が広いけど、
文脈が同じなら、違いはない、筈。
0593デフォルトの名無しさん2005/09/09(金) 21:25:56
>>590
「打ちこむ」わけ?
0594デフォルトの名無しさん2005/09/09(金) 21:32:30
>>592
ついでなのでかじる程度にしか知らない正規表現も勉強したいと思います。

>>593
「Cの学習に打ち込む」の意です。
0595デフォルトの名無しさん2005/09/09(金) 21:33:37
最初はmvとかcpとかの方が取っつきやすいと思うな
0596デフォルトの名無しさん2005/09/09(金) 21:43:25
あるアドレスの中身を直接参照したいのですがどうすればいいですか?
0597デフォルトの名無しさん2005/09/09(金) 21:44:44
char *p = (char *)0xdeadbeaf;
とかそんな感じか?
0598デフォルトの名無しさん2005/09/09(金) 22:07:10
>>596
ありがとうございました
0599デフォルトの名無しさん2005/09/09(金) 22:08:53
>>597
申し訳ない
06005402005/09/09(金) 22:23:54
いちいちOSに返せないとなると、
このメモリ使用量増加現象は
メモリリークと何か違うのですか?
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:48
>>600
OS依存だからよそでやれやボケ
0602デフォルトの名無しさん2005/09/09(金) 23:04:23
メモリをOSに戻すか戻さないかは、malloc や free の実装者次第。

だから、仮に free がOSにメモリを戻さないような
ことがあっても問題なく動くコードを書くようにするのが
C使いの常識。
というか、malloc と free は本来そうやって使うためのもの。

よく世間で見られる malloc の後に free を呼び忘れないことに
血眼になっている奴等は、例えるならば
フェラーリで下町の路地を無理矢理通り抜けようとして
車体に傷がつかないように必死になっているようなもの。

正に馬鹿としかいいようがない。
0603デフォルトの名無しさん2005/09/09(金) 23:06:28
足立区のアパートにとまってたフェラーリ思い出したがな
0604デフォルトの名無しさん2005/09/09(金) 23:06:28
>>602
二段落目と三段落目とのつながりが無いわけだが
0605デフォルトの名無しさん2005/09/09(金) 23:07:08
↓free on exit開始
0606デフォルトの名無しさん2005/09/09(金) 23:10:48
exit(1);
0607デフォルトの名無しさん2005/09/09(金) 23:17:31
プログラムのの書き方ですが、約1000行のプログラムの場合
みなさんはどんな風に分けていますか?
僕の場合はメイン関数は基本的に関数を呼ぶだけで、
メイン関数への戻り値によって処理終了するか続行するかを決める処理なんですけど、
どうでしょうか?
関数内でエラーが発生したらそこから終了させてしまった方が見易いですか?
また、簡単な処理ならメイン関数に書くべきですか?
0608デフォルトの名無しさん2005/09/09(金) 23:21:21
>>607
それはC言語の話題ではない。
つ[プログラム設計方法論]
0609デフォルトの名無しさん2005/09/09(金) 23:29:21
>>604
mallc/freeに頼らずに自分でメモリ管理するべきということでしょ。
0610デフォルトの名無しさん2005/09/09(金) 23:30:39
愚の骨頂
0611デフォルトの名無しさん2005/09/10(土) 00:23:13
そして時代は繰り返される 〜malloc/free〜
0612デフォルトの名無しさん2005/09/10(土) 01:45:55
関数テーブルについて教えてもらいたいです。


typedef (*Matrix)(int ret);

Matrix matrix[] [10]={
{step_cnt, (関数名)..., ..., ..., ..., ..., ..., ..., ..., ...., }.
{other, (関数名..., ..., ..., ..., ..., ..., ..., ..., ..., }
};
のような形を使いたいのですが、調べたのですが全然わかりませんでした。

宣言の仕方、テーブルを呼び出す関数の作り方、渡す先の関数の作り方を
教えてもらいたいです。

0613デフォルトの名無しさん2005/09/10(土) 09:13:46
>>612
宣言はそれでいいはず。
呼び出すときはmatrix[0][0](0)のようにする。
0614デフォルトの名無しさん2005/09/10(土) 10:25:26
開けたら閉める
0615デフォルトの名無しさん2005/09/10(土) 10:38:38
>607
同じコーディングスタイル。
main以外ではexitしない方がいい。
0616デフォルトの名無しさん2005/09/10(土) 10:41:06
必要もないのにエラーを上位に伝播させても無駄なだけ
0617デフォルトの名無しさん2005/09/10(土) 10:47:11
Cならlongjmpという手も
0618デフォルトの名無しさん2005/09/10(土) 10:47:43
終了処理がなければな。
0619デフォルトの名無しさん2005/09/10(土) 10:52:27
>602
アホ
関数などの機能分割する意味が理解できていないのと
リソース解放の必要性が全く分かってない。
初心者が多い場所で602ワールドの常識をC使いの常識などと
吹聴するのはやめていただこうか。
0620デフォルトの名無しさん2005/09/10(土) 11:09:12
>616
必要があるように上位に伝播させているんだよ。
mainまで戻るのは終了させる必要がからじゃないの。
0621デフォルトの名無しさん2005/09/10(土) 11:54:45
エラー報告して終了するタイプのプログラムなら別にどこで終わっても良いと思うが、
途中の経路でリソース開放が重要なら関数が全部エラー返すようにするのが無難。

エラーしても継続して動作するアプリなら、607氏が悩んでる状況にそもそもならないと思う。
0622デフォルトの名無しさん2005/09/10(土) 12:10:31
>>607
void *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:24
要するに例外のないCは糞ってことだ
0624デフォルトの名無しさん2005/09/10(土) 12:23:13
いや、例外くらい自分で実装しろって事
0625デフォルトの名無しさん2005/09/10(土) 13:25:19
いっそCよりも制約のゆるいコンパイル言語ってないもんかねえ?

関数外へのジャンプやスタックポインタの明示的な操作もやり放題で。

各CPUへのコンパイラさえあれば、素のマシンコードへ無難に翻訳してくれるような。
0626デフォルトの名無しさん2005/09/10(土) 13:45:05
うるせえボケ
0627デフォルトの名無しさん2005/09/10(土) 14:00:40
C言語をはじめたばかりであまりわからないのですが、 
ピットシフトはなんの役に立つのでしょうか? 
0628デフォルトの名無しさん2005/09/10(土) 14:01:43
デジャヴ?
0629デフォルトの名無しさん2005/09/10(土) 14:21:01
>>628
俺も一瞬そう思ったけど、良く見ると「ピ」ットだぜ
0630デフォルトの名無しさん2005/09/10(土) 14:23:52
627=629=631
0631デフォルトの名無しさん2005/09/10(土) 14:29:24
お、おれ?
0632デフォルトの名無しさん2005/09/10(土) 14:35:31
ワロタ
0633デフォルトの名無しさん2005/09/10(土) 14:40:31
C言語をはじめたばかりであまりわからないのですが、
C言語厨はなんの役に立つのでしょうか?
0634デフォルトの名無しさん2005/09/10(土) 14:42:40
MACにC言語コンパイラってありますか?
06356122005/09/10(土) 15:40:23
>>613

matrix[y軸][x軸]();
としたいのですが、y軸をグローバル変数で宣言していて、
x軸をパラメータとして、この関数テーブルに渡したいのですが、その時は

void call_matrix(int *rec_info)
{
matrix[グローバル変数][*rec_info]();
}
の形でいいんでしょうか?
また、呼び出した先の関数に値やアドレスを渡さない時には
呼び出す先の関数は
void func(void)
{
...
}
でいいでしょうか?
0636デフォルトの名無しさん2005/09/10(土) 15:47:52
>>635
matrixにしまうのならMatrix型に合うようにint func(int)にしろ。
0637デフォルトの名無しさん2005/09/10(土) 15:53:44
if( ptr )

で、ptrがぬるぽだったら偽と評価されるの?
0638デフォルトの名無しさん2005/09/10(土) 15:57:04
>>637
そういうこと
0639デフォルトの名無しさん2005/09/10(土) 16:28:45
>>634
OSXならgccが使える。
Appleのサイトで開発環境を無料で入手可能。
0640名無しさん@そうだ選挙に行こう2005/09/10(土) 16:54:18
>>633
厨だと役に立たない
0641デフォルトの名無しさん2005/09/10(土) 16:58:17
>>639
開発環境は OS X についてきてる筈。
ただ、そのままではインストールされず、
Development Tools って CD が付いてきてるから、
それからインストールする。
0642名無しさん@そうだ選挙に行こう2005/09/10(土) 18:37:41
>>640
親切におしえていいただき、ありがたいのですが...
MACOS9なんです。最初にいうべきでしたね...
OS9対応でC言語のコンパイラはありませんか?
0643名無しさん@そうだ選挙に行こう2005/09/10(土) 18:52:37
>>642
MPW
0644名無しさん@そうだ選挙に行こう2005/09/10(土) 18:55:18
旧Macはコマンドラインがないというなかなか学習大変な環境だよな
0645名無しさん@そうだ選挙に行こう2005/09/10(土) 19:44:38
#include <stdio.h>

void 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
>>645
実際は「a〜z 以外の文字」と改行で2文字入力されるから。
期待しない文字だった場合は fflush(stdin) するようにすればいいかな?
0647名無しさん@そうだ選挙に行こう2005/09/10(土) 19:48:14
>>645
改行コードの処理
0648名無しさん@そうだ選挙に行こう2005/09/10(土) 19:48:49
ファイルAとBがあります。
A、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:47
>>648
Cを作れば?
0650名無しさん@そうだ選挙に行こう2005/09/10(土) 19:53:02
>>646
>>647
改行も処理されるんですね…orz
fflush(stdin)は便利なので、使っていきたいと思います

どうもありがとうございました
0651名無しさん@そうだ選挙に行こう2005/09/10(土) 19:57:46
>>646,650
入力バッファのフラッシュによる動作は一般に未定義。よって、
fflush(stdin)はあなた方の環境では偶然期待通りに動いているだけ。
ISO/IEC 9899:1999 7.19.5.2 The fflush function -2
06526482005/09/10(土) 19:57:49
>>649
そ、そうですね。

AをCにコピー
fr = fopen(PathC, "r");
fr2 = fopen(PathB, "r");
fw = fopen(PathA, "w");

とすれば出来ました。お恥ずかしい。
ありがとうございます。
0653名無しさん@そうだ選挙に行こう2005/09/10(土) 20:08:53
>>651
(; Д )       ゚ ゚
0654名無しさん@そうだ選挙に行こう2005/09/10(土) 20:18:39
>>653
>>653
06556462005/09/10(土) 20:22:39
>>645、スマソ(;´Д`)
06566122005/09/10(土) 20:35:05
>>636
ありがとうございます。
おかげで完成出来そうです。
0657名無しさん@そうだ選挙に行こう2005/09/10(土) 20:49:52
アルゴリズムに関する質問なのですが、いちおうC言語で開発していますので、
ここで質問させて頂きたいのですが、(それと、ここだとプログラムの専門家
の方が大勢いらっしゃると思うので)
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
>>657
画像処理スレや宿題スレがあるじゃないか
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:29
とっととPC初心者板で揉まれてこい
0662名無しさん@そうだ選挙に行こう2005/09/10(土) 21:19:30
>>660
初心者に質問する権利は(慣例上)無い。
0663名無しさん@そうだ選挙に行こう2005/09/10(土) 21:21:27
>>662
お前、慣例の意味わかってないだろ
0664名無しさん@そうだ選挙に行こう2005/09/10(土) 21:22:43
寒いところ
0665名無しさん@そうだ選挙に行こう2005/09/10(土) 21:26:13
>>660
c1じゃなくてcl(シーエル)
コマンドプロンプトはスタートメニューのプログラムのアクセサリの中にある。
06666602005/09/10(土) 21:30:14
>>665
助言ありがとうございます。
入力したら「ソースファイルを開けません」と出ました。
どうしたらいいでしょうか。
0667名無しさん@そうだ選挙に行こう2005/09/10(土) 21:31:50
ゆとり教育世代?
0668デフォルトの名無しさん2005/09/10(土) 21:32:42
まぁそういわずに。
0669名無しさん@そうだ選挙に行こう2005/09/10(土) 21:34:03
>>665>>668
責任もって最後まで答えてやれよ
0670名無しさん@そうだ選挙に行こう2005/09/10(土) 21:35:23
間も無く>>665によるwindows講座が始まります。お楽しみに。
0671名無しさん@そうだ選挙に行こう2005/09/10(土) 21:37:38
>>662-664
>>664寒冷前線じゃなくて
0672名無しさん@そうだ選挙に行こう2005/09/10(土) 22:18:00
ところでicrosoft.NETって初耳なんだが、いったいなんだ?
0673名無しさん@そうだ選挙に行こう2005/09/10(土) 22:21:13
こりゃあ完全に釣りだな。
0674名無しさん@そうだ選挙に行こう2005/09/10(土) 22:32:55
>>666
clの前に「cd ソースのあるディレクトリ」
0675名無しさん@そうだ選挙に行こう2005/09/10(土) 22:44:40
すいません。
初心者ですが
デバイスを解放せずにプログラムを終了させると
どうなるんですか?
0676名無しさん@そうだ選挙に行こう2005/09/10(土) 22:47:43
最近の若い者(モン)はDOSも(ry
06776752005/09/10(土) 22:51:25
次からそのデバイスが使用できなくしまうと
どこかの解説サイトにあったんですが・・・
0678名無しさん@そうだ選挙に行こう2005/09/10(土) 22:53:19
スレタイも読めないバカが多発中
0679名無しさん@そうだ選挙に行こう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
>>679
バイトならfread(buf, 1, 1, fp)だよ
0681名無しさん@そうだ選挙に行こう2005/09/10(土) 23:01:12
>>679
お前の書いたコードが悪い。
0682名無しさん@そうだ選挙に行こう2005/09/10(土) 23:04:45
>>680
ありがとうございます。
早速、取り掛かってみます。

>>681
すみませんでした。
できるだけ良いコードを書けるようにがんばります。
0683名無しさん@そうだ選挙に行こう2005/09/11(日) 00:39:41
C言語で作ったライブラリを呼ぶデモを行うため,GUIでデモ用のアプリケーションを作りたいと
思っています.C言語でGUIを作った場合,入力データの受け渡しは簡単だと思うのですが,
GUIを作るのが面倒だと思います.一方,tcl/tkみたいなスクリプトでGUIを作った場合,
GUIは簡単に作れるかわりに,データの受け渡しが面倒だと思います.
開発環境はwindows+cygwinなので,visual studio系は使えません.このような状況で
最も簡単なGUIアプリの作り方はどのような方法が考えられますか?
0684名無しさん@そうだ選挙に行こう2005/09/11(日) 00:43:01
>>683
>>1も読めない文盲か。
0685名無しさん@そうだ選挙に行こう2005/09/11(日) 01:10:17
>>683
ATL/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
>>680
それは getc(fp) と同じだ。
0687名無しさん@そうだ選挙に行こう2005/09/11(日) 07:52:53
>>683
CGI
0688名無しさん@そうだ選挙に行こう2005/09/11(日) 11:57:07
宿題は専門の別スレあるってかいてあるけどスレ名なんていう名前ですか?
0689名無しさん@そうだ選挙に行こう2005/09/11(日) 12:09:14
atta
0690名無しさん@そうだ選挙に行こう2005/09/11(日) 12:22:23
>688
まず2chブラウザを入れろ
そうしたらスレ一覧から宿題で検索。

おまえの評価はCだ
0691名無しさん@そうだ選挙に行こう2005/09/11(日) 12:35:31
>>686
fgetc
0692名無しさん@そうだ選挙に行こう2005/09/11(日) 13:22:02
int (*pfunc)(void *);
pfunc = NULL;
これって合法?
0693名無しさん@そうだ選挙に行こう2005/09/11(日) 13:30:02
ポインタにNULL入れちゃいけないなんて決まりないでしょ。
そこを参照しちゃ駄目だったと思うけど。
0694名無しさん@そうだ選挙に行こう2005/09/11(日) 13:36:06
カンチガイしてた。ありがと。

やっちゃいかんのは
int func(void *arg) { /* ... */ }
void *pfunc = func;
だな。
0695名無しさん@そうだ選挙に行こう2005/09/11(日) 14:01:38
1:int *pfunc = func;
2:void (*pfunc)() = func;
3:int (*pfunc)() = func;
0696名無しさん@そうだ選挙に行こう2005/09/11(日) 15:15:01
キャストすれば可能だがな。
0697名無しさん@そうだ選挙に行こう2005/09/11(日) 17:00:03
>>692-693
NULLがこう定義されているとアウト。
#define NULL (void *)0
オブジェクトへのポインタを関数へのポインタに変換するのは処理系依存か何か。
0698名無しさん@そうだ選挙に行こう2005/09/11(日) 17:55:16
>>697
>オブジェクトへのポインタを関数へのポインタに変換するのは……
空ポインタの場合はキャストによる型変換が許されている => JISX3010 6.3.2.3
さらに空ポインタ定数の場合は自動的に型変換される => JISX3010 6.5.16.1
それ以外は未定義
0699名無しさん@そうだ選挙に行こう2005/09/11(日) 18:27:16
>>698
C99で改良されていたのね。スマソ
0700名無しさん@そうだ選挙に行こう2005/09/11(日) 20:42:00
>>699
ヌルポインタに対する特例は前からあるよ
0701デフォルトの名無しさん2005/09/11(日) 21:18:08
ポインタのポインタのポインタのポインタ

いやあああああああああああああ
0702名無しさん@そうだ選挙に行こう2005/09/11(日) 21:38:37
>>701
そこまで行くと一度設計を見直したほうがいいような気がする。
0703名無しさん@そうだ選挙に行こう2005/09/11(日) 21:54:41
ヌポポポポポッ
0704名無しさん@そうだ選挙に行こう2005/09/11(日) 21:55:53
ポインタの指す構造体のメンバの
ポインタの指す構造体のメンバの
ポインタの指す構造体のメンバの
ポインタの指す構造体のメンバの
・・・・orz・・・・
0705名無しさん@そうだ選挙に行こう2005/09/11(日) 22:02:02
ツリー構造表現すりゃそうなる罠
別に悪いことじゃない
0706名無しさん@そうだ選挙に行こう2005/09/11(日) 22:49:29
>>702
Cならありえるしtypedefで隠すことだって出来る
まあ設計の見直しは大切だな
0707名無しさん@そうだ選挙に行こう2005/09/11(日) 23:20:01
流石に4重ポインタとなると、
多重配列を動的に確保する時にしか
使いどころがない気がする。
0708名無しさん@そうだ選挙に行こう2005/09/11(日) 23:21:49
ポインタをいっぱい使うとエライ人に褒められるからな
0709名無しさん@そうだ選挙に行こう2005/09/11(日) 23:30:59
>>708
それは「エライ」人だな。

「イタイ」人とも言う。
0710デフォルトの名無しさん2005/09/11(日) 23:57:39
ポインタいっぱい使うようなものなら
最初からC++で書けばいいのに
0711デフォルトの名無しさん2005/09/12(月) 07:06:19
int main(void)
{
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
>>711
最後のprintfからcounterは乗算・除算を行った回数を計測するようだ。
forの条件式でprime[i] * prime[i]を行っているので、ここで1回。
その次、no % prime[i]も除算なので、ここでも1回。
別におかしくもなんともないな。
0713デフォルトの名無しさん2005/09/12(月) 07:36:11
>>712
理解できました!
ありがとうございます。
0714デフォルトの名無しさん2005/09/12(月) 17:18:43
int var = 12345; として fscanf(fp, "%d", &var);
が失敗(EOFか0が返る?)した場合、var の内容は
12345 のままですか?
0715デフォルトの名無しさん2005/09/12(月) 17:21:51
です
0716デフォルトの名無しさん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
>>716
ひょっとしてそれはギャグでやってるのか!?
関数テーブルについて自分で何も調べないで質問してるとしか思えない!
0719デフォルトの名無しさん2005/09/12(月) 17:40:54
>>717
同じではあるけど、括弧つけといた方が読みやすい。
0720デフォルトの名無しさん2005/09/12(月) 17:50:24
>>719
ありがとうございました。
0721デフォルトの名無しさん2005/09/12(月) 18:07:03
>>716
配列cは関数ポインタの関数でなければならない。
関数ポインタの書き方をもう一度良く調べろ。
07227212005/09/12(月) 18:08:01
ミスった
×関数ポインタの関数
○関数ポインタの配列
0723デフォルトの名無しさん2005/09/12(月) 18:15:31
int (*manko[])(int) = {unko,tinko};
0724デフォルトの名無しさん2005/09/12(月) 18:45:43
>>721
別にintでも大丈夫だよ
呼び出すときに関数のポインタへキャストすれば
ただしintがポインタを表現できる幅を満たしてないとだめだけど
0725デフォルトの名無しさん2005/09/12(月) 18:48:49
あふぉ
0726デフォルトの名無しさん2005/09/12(月) 19:23:02
せめてvoid* にしとけよ。
0727デフォルトの名無しさん2005/09/12(月) 19:56:40
汎用パラメータとして int に何でもかんでも渡すということはするね。
0728デフォルトの名無しさん2005/09/12(月) 19:57:52
>>727
MS-DOSや64bitマシンでは通用しない技
0729デフォルトの名無しさん2005/09/12(月) 20:04:43
>>723 分かりました、unko と tinko がピンポイントで manko に入っているんですね!
0730デフォルトの名無しさん2005/09/12(月) 20:38:19
int unko(int a){ return a; }
short 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
>>728
・MS-DOS
 near ポインタになら使えるんじゃ?
 far ポインタも間接的になら渡せなくもないが、
 long にした方がスマートか?

・64ビット機
 32ビット互換モードで動いてたら問題ない。
 あと、int が 64 ビットなら使える(普通は 32 ビットみたいだが)。
 これも long にすればいいか。

というか、普通は typedef だな。
LPARAM とか代表的な利用例。
0732デフォルトの名無しさん2005/09/12(月) 20:56:06
LPARAMとか代表的なアンチパターン
0733デフォルトの名無しさん2005/09/12(月) 21:21:58
win32apiのキチガイじみたtypedef・・・
0734デフォルトの名無しさん2005/09/12(月) 21:33:31
むしろ#defineの方がちょっとおかしいと思う
0735デフォルトの名無しさん2005/09/12(月) 21:39:41
このスレとしてはintptr_tやuintptr_tだろ。
0736デフォルトの名無しさん2005/09/12(月) 21:57:48
#define tinko "houkei"
0737デフォルトの名無しさん2005/09/12(月) 21:58:19
#define ore "yousei"
0738デフォルトの名無しさん2005/09/12(月) 22:00:01
Windows は C 言語のためのものじゃないし。
0739デフォルトの名無しさん2005/09/12(月) 22:31:36
元々Pascalで書かれてたしな。
0740デフォルトの名無しさん2005/09/12(月) 23:00:10
>>739
は?それMacOSとかの話じゃなくて?
0741デフォルトの名無しさん2005/09/12(月) 23:00:57
>>739
ホント?スレ違いなんで誘導かソースキボン
0742デフォルトの名無しさん2005/09/12(月) 23:09:20
739=16bitのstdcallが無い時代に呼び出し形式がpascalだったのを勘違いしてる厨
0743デフォルトの名無しさん2005/09/13(火) 00:49:46
Mac は昔 Pascal だったよな。確か。
0744デフォルトの名無しさん2005/09/13(火) 01:41:29
C言語厨にとっては、Pascalは敵だろ?
確か教祖様が死ぬほど嫌ってたはずだ。
C言語より論理的で美しいから・・・
0745デフォルトの名無しさん2005/09/13(火) 01:45:45
Pascalって教育用にしか使われない言語なんでしょ?
0746デフォルトの名無しさん2005/09/13(火) 01:49:42
最近じゃ、その地位すらなくなりつつあるがな
0747デフォルトの名無しさん2005/09/13(火) 01:58:07
それでも愛用の2chブラウザはDelphi製
0748デフォルトの名無しさん2005/09/13(火) 02:03:11
大学でPascal、独学でCやってるが、Pascalなんて糞
0749デフォルトの名無しさん2005/09/13(火) 03:41:22
あのな…もうそろそろ、どの言語が一番か、なんていうのから卒業しろよ。
PascalもCも細部は違うにしろ、似たような言語だろ。
文法レベルでは大した違いはない。
同じアルゴリズムを書くにしてもそれほど大きな違いはないし、
違いがあるとすればソフトウェア工学的な見地からだろう。
0750デフォルトの名無しさん2005/09/13(火) 04:30:48
>>749
んー、なんていうか、俺にはそういうお前が一番そういう、どの言語が一番かって
いうことにこだわっているように見えるんだよね。

(10代しゃべり場風に)
0751デフォルトの名無しさん2005/09/13(火) 09:08:38
真剣しゃべり場って、議題を定義しないで議論するから答えなんざ
出るわけないんだよな。
前見てびびったのが、「社会で勝ち組みになる事は大切か?」だった
んだけど、「勝ち組み」の定義が為されてないのに、いい歳ぶっこいた
高校生が真面目に話してたこと。おまえらアホかと。
勝ち組み=金を稼ぐこと、勝ち組み=権力を得ること、とでも定義すれ
ば、ゲイツ、ブッシュって答えすぐ出るのにね。
そこをNHKに突っ込まないでモルモットのように話してる厨房は一回
死になさいってこった。
0752デフォルトの名無しさん2005/09/13(火) 09:30:10
このスレでそんな事語ってるお前がアホ
0753デフォルトの名無しさん2005/09/13(火) 12:18:43
ここにいる奴らって大体Cマンセーだろ

俺もだけど
0754デフォルトの名無しさん2005/09/13(火) 13:09:21
違うよ
0755デフォルトの名無しさん2005/09/13(火) 14:03:13
お前はその大体の内に入ってないんだろw
0756デフォルトの名無しさん2005/09/13(火) 14:58:36
マンセーというか、プログラマとしての教養の一つだろ > C
C信者とかっているのか?
0757デフォルトの名無しさん2005/09/13(火) 15:07:59
オブジェクト指向に挫折した人とか
デバドラ/組み込み系でC言語しか使ってない人とか

・・・違うか。
0758デフォルトの名無しさん2005/09/13(火) 15:44:00
http://cruel.org/freeware/hacker.html

もしコンピュータ言語をなにも知らないなら、まず Python から始めることをおすすめします。
設計がきれいだし、ドキュメントもしっかりしているし、初心者にもそこそことっつきやすくできています。

Java もプログラミングを学ぶにはよい言語です。 Python よりはむずかしいですが、できるコードは Python より高速です。
二番目の言語としてはとてもすぐれていると思います

本気でプログラミングをするなら、C を勉強するしかありません。これは Unix の中核となる言語です。
C++ は C と密接な関係にあります。片方を知っていれば、もう片方を学ぶのはそんなにむずかしくありません。
が、どっちも真っ先に勉強しようとするのには向いた代物ではありません。
0759デフォルトの名無しさん2005/09/13(火) 16:06:33
嘘こけ
0760デフォルトの名無しさん2005/09/13(火) 16:20:26
ツッコミどころが多すぎて、ツッコむ気も失せるな。
0761デフォルトの名無しさん2005/09/13(火) 16:41:46
所詮、高級アセンブラだからな...俺もCは初心者には難しいと思う。
0762デフォルトの名無しさん2005/09/13(火) 16:48:03
Cから始めるとC以外全否定厨になっちゃう良い見本
0763デフォルトの名無しさん2005/09/13(火) 16:55:19
卒論で全文検索システムをつくろうとおもっているんですが、参考資料が足りません。。
エーホ・コラシックや特徴ベクトル法のC、C++によるソースがのってる本、ホームページなど、参考になりそうな資料あったら
おしえてくださいm(−−)m 少しスレとずれてるかも(・・;)
0764デフォルトの名無しさん2005/09/13(火) 17:03:26
>>763
ttp://www.namazu.org/
0765デフォルトの名無しさん2005/09/13(火) 17:12:25
>758
最近またCが見直されてますよね?
本屋ではJavaとCが本棚を圧倒しています。
(Java > C だが…また、コンピュータ言語の棚自体は
エクセルやワードなどに圧倒されてはいるが…)

他はVB、C++、C#がちょろちょろ、Ruby、Perl、Shell
が「ほんの」少しってところでしょうか?
大都市「近郊の」本屋では、の話ですが…
(姶良郡?…)
0766デフォルトの名無しさん2005/09/13(火) 17:14:18
いい加減言語の比較・勧誘はウザいんだが。
0767デフォルトの名無しさん2005/09/13(火) 17:18:03
プロが使ってる言語だから入門者も覚えろ、なんて乱暴な理屈だ
0768デフォルトの名無しさん2005/09/13(火) 17:29:14
C++はバイナリでかいから嫌
0769デフォルトの名無しさん2005/09/13(火) 17:30:44
実装依存
0770デフォルトの名無しさん2005/09/13(火) 17:33:58
STLつかうと一気に実行ファイルサイズが10倍に?!
0771デフォルトの名無しさん2005/09/13(火) 17:36:16
プログラミングより日本語とExcel
マジおすすめ
0772デフォルトの名無しさん2005/09/13(火) 18:21:59
VBA ということか?
0773デフォルトの名無しさん2005/09/13(火) 18:33:43
まぁたしかに一つの選択肢ではあるんだよな。
某マンガ誌のイラストパズル解きたさにVBAで組んだ香具師もいることだし。
尤も、形から入りたい日本人にとっては「プログラムしている」気分がしなくてだめらしいが。
0774デフォルトの名無しさん2005/09/13(火) 18:44:13
スクリプトが流行らない理由はそこか
アメリカはトップダウンだから手段より目的重視だしな
日本人は目的はともかく手段を持ちたがる

ここで一句
  プログラム 覚える頃には ニートかな
0775デフォルトの名無しさん2005/09/13(火) 18:46:18
C言語の話をやれや
0776デフォルトの名無しさん2005/09/13(火) 18:47:18
断る。
0777デフォルトの名無しさん2005/09/13(火) 18:54:18
ならば氏ね
0778デフォルトの名無しさん2005/09/13(火) 19:08:56
切腹!
0779デフォルトの名無しさん2005/09/13(火) 19:25:50
そこでビットシフトの登場ですよ。
0780デフォルトの名無しさん2005/09/13(火) 20:07:32
ビットシフトはもう秋田
0781デフォルトの名無しさん2005/09/13(火) 20:32:49
ならば趣向を変えてビットマスクで。
0782デフォルトの名無しさん2005/09/13(火) 20:35:56
まだ山形かと思ってたが
0783デフォルトの名無しさん2005/09/13(火) 21:21:39
ちょっと質問させてください
fopenをr+で開いたときに
<TABLE WIDTH=9>  を  <TABLE WIDTH=90>  に書き換えたとしよう
すると一文字多くなるので、次の行の最初の1文字が上書きされて消えてしまいます
文字の上に上書きじゃなくインサートさせたいときはどうすればよかか?
07847832005/09/13(火) 21:24:16
わかり易く書くとこんな感じです

(書き換え前)
<TABLE WIDTH=9>\n
<TD>\n


(書き換え後)
<TABLE WIDTH=90>\n
TD>\n
0785デフォルトの名無しさん2005/09/13(火) 21:27:48
C言語って、文法が小汚い。特に宣言とか・・・
よくこんなのが普及したものだ・・・
0786デフォルトの名無しさんNGNG
>>783
ファイルは上書きしかできないよ。
0787デフォルトの名無しさん2005/09/13(火) 21:38:45
>>786
とても正しい答え方ですね。感服しました
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
>>788
*argvは1つ間接参照している。argv[0]と同じ。
argvと&argv[0]は同じことで、間接参照を全くしていない。
0790デフォルトの名無しさん2005/09/13(火) 22:32:44
*argvはargv[0]といっしょって言えばわかるかなぁ・・・。
0791デフォルトの名無しさん2005/09/13(火) 22:43:34
>>783
9 以降のファイルの内容を全部メモリに読み込んで、
0 以降を全部書き込みなおすか、
別ファイルに 0 込みで書き込んでリネーム。
後者を勧める。
0792デフォルトの名無しさん2005/09/13(火) 22:48:53
>>789-790
printf("%p\n", *argv)はポインタargvに代入されている値(アドレス値)を出力しているということでしょうか?
0793デフォルトの名無しさん2005/09/13(火) 22:59:56
>>792
その文章は正しいが、お前が理解しているようには思えない。
ついでにargvはchar **だからprintf("%s", *argv);は有効。
0794デフォルトの名無しさん2005/09/13(火) 23:01:41
何でそう思うんだろ
*argvって書いてあるんだから *argv に代入されている値に決まってるじゃん
0795デフォルトの名無しさん2005/09/13(火) 23:29:54
すいません、最近C言語始めたのでかなり初心者な質問をします。

2つの整数値(整数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
×na % nb
○100*na/nb
0797デフォルトの名無しさん2005/09/13(火) 23:34:22
>>796
あぁっ!本当だ!!
こんなくだらない質問に答えてくれてありがとうございましたm(_ _)m
助かりました。
0798デフォルトの名無しさん2005/09/13(火) 23:39:27
わかってるとは思うけど、演算子の%は剰余算(余りの計算)な。
0799デフォルトの名無しさん2005/09/13(火) 23:50:02
>>793
後半は参照されたポインタの持つアドレス値を先頭とする文字列が出てくるということですね。
>>794
理解不足のためくだらない質問をしてすいません。

もうひとつ質問させてください。
>>792のソースをコンパイルしたプログラムをa.exeとして、
コマンドラインで
>a.exe b c
と実行したとき、"a.exe","b","c"はそれぞれ文字列としてメモリのどこかの配置されるわけですが、
このとき上の3つの文字列の先頭文字のアドレスは、あるchar型ポインタの配列に代入されると説明されていました。
この配列名は何なんでしょうか?
0800デフォルトの名無しさん2005/09/13(火) 23:57:04
>>799
argv
0801デフォルトの名無しさん2005/09/14(水) 00:05:20
>>800
argvはchar型ポインタへのポインタとして宣言されていたのに、
なぜargvが配列名としてつかえるんでしょうか?
0802デフォルトの名無しさん2005/09/14(水) 00:06:17
*argv[]
0803デフォルトの名無しさん2005/09/14(水) 00:09:28
*(argv+1) == argv[1]
0804デフォルトの名無しさん2005/09/14(水) 00:09:39
<アドレス(16進)> <そのアドレスに対応する変数> = <その変数に入ってる値>

0022ef24 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:03
乙!>804
0806デフォルトの名無しさん2005/09/14(水) 00:16:08
アドレスの具体的な値は環境によって変化するので注意。
0807デフォルトの名無しさん2005/09/14(水) 00:42:13
>>802->>803
の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:30
べつにargvやargcじゃなくてもいいけどな

int main( int a, char *b[])
とかでもOK
0809デフォルトの名無しさん2005/09/14(水) 00:49:04
>>807
そういうこと。
0810デフォルトの名無しさん2005/09/14(水) 01:02:09
>>808-809
夜遅くまでお付き合いくださってありがとうございました。
0811デフォルトの名無しさん2005/09/14(水) 11:39:30
STLスレに投げたんだけど、レスがつかなかったんでマルチなんだけど
VC6の bitset ってバグ有り?

bitset<32> bsVal(0xFFFFFFFF);

cout << bsVal[0];    // 結果:12FEC4
cout << bsVal.test(0); // 結果:1

Borland C++ 5.5.1 では、問題なし
0812デフォルトの名無しさん2005/09/14(水) 11:59:22
>>811
>>254>>263>>284>>435>>678

こんなもんかな。
0813デフォルトの名無しさん2005/09/14(水) 12:31:03
正直ポインタは便利な配列としてしか理解してない
0814デフォルトの名無しさん2005/09/14(水) 12:37:11
恐ろしい子!
0815デフォルトの名無しさん2005/09/14(水) 15:09:15
>>807
> と実行された時点で、a.exe、a、bにがメモリに配置され、
> その先頭の文字のアドレス('a'、'b'、'c'のアドレス)が
> argv[0]、argv[1]、argv[2]に代入されるということでよろしいでしょうか?
うむ、そこら辺の処理はスタートアップルーチンがやってくれる。
0816初心者2005/09/14(水) 17:48:17
Compatible
って読むときどこで区切ればいいんですか?
教えてください。
0817デフォルトの名無しさん2005/09/14(水) 17:51:46
>>816
くぎらない
0818デフォルトの名無しさん2005/09/14(水) 18:02:28
アホか。辞書見ろ。
0819デフォルトの名無しさん2005/09/14(水) 18:03:19
注意) >>818 は >>816 に対するレス
0820C勉強中2005/09/14(水) 18:11:16
#include <stdio.h>

void 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
↑このプログラムがよくわかりません。ここでつかわれてるポインタの意味は
どういうものなのでしょうか?詳しい方おしえてください
おねがいします。
0822 ◆i6G.jsz.NY 2005/09/14(水) 18:16:04
>>821
ymbで変更されたら、mainでもその変更された値を使いたいから
0823デフォルトの名無しさん2005/09/14(水) 18:31:44
変数の型の制約が厳しい言語とかいちいちコンパイルが
必要な言語って気軽にプログラム作れないからつまんない。
0824 ◆i6G.jsz.NY 2005/09/14(水) 18:32:41
で?
0825デフォルトの名無しさん2005/09/14(水) 18:34:33
>>823
簡単にコンパイルが通るようなコンパイラは恐くて使えない
0826デフォルトの名無しさん2005/09/14(水) 18:49:39
>>820
#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
#include <stdio.h>

#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:56
エラトステネスのふるいでググれ。
0829デフォルトの名無しさん2005/09/14(水) 19:12:18
9月から学校でC言語プログラミングの授業が
始まったのですが難しくてついていけません。
基礎を教えてもらえないでしょうか?
0830デフォルトの名無しさん2005/09/14(水) 19:15:11
>>829
>>1
>まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
                                      ~~~~~
ここは質問スレであって教室スレでも輪講スレでもない。
0831デフォルトの名無しさん2005/09/14(水) 19:22:54
輪姦スレでもない。
0832デフォルトの名無しさん2005/09/14(水) 19:44:46
何か HP でも見つけてみれ。
0833デフォルトの名無しさん2005/09/14(水) 19:54:48
>>831
ウホッ
0834デフォルトの名無しさん2005/09/14(水) 20:55:03
>>833
なんでウホッなんだよ。ここはヒギィッだろ。
0835デフォルトの名無しさん2005/09/14(水) 21:09:59
GETRC(XSetForeground(dsp, gc, fg)); 
CHECK(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:47
何で2つのマクロに分けてるの?
0837デフォルトの名無しさん2005/09/14(水) 21:45:30
ああ、分かった分かった。ごめん。俺が浅はかだった。
別にいいんじゃないかと思うけど、case hoge: はちょっと美しくないかな。
配列を渡すようにして、for で判定するとか。
0838デフォルトの名無しさん2005/09/14(水) 22:07:53
>>830
すいません。
自分でHP探して勉強します・・・
0839デフォルトの名無しさん2005/09/14(水) 22:47:22
>>811
あっちでもスレ違いだっつっただろうが。間抜け。
0840デフォルトの名無しさん2005/09/14(水) 22:51:33
>>835
代入する変数XXごとに、GETXX マクロを作る必要があるのか?
0841デフォルトの名無しさん2005/09/14(水) 22:53:12
なあ、なあ。
上手なデバッグプリント文とかデバッグマクロとかおせーて。
0842デフォルトの名無しさん2005/09/14(水) 23:18:29
>>841
gdb
0843デフォルトの名無しさん2005/09/14(水) 23:28:38
>>842
グッジョブ?
0844デフォルトの名無しさん2005/09/15(木) 00:00:56
>>843
gbx
0845デフォルトの名無しさん2005/09/15(木) 00:31:20
#define HOGE 5

char hoge[HOGE];


hogeと&hoge[0]が等しいのはわかるが

memset( &hoge, 0, sizeof(hoge) );

と書いた場合の挙動(hogeの中身)はどうなります?

コンパイラ gcc3.2くらいかな

0846デフォルトの名無しさん2005/09/15(木) 00:35:07
>>845
{0,0,0,0,0}
0847デフォルトの名無しさん2005/09/15(木) 00:35:26
&hoge 番地のメモリデータを破壊するか、アクセス違反で止まる。
0848デフォルトの名無しさん2005/09/15(木) 00:40:03
>>847
アホか。
0849デフォルトの名無しさん2005/09/15(木) 00:43:28
>>845
アドレスは等しいんだけど、
その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
>841
前スレ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
#ifdef NDEBUG
#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:38
C言語でもwindowsは作れますか?
0854デフォルトの名無しさん2005/09/15(木) 03:31:48
C言語で作られています
0855デフォルトの名無しさん2005/09/15(木) 03:33:37
わろたwwwwwwwwwwwww
0856デフォルトの名無しさん2005/09/15(木) 04:38:56
すみません質問です。
おにぎりとおむすびの違いって何ですか?
0857デフォルトの名無しさん2005/09/15(木) 04:45:39
調子に乗るなよ小僧
0858デフォルトの名無しさん2005/09/15(木) 04:50:15
おにぎりは三角、おむすびは俵
0859デフォルトの名無しさん2005/09/15(木) 04:52:31
俵は関西だけ
0860デフォルトの名無しさん2005/09/15(木) 04:54:13
おにぎりは実体の型、おむすびはおにぎりのtypedef
0861デフォルトの名無しさん2005/09/15(木) 04:55:49
おにぎりは握り飯のtypedef
0862デフォルトの名無しさん2005/09/15(木) 06:20:12
昔、小学生のころ、そのときに持ってた辞書を引いたら
おにぎり → おむすび
おむすび → おにぎり
て無限ループになってたな
0863デフォルトの名無しさん2005/09/15(木) 06:25:52
大人って汚いよな
0864デフォルトの名無しさん2005/09/15(木) 06:38:17
辞書によるとどちらも握り飯の意。
おにぎりが女性語とのこと。
0865デフォルトの名無しさん2005/09/15(木) 06:41:23
ふざけんな!
0866デフォルトの名無しさん2005/09/15(木) 06:44:48
>>841
if(TraceLevel() >= TRACE_LEVEL_ERROR) TraceWriteLine("エラーが出たぞ");
みたいな感じにしてTraceLevel()の値はINIファイルから呼び出して
同一バイナリでログ吐いたり吐かなかったりできるようにしてる。
JavaのLog4jとか.NETのTraceあたりを参考にしてみたら。
0867デフォルトの名無しさん2005/09/15(木) 09:34:17
>>839
まぁ、どこのスレがスレ違いじゃないか、間抜けには誘導すらできないだろうけどな
0868デフォルトの名無しさん2005/09/15(木) 09:37:57
自分の使ってる開発環境名で検索もできない人かね?
0869デフォルトの名無しさん2005/09/15(木) 11:55:52
質問なのですが。
int a[34][4] = {
{ 1,1,1,1},
{ 2,2,2,2},
//以下略
     };
初期化子が多すぎるとエラーが出るのですが,こういう場合どう直せばよいでしょうか?
0870デフォルトの名無しさん2005/09/15(木) 11:57:30
ファイルから読むようにすれば?
0871デフォルトの名無しさん2005/09/15(木) 11:59:05
数が合ってないんじゃない?
とりあえずintの前にstaticつけてみれば
0872デフォルトの名無しさん2005/09/15(木) 12:02:13
つか、
>エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
0873デフォルトの名無しさん2005/09/15(木) 12:02:29
>>870さん
素早いレス、ありがとうございます
その案でちょっとやってみたいと思います。
0874デフォルトの名無しさん2005/09/15(木) 12:22:25
>>873
その案は意味のある解決策ではない。
ちゃんとエラーメッセージを理解できないかぎり何も無駄。
なので >>1 を理解して、勉強しなおすか、初心者スレにでも逝け。
(正確にエラーメッセージを引用する知恵ぐらいつければいいのに。
C言語以前にプログラムの考え方も不足してるのだろうけど…)
(本当に「初期化子が多すぎる」エラーなら、初期化子を適切な数にするか、
配列を必要な数の初期化子を格納できる大きさにするかだろうけど)
>>870,871
あほが無駄なレスつけるなよ…
0875デフォルトの名無しさん2005/09/15(木) 12:40:05
サイズもデータもそのままで、
ファイルから読み込むようにすると、
バッファオーバーランして危険だね。
0876デフォルトの名無しさん2005/09/15(木) 13:00:33
>>869
int a[100][4] = {
{ 1,1,1,1},
{ 2,2,2,2},
//以下略
     };

これに直して通ったら、[34]があってない
0877デフォルトの名無しさん2005/09/15(木) 13:04:02
>>869
int a[][4] = {
{ 1,1,1,1},
{ 2,2,2,2},
//以下略
     };

[34]は、省略できる
0878デフォルトの名無しさん2005/09/15(木) 13:05:00
>>877
俺もそれ書こうと思ったんだが、
34 という数値に大きな意味があれば、
34 と書いておいた方が
サイズチェックしてくれるのでいいと思った。
0879デフォルトの名無しさん2005/09/15(木) 13:06:56
省略せずに書けば解決するのに
0880デフォルトの名無しさん2005/09/15(木) 13:12:25
少なくとも>>874を読んで解決するとは思えないのだが
0881デフォルトの名無しさん2005/09/15(木) 13:17:19
charのstrをchar*のstr_pに入れたいのですが = では駄目なようです
どうすればいいのでしょうか?

char str;
str = 'a';
char* str_p;
str_p = str;//×
0882デフォルトの名無しさん2005/09/15(木) 13:19:45
>>881
頭悪い?
0883デフォルトの名無しさん2005/09/15(木) 13:24:34
>>881
何をしたいのか知らんが、初心者質問スレに行くか日本語の勉強をしてくれ。
0884デフォルトの名無しさん2005/09/15(木) 13:25:56
>>881
とりあえず、入門書のポインタを嫁
0885デフォルトの名無しさん2005/09/15(木) 13:30:52
&str
0886デフォルトの名無しさん2005/09/15(木) 13:32:19
これでいいんじゃね

string str;
str = 'a';
char* str_p;
str_p = &str;
0887デフォルトの名無しさん2005/09/15(木) 13:35:24
入れたところで '\0' 終端がないから、文字列にはならんな。
0888デフォルトの名無しさん2005/09/15(木) 13:37:46
ありがとうございます。>>885で解決することができました
まだポインタの理解が足りていないのでもう少し勉強してみます
0889デフォルトの名無しさん2005/09/15(木) 14:15:52
>>888
全然解決にならないんだが
0890デフォルトの名無しさん2005/09/15(木) 14:53:36
文字列にするんでなければ解決するんだろうけどな。
0891デフォルトの名無しさん2005/09/15(木) 15:08:06
だから、質問の中の問題点さえ気がつかない連中が、
もっともらしく表面的な回答だけするなと。
喋りたきゃ初心者スレでしたり顔が答えて叩かれてろと。
0892デフォルトの名無しさん2005/09/15(木) 15:10:41
答えの精度は質問の精度に依存する
0893デフォルトの名無しさん2005/09/15(木) 15:15:02
表面的な回答をしてる人は、
単なる嫌がらせのようなことをしてるだけ。
たまに天然も居るのかもしれんが。
0894デフォルトの名無しさん2005/09/15(木) 15:21:48
表面的な質問には表面的な回答しかできないと思われ
0895デフォルトの名無しさん2005/09/15(木) 15:24:03
皮肉にしか見えないが。
891は随分素直なんだな。
0896デフォルトの名無しさん2005/09/15(木) 15:31:30
だから、そういう天然まがいのつもりのマヌケは本当にアホなんだから
よそで遊んでろ、と言われてるんだろうに、ずいぶん天然なんだな。
0897デフォルトの名無しさん2005/09/15(木) 15:32:33
言われてるんだろうに、じゃなく、君が言ってるんでしょw
0898デフォルトの名無しさん2005/09/15(木) 15:34:19
初心者スレもネタスレじゃないと思うんだが、そこに誘導してどうする。
0899デフォルトの名無しさん2005/09/15(木) 15:35:13
推理小説かなんかだと思って回答しろよ
限られたヒントの中から問題を推測して正解を導くのは
結構面白いぞ
0900デフォルトの名無しさん2005/09/15(木) 15:38:28
まあ、精度の低い質問しても、こうやって遊ばれるだけだっていう教訓だな。
0901デフォルトの名無しさん2005/09/15(木) 16:09:16
で、「表面的」でない回答の例は無いの?
0902デフォルトの名無しさん2005/09/15(木) 16:11:03
どーでもいいよ、そんなこと。
0903デフォルトの名無しさん2005/09/15(木) 16:11:37
>891がすばらしいレスを付けるから黙って待っていなさい。
0904デフォルトの名無しさん2005/09/15(木) 16:15:41
どーでもいいよ、あんなやつ。
VIP ででも遊んでろ。
0905デフォルトの名無しさん2005/09/15(木) 16:35:59
>>904
そんなこと言ってると奴らが巣から出てくるぞ・・・w
0906デフォルトの名無しさん2005/09/15(木) 16:36:11
>>887
文字列にする方法も教えてください
0907デフォルトの名無しさん2005/09/15(木) 16:39:31
char str[] = "a";
0908デフォルトの名無しさん2005/09/15(木) 16:42:02
>>906
お前こんなところで質問してる場合じゃないぞ。
ともかく先に本一冊通して嫁。
0909デフォルトの名無しさん2005/09/15(木) 16:44:33
読むだけじゃダメだな。
色々テストプログラム組んで、仕様を体で理解しないと。
0910デフォルトの名無しさん2005/09/15(木) 16:47:44
仕様が理解できないの?
しょうがないなぁ
0911デフォルトの名無しさん2005/09/15(木) 16:49:01
華麗にスルー
0912C勉強中2005/09/15(木) 17:08:22
#include <stdio.h>

main ( )
{
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:47
>>913
char str[ ] = {"hogebaka"}; 
0916デフォルトの名無しさん2005/09/15(木) 17:14:13
>>915
>>562
0917デフォルトの名無しさん2005/09/15(木) 17:49:23
約1週間前に指摘したのをもう忘れている池沼なのか
それとも、たまたま同じ名前の別人がたまたま同じ質問をしたのか

0918デフォルトの名無しさん2005/09/15(木) 17:54:10
ネタだろw
0919デフォルトの名無しさん2005/09/15(木) 17:54:42
どう思われるでしょうか?
C言語は人間の思考との距離感が
良いんじゃないでしょうかねぇ?

すぐ目的に達しないところというか
一旦マシーンよりに思考を変換しないと
上手なプログラムが作れないところが
魅力だと考えますが。
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"};
こう書くべき。
char *str = "HogeBar";
これならいいけどね。
0923デフォルトの名無しさん2005/09/15(木) 18:54:11
>>922
ツッコむ気も失せるわ、この田吾作がァ!
0924デフォルトの名無しさん2005/09/15(木) 19:21:55
このスレ始めてきたC言語初心者なんだが
プログラミング言語C(通称 K&R)
って本はC言語初心者でも大丈夫なのか?
0925デフォルトの名無しさん2005/09/15(木) 19:22:22
禁断のコーディング論争をしようというのか?

while(1) {} // 無限ループをこう書く奴むかつく
for(;;) {}  // これならいいけどね
0926デフォルトの名無しさん2005/09/15(木) 19:25:08
>>925
一人でやってろ。
0927デフォルトの名無しさん2005/09/15(木) 19:26:10
>>924
多分、こっちで聞いた方がいいと思う。

推薦図書/必読書のためのスレッド 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:33
別に感銘なぞ受けないな
0930デフォルトの名無しさん2005/09/15(木) 19:40:28
>924
>プログラミング言語C(通称 K&R)
>って本は

良いよね。ホント。
0931デフォルトの名無しさん2005/09/15(木) 19:43:17
>928
>Cを続けるつもりなら

C以外の言語をやる場合でも、だよね?
0932デフォルトの名無しさん2005/09/15(木) 19:49:11
>>929は単なる馬鹿
0933デフォルトの名無しさん2005/09/15(木) 19:59:05
   い
   と
   し
   の
   強
   は
   お
   っ
0934デフォルトの名無しさん2005/09/15(木) 20:06:02
WEBでC言語の問題集ない?
0935デフォルトの名無しさん2005/09/15(木) 20:08:20
J('ー`)し
0936デフォルトの名無しさん2005/09/15(木) 20:09:24
お勉強で感銘とか受けたくないしw
0937デフォルトの名無しさん2005/09/15(木) 20:22:00
なら藻前は何に感銘受けるんだ?w
0938デフォルトの名無しさん2005/09/15(木) 20:39:27
>>928にかんめーっ☆
0939デフォルトの名無しさん2005/09/15(木) 20:39:53
おまんこ
0940デフォルトの名無しさん2005/09/15(木) 20:41:58
>>937
おまえには、わかんめー
0941デフォルトの名無しさん2005/09/15(木) 20:50:02
香ばしくなってまいりました
0942デフォルトの名無しさん2005/09/15(木) 21:48:14


       ァ  ∧_∧ ァ,、  
      ,、'` ( ´∀`) ,、'`  
       '`  ( ⊃ ⊂)  '`  
0943デフォルトの名無しさん2005/09/15(木) 22:19:45
おまいらのやりとり見てて面白い
0944デフォルトの名無しさん2005/09/15(木) 22:54:26
苦しんで覚えるC言語
ttp://homepage3.nifty.com/mmgames/c_guide/index.html

先ほどこのサイトを読み終えました
次のステップに進みたいので、いいサイトを教えて頂けませんか
0945デフォルトの名無しさん2005/09/15(木) 23:26:45
>>944
次の目標を見つける事が次へのステップだ
0946デフォルトの名無しさん2005/09/15(木) 23:55:03
な、なんだってー!?
0947デフォルトの名無しさん2005/09/16(金) 00:14:10
ちょっとしたテキストのコンバートツールを作成しているのですが、
例えば"100%"という文字列を読み込んでそのまま書き込むと
なぜか'%'だけが書き込まれないという問題が発生しています。
'%%'と続けて書くと'%'が1文字書き込まれることが分かったので、
しかたなくその変換も組み込んだのですが、
これはそういう仕様になっているのでしょうか?
読み込みはfgets関数、書き込みはfprintf関数を使用しています。
0948デフォルトの名無しさん2005/09/16(金) 00:14:37
ちんでください
09499472005/09/16(金) 00:16:03
すいません、書き込みボタンを押した瞬間に気付きましたが、
fprintf( file, str );
としてました・・・。
fprintf( file, "%s", str );
で無事に書き込めました。orz
0950デフォルトの名無しさん2005/09/16(金) 00:24:02
Cって値渡ししかできないから配列とかを引数として渡したいときもアドレスを使ったりするんでしょうか?
0951デフォルトの名無しさん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
インテル系CPUは、リトルエンディアン。
最初のバイトは256^0の位
次のバイトは256^1の位
その次のバイトは256^2の位
・・・
ってな具合。
0954デフォルトの名無しさん2005/09/16(金) 01:09:53
>>953
今やっている仕事で、unsigned long longの場合は、バイト順入れ替えを
行わなくてはいけないといわれていたので、何か特別なフォーマットなのかと
思ってしまっていました。なにか他の理由があるのですね。

どうも有難うございます。
0955デフォルトの名無しさん2005/09/16(金) 01:25:05
>今やっている仕事で、unsigned long longの場合は、バイト順入れ替えを
>行わなくてはいけないといわれていたので、何か特別なフォーマットなのかと
>思ってしまっていました。

こういう情報を先に出さないのは質問下手ですよ。
09569522005/09/16(金) 01:39:11
>955
それは、どうもすいませんでした。
0957デフォルトの名無しさん2005/09/16(金) 05:21:02
単に話の文脈や条件、説明を勘違いしている可能性のほうが大きそうなんだが。
0958デフォルトの名無しさん2005/09/16(金) 06:39:39
>>954
バイト順を入れ換える必要があるということは通信が絡んでいるんじゃないか?
ネットワークとか、とにかく外にバイナリデータを出す場合は何故かビッグ
エンディアンが標準になっている。(ネットワークバイトオーダーとも言う)。
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
>>959
<集大成>アルゴリズム大辞典
http://pc8.2ch.net/test/read.cgi/tech/1086272325/
0962デフォルトの名無しさん2005/09/16(金) 09:25:29
このスレスレ違いスレ違いうるさいくせにゴミみたいな雑談は大好きなんだよな。
0963デフォルトの名無しさん2005/09/16(金) 09:28:55
全くだよな
スレ違いとか下らん事言ってスレ消費してる暇あったら教えてやれっつーの
0964デフォルトの名無しさん2005/09/16(金) 09:32:06
そう言う君らが教えてあげればいい
0965デフォルトの名無しさん2005/09/16(金) 10:50:57
わからないから教えてあげられないんだよ。

俺?もちろんわからないさアハハハ・・・orz
0966デフォルトの名無しさん2005/09/16(金) 11:37:50
>>959
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら
0967デフォルトの名無しさん2005/09/16(金) 12:11:20
実際 >>959 のような教えてくださいには、立派な工数が発生すると思うが
0968デフォルトの名無しさん2005/09/16(金) 12:12:57
だからなに?
0969デフォルトの名無しさん2005/09/16(金) 13:47:48
>>959
一つ前と自分と一つ後ろとで平均を取って、自分をその平均にする
それを全部についてやって、別バッファに書き出す
こんどはそのバッファに対して
0970デフォルトの名無しさん2005/09/16(金) 13:48:31
縦方向にやる
そうすると、画像が全体的にぼやけるので
0971デフォルトの名無しさん2005/09/16(金) 14:35:36
>>959
ここの http://oku.edu.mie-u.ac.jp/~okumura/algo/
spline.c スプライン補間
0972デフォルトの名無しさん2005/09/16(金) 14:54:51
>>969-971
http://pc8.2ch.net/test/read.cgi/tech/1086272325/で答えたら良いのに。
0973デフォルトの名無しさん2005/09/16(金) 17:19:32
K&RのP25 演習1-9「二つ以上の空白を一つの空白に置き換えながら、入力を出力に
複写するプログラムを書け」をやって、一応問題なく動くプログラムはできたんですが
これだと空白以外の文字のときに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:15
動的にメモリーを確保する方法として
calloc,malloc,reallocと三つありますよね?
全ての機能(新規、追加)をカバーし、おまけにfreeまで
出来るreallocを皆さん、あまり使わないようですが、
何故なんでしょうか?
0975デフォルトの名無しさん2005/09/16(金) 17:41:51
>>973
自分だったら前の入力値を保持する形で書く。こんな感じ
#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
>>974
むしろ逆じゃないのか?
わざわざ第一引数0(null)設定してrealloc呼び出すならmallocでいいじゃん。

/* メモリ確保 */
char* p;
p = (char *)realloc(0, size);

あと文脈的にも微妙だしな。
0977デフォルトの名無しさん2005/09/16(金) 17:47:49
>>974
日本語でも同じ単語が文脈によって異なる意味になったら混乱するだろ?
プログラムでも同じ。同じ関数がパラメータによって機能が変化するのは嫌。

構造化設計でもそれはあまり好ましくない設計
0978デフォルトの名無しさん2005/09/16(金) 17:48:11
コードの意味や意図を伝える役割もあるかもよ。
const書くのが面倒だといって書かないのと似たようなもんだな。
0979ビタミンC2005/09/16(金) 17:56:22
#include <stdio.h>

struct {
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ビタミンC2005/09/16(金) 17:57:25
上のプログラムでなぜ*nameとポインタにしてあるのでしょうか
わからないのでおしえてください おねがいします
構造体のところです
0981デフォルトの名無しさん2005/09/16(金) 17:58:21
realloc(0, size); realloc(p, 0); とかって書いてる奴は馬鹿。
0982デフォルトの名無しさん2005/09/16(金) 17:58:52
>>980
余計なメモリを使わなくてすむし、
配列の要素の数をいちいち考慮してなくていいからじゃない?
自信はない。
0983デフォルトの名無しさん2005/09/16(金) 18:00:37
>>980
構造体そのものはポインタのサイズ分しか確保しない。
ポインタに対して初期化が行われたら文字列テーブルを作成する。
09849732005/09/16(金) 18:15:08
>>975
おお、まさにスマート。
ありがとうございます。
0985篠2005/09/16(金) 21:26:13
>>980, >>982
文字列もそうでありまするが、関数や高速化に使えるのです。
ポインタのサイズは軽いので、関数の引数が大きい場合にアドレスを渡し、
更にポインタを駆使して処理を施すことにより、メモリ節約・高速化と
正にウハウハでありましょう。関数の引数にアドレスを渡さないときは、
これは実体がいちいちそのままコピーされてしまうのです。

>>982
>配列の要素の数をいちいち考慮してなくていいからじゃない?
それじゃ、*(array+i) のiをどうするのさ?
要素数は配列の実体とsizeofで調べられるから(調べるよろし)
アドレスと要素数を関数に渡すよろし。
0986デフォルトの名無しさん2005/09/16(金) 21:31:33
馬鹿"レス"終了
0987デフォルトの名無しさん2005/09/16(金) 22:04:22
>>985
元々の質問にも無いことをうだうだと…
0988デフォルトの名無しさん2005/09/16(金) 22:06:18
ウハウハなんだそうです
0989デフォルトの名無しさん2005/09/16(金) 22:10:07
今まで
文字の配列はその要素数をインターフェースにしたくないから文字列にはターミネーター(nulコード)が存在している
と思っていましたが。
0990デフォルトの名無しさん2005/09/16(金) 22:15:19
(゚д゚)ウ
0991デフォルトの名無しさん2005/09/16(金) 22:17:14
(゚д゚)マンボ!!
0992デフォルトの名無しさん2005/09/16(金) 22:21:13
どんなデータも、メモリ上のどこかに置いてあって、
そのメモリは何らかの形で確保しないとダメなのだよ。
それを構造体に配列として直接与えるなら、サイズをその時に決めないとダメだし、
動的に確保したりどっかに確保したものを利用したりといった場合には
ポインタを使うことになる。
0993デフォルトの名無しさん2005/09/17(土) 00:27:29
次すれ

C言語なら俺に聞け! Part 114
http://pc8.2ch.net/test/read.cgi/tech/1126884418/
0994デフォルトの名無しさん2005/09/17(土) 00:30:52
ご苦労。寝ていいぞ。
0995デフォルトの名無しさん2005/09/17(土) 01:46:42
さて、そろそろ起きてバグ取るか
0996デフォルトの名無しさん2005/09/17(土) 01:49:06
甘いもんが欲しいな ブドウ糖でも買ってくるか
0997デフォルトの名無しさん2005/09/17(土) 01:55:49
んじゃぁおれはコーラでも買ってくっかな。
0998デフォルトの名無しさん2005/09/17(土) 03:37:23
私は疲れたので枸櫞酸を一舐め。
0999デフォルトの名無しさん2005/09/17(土) 03:42:38
銀河鉄道
1000デフォルトの名無しさん2005/09/17(土) 03:43:44
printf("1000GET");
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。