C言語なら俺に聞け(入門篇) Part 52

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 130代目
http://pc12.2ch.net/test/read.cgi/tech/1250204272/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 51
http://pc12.2ch.net/test/read.cgi/tech/1248445143/

過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
2デフォルトの名無しさん:2009/08/17(月) 03:24:50
C++はスレ違いですがまったく対応できない回答者も信頼しない
ほうがいいと思います。
3デフォルトの名無しさん:2009/08/17(月) 04:59:51
C++撲滅運動
4デフォルトの名無しさん:2009/08/17(月) 05:30:44
はC絶滅運動と同義になってしまう
5デフォルトの名無しさん:2009/08/17(月) 07:34:10
1おつ

ARToolKit試したいけどjavaのがねーわ
6デフォルトの名無しさん:2009/08/17(月) 09:55:29
/   //   /   //    ______     /   //   /
 / //   /|   r'7\ ,.ヘ‐'"´iヾ、/\ニ''ー- 、.,   /    /
  /   / |  |::|ァ'⌒',ヽ:::ヽrヘ_,,.!-‐-'、二7-ァ'´|、__
`'ー-‐''"   ヽ、_'´  `| |:::::|'"       二.,_> ,.へ_
         /  //__// / / /      `ヽ7::/
 か っ も  |  / // メ,/_,,. /./ /|   i   Y   //
 ァ  て う.  |'´/ ∠. -‐'ァ'"´'`iヽ.// メ、,_ハ  ,  |〉
  |  約 ク  ヽ! O .|/。〈ハ、 rリ '´   ,ァ=;、`| ,ハ |、  /
  |  束 ソ   >  o  ゜,,´ ̄   .  ト i 〉.レ'i iヽ|ヽ、.,____
  |  し  ス  /   ハ | u   ,.--- 、  `' ゜o O/、.,___,,..-‐'"´
  |  た  レ  |  /  ハ,   /    〉 "从  ヽ!  /
  |  じ  は  |,.イ,.!-‐'-'、,ヘ. !、_   _,/ ,.イヘ. `  ヽ.
 ッ .ゃ .立   |/     ヽ!7>rァ''7´| / ',  〉`ヽ〉
 ! ! な  て   .',      `Y_,/、レ'ヘ/レ'  レ'
   い  .な    ヽ、_     !:::::ハiヽ.   //   /
   で   い   ./‐r'、.,_,.イ\/_」ヽ ',       /  /
   す      /    `/:::::::/ /,」:::iン、 /    /
          〈  ,,..-‐''"´ ̄ ̄77ー--、_\.,__  /
      ,.:'⌒ヽ ´         | |  , i |ノ   `ヾr-、
7デフォルトの名無しさん:2009/08/17(月) 12:55:49
随分昔に会社の人に聞いて使ってた記憶があるのだが、printf関数なんかのフォーマット指定子に
いくつか隠しフォーマット(というか一般的に使われて無い)みたいなのがあったと思うんだけが・・・
誰か知ってる人いない?
8デフォルトの名無しさん:2009/08/17(月) 13:07:31
printf系のフォーマット指定子なんてマイクロプログラミング
言語みたいなものだけど、MS以外の処理系は似たり寄ったり
合わせてるけどMSはバシバシ独自拡張してるね
気に食わないんだが、こういうレベルのまでC規格として
共通化制定されてしまうと別の意味で秩序が乱れてしまう
んで、基本的に処理系定義のものだと思ったほうがいいのかもね
9デフォルトの名無しさん:2009/08/17(月) 13:18:25
printf((scanf("%s",&p),p),"abcd");
10デフォルトの名無しさん:2009/08/17(月) 13:37:29
>>7
POSIXのprintf()のマニュアルくらいは目を通してから再質問してくれ。
まさかとは思うが、ISOの範疇で書かれた"%*.*s%n%%"の説明くらいできるよな。
11デフォルトの名無しさん:2009/08/17(月) 13:59:45
scanf("%*[^\n]%*c");
12デフォルトの名無しさん:2009/08/17(月) 14:34:51
ルートキットの作り方おしえてくsf
13デフォルトの名無しさん:2009/08/17(月) 14:40:51
man読んだけどないな
もう大抵の物クラスライブラリにしてるからprintfを使うことは、ほとんど無いんだが
気になるから、そのうちソース読んでみよう
サンクス
14デフォルトの名無しさん:2009/08/17(月) 16:43:50
そう言えばprintfって文字を読まずに飛ばして次のフォーマットを読み込めるのがあったな。
普段使わないから忘れたけど・・・
15デフォルトの名無しさん:2009/08/17(月) 16:56:43
14だけど確かこんな奴だった→ %*c 
16デフォルトの名無しさん:2009/08/17(月) 17:12:35
int num = 5;
char *str = "abcdefg";

printf("%5s\n", str);
printf("%*s\n", 5, str);
printf("%*s\n", num, str);

こういう?
使ってみるとすぐ利点が理解できると思うよ。
17デフォルトの名無しさん:2009/08/17(月) 17:35:07
今いろいろいじってて最初は意味不明だったけど
いろいろ数値を変えていじっててようやく意味が分かった。
*の中には精度用の値を入れられるのか。
18デフォルトの名無しさん:2009/08/17(月) 17:37:56
sprintf(buf, "%%%ds\n", num);
printf(buf, str);
を1手で実現できる
19デフォルトの名無しさん:2009/08/17(月) 17:47:17
>>18
こんな使い方もあるんだ。
目からうろことはまさにこのことだなあ。
sprintfはいろいろと便利だから使えるね。
いろいろと面白い情報ありがとうございました。


あ、あとちなみに僕は>>7ではないです。
20デフォルトの名無しさん:2009/08/18(火) 09:32:40
>>9-11辺りも何が起きるか試してみたら色色面白いと思うのだけど。
21デフォルトの名無しさん:2009/08/18(火) 17:33:25
printf()やscanf()の機能って記憶できるくらい勉強したほうがいいの?
22デフォルトの名無しさん:2009/08/18(火) 17:39:07
scanfはそのうち使わなくなる
printfはsprintfで長く使うだろうけど、使うほど覚えるだろう。
でもこれに限らず、覚えることよりもさっと調べる手段を持つ方が大事。
23デフォルトの名無しさん:2009/08/18(火) 18:02:50
>>22
分かったよ!ありがとう!
24デフォルトの名無しさん:2009/08/18(火) 18:45:00
sscanfは結構使うな
25デフォルトの名無しさん:2009/08/18(火) 20:56:06
構造体につける変数名は最初を大文字にするのが一般的でしょうか?
それとも小文字にするのが普通でしょうか?

書籍やネットで調べてみると、
struct BookShelf {};
のようにJavaのクラス名のような付け方と
struct bookshelf{};
のように全て小文字の付け方をする人が多いようです。

そしてFILEという構造体が何故大文字なのかが謎です。いつもFileと書いてコンパイルエラーに。。
26デフォルトの名無しさん:2009/08/18(火) 21:27:27
>>25
コーディングスタイルというやつ。いろいろなスタイルがあるからどれが一般的かとはいえない。
FILEに関しては「謎」ではなく大文字で定義してあるから。
一般にマクロ名称は大文字にすることが多い。しかし小文字にしたって悪くはない。
27デフォルトの名無しさん:2009/08/19(水) 06:31:12
>>25
俺の中では全部大文字が一般的だよ
28デフォルトの名無しさん:2009/08/19(水) 17:48:36
C言語の勉強を始めて2週間目の者です。
書籍を参考に勉強していたのですが、昨日完読しました。

他の言語の経験があるおかげなのか、書籍にあるポインタの説明はわりと楽に理解しました。
が、今日はUNIXのコマンドのソース読んでいて、ポインタに関する面白いコードを見つけました。

完読したC言語についての書籍は、ポインタに関する説明が物足りない気がします。
ポインタってもっと奥が深いものだと思ったのです。
というわけで、ポインタを完全にマスターできるような、おすすめの書籍を
紹介していただけたらと思います。
2928:2009/08/19(水) 17:51:27
ちなみに、前橋市の「C言語ポインタ完全制覇」というのを見つけたのですが
Amazonのレビューのいくつかにネガティブな意見もありました。
Rubyのまつもと氏もこの本を「迷教科書」と表現していました。

不安です。どうしたらよいでしょうか。。
30デフォルトの名無しさん:2009/08/19(水) 17:52:20
C言語ポインタ完全制覇
http://www.amazon.co.jp/dp/4774111422

これでも全てではないけどね
31デフォルトの名無しさん:2009/08/19(水) 18:05:27
ポインタ完全制覇は注釈がよかった、それ以外はどうでも良い

そのほかポインタについてそこそこ語られているもの
エキスパートC何たら、これは知らない知識が載っていて満足
CプログラミングFAQ、手元にあれば安心できる
Cの強化書、まぁこれはこれで読みものとしてよかった
ここがへんだよ上下、実験的で蘊蓄野郎がなかなか強い
叫ぶなんたら、もう内容忘れた
3228:2009/08/19(水) 18:33:07
>>30-31
アドバイスありがとうございます。

いろいろ悩みましたが、「エキスパートCプログラミング」を買うことにしました。
ポインタだけでなく、雑多でinterestingな内容があるみたいです。
Amazonなどでも良い評価をされています。

ありがとうございました。
33デフォルトの名無しさん:2009/08/19(水) 18:46:28
ポインタ制覇もエキスパートCも相当古い本だよね。どっちもC99には一切触れてないし今から読むような本なのかね?
Java1.2辺りの仕様を指摘して批判してたりしていかにも時代錯誤という感じ。
そこそこ新しい本で定番の本買ったほうが無難な気もする。ポインタ本なんてたくさん出てるし。
34デフォルトの名無しさん:2009/08/19(水) 18:54:57
>>29
その本持ってるけど結構参考になったよ。初心者にとっては目から鱗な内容も多いと思う。
作者が毒を吐きたくてしょうがない性格みたいだから、嫌う人も多いみたいだけど。

本の元になったページ↓ここ読むだけでも結構参考になると思う。
http://kmaebashi.com/programmer/pointer.html

>Rubyのまつもと氏もこの本を「迷教科書」と表現していました。
http://kmaebashi.com/seiha/hosoku001.html
一応弁解(?)みたいなことが書いてある
35デフォルトの名無しさん:2009/08/19(水) 19:25:36
Javaなら標準のコレクションフレームワーク(LinkedListとかHashMapとか)を使って数行で書けるような処理が、
Cでは一から構造体を定義して連結リストを自分で作って、要素を削除・追加するための関数を書いて・・・とやらなければならないのでしょうか?
ある程度の規模になれば連結リストは当たり前のように使うだろうし、毎回同じようなコードを書くことになりそうです。
実際の開発現場などでは有名なライブラリとかフレームワークのようなものがあるのでしょうか?
36デフォルトの名無しさん:2009/08/19(水) 19:56:01
>>33
C99になってポインタまわりの挙動って変わったんだっけ?
37デフォルトの名無しさん:2009/08/19(水) 20:07:33
>>35
C++つかえば一通り揃ってる。
Cに限定して言うと、大抵のCプログラマはその手の自作ライブラリを溜め込んでる。
(会社やプロジェクトごとにライブラリを揃えてることもある)
ただ、メモリ効率や速度を気にしてその都度チューニングすることも多いけど。
38デフォルトの名無しさん:2009/08/19(水) 20:07:51
そもそもC99なんて使ってる人いるのか
39デフォルトの名無しさん:2009/08/19(水) 20:20:10
>>38
使ってるよ。
全部の機能を使ってるわけじゃないけど。
4035:2009/08/19(水) 22:35:06
>>37
ありがとうございます。
なるほど、Cに限定すると世間一般で共通して使われてるようなモノは無いのですね。
すごく奥深そう。大学とかでじっくり勉強してみたかったなぁ。
C++も少し漁ってみましたがこちらはJavaに近いですね。
41デフォルトの名無しさん:2009/08/20(木) 01:10:10
ライブラリ作ってる時が一番楽しい。
希望いっぱい、夢いっぱい(笑)
だからライブラリは、いつも一新する。
流用できる? うるさい黙れ。
42デフォルトの名無しさん:2009/08/20(木) 01:20:55
>>41
それ言える(笑)
マジ言える!!
43デフォルトの名無しさん:2009/08/20(木) 01:57:24
ライブラリみたいな高度な物は未だに作った事がない
もうはじめて3ヶ月もたつというのに・・・
44デフォルトの名無しさん:2009/08/20(木) 02:02:24
>>43
そりゃ遅いな。
45デフォルトの名無しさん:2009/08/20(木) 02:06:21
前に作ったプログラムのソースを流用してれば、それはソースと言う名のライブラリーだ
46デフォルトの名無しさん:2009/08/20(木) 02:11:29
>>45
しかしそれをライブラリーと本気で呼ぶヤツがいたら
縁を切るしか。
47デフォルトの名無しさん:2009/08/20(木) 02:19:44
俺レベルになると要件聞いた瞬間に数千行程度のソースコードがだいたいイメージできるしライブラリとか要らんわ
48デフォルトの名無しさん:2009/08/20(木) 02:22:36
>>47
すげーなwww
無能な働き者でないことを願うばかりだ
49デフォルトの名無しさん:2009/08/20(木) 03:07:33
最近のアホは高度になったな
50デフォルトの名無しさん:2009/08/20(木) 11:08:16
char test[] = "2B";
っていう配列testがあって、中身のデータ2Bを二桁の16進数文字として解釈して
ascii文字の+に変換したいのですが、そういうライブラリ関数みたいなのはありますか?
51デフォルトの名無しさん:2009/08/20(木) 11:14:52
strtol()とか
52デフォルトの名無しさん:2009/08/20(木) 11:33:48
>>51 ありがとうございます!できました!
53デフォルトの名無しさん:2009/08/21(金) 00:04:12
萌えキャラが初心者にもわかりやすく丁寧にかつ少しエロく説明してくれる書籍、又はソフト、サイトを教えてください。
54デフォルトの名無しさん:2009/08/21(金) 02:33:47
エロゲやりながらK&Rを読む
55デフォルトの名無しさん:2009/08/21(金) 03:01:21
>53の発言によって後に伝説となる恋愛アドベンチャノベル「おしえてA・B・C」が作られることになる
冬コミにでも期待しとけ
56デフォルトの名無しさん:2009/08/21(金) 06:05:17
>>53
ニコニコのミクと学ぶC言語でも見てろ。
どうせ、動画見ただけで分かった気になって何も身につきはしないだろうがなw
57デフォルトの名無しさん:2009/08/21(金) 10:10:48
宣伝乙
58デフォルトの名無しさん:2009/08/21(金) 13:38:26
「はじめてのC」でいいじゃん。
59デフォルトの名無しさん:2009/08/21(金) 13:39:12
「はじめてのC」・・・いつ聞いてもドキっとするタイトル。
60デフォルトの名無しさん:2009/08/21(金) 14:19:10
俺は読んだことないんだよね。

タイトルで有名になっているんじゃないかという
気がするのだが、どうなの?
実際良い本なの?
61デフォルトの名無しさん:2009/08/21(金) 14:43:12
はじめての○○って感じの本には碌なのがない
62デフォルトの名無しさん:2009/08/21(金) 14:54:54
麻奈ちゃんが、やさしくレッスン
63デフォルトの名無しさん:2009/08/21(金) 14:57:44
>>53
俺今から作るわ
ちょっとまってろノシ
64デフォルトの名無しさん:2009/08/21(金) 15:00:38
麻奈タン(*´д`*)ハァハァ
65デフォルトの名無しさん:2009/08/21(金) 17:49:29
C言語で野球ゲーム作ろうと思って、
4種類くらい変化球作ってピッチャーに投げさせたんだけど、
投げるのはいいけどバッターが打つってどうすればいいの?
キー入力したタイミングで空振りとかヒットとかにしようと思ったんだけど、
ピッチャーがボール投げてる最中は割り込み出来ないからダメなの?
66デフォルトの名無しさん:2009/08/21(金) 18:21:51
その質問力じゃ一生かけても無理だろ
67デフォルトの名無しさん:2009/08/21(金) 19:08:01
いやあ、やりたいことはすんなり分かるんだけど。
フレーム管理にするかマルチスレッドにするかだよね
68デフォルトの名無しさん:2009/08/21(金) 19:10:33
Javaだとコンパイルエラーになるのに、Cだとint型の変数にdouble型の変数を代入してもコンパイルエラーにならないんですけど…
これってただ小数点以下が切り捨てられるだけなのですか?
発見しづらいバグを誘発しそうでとても恐ろしいんですけど。
69デフォルトの名無しさん:2009/08/21(金) 19:14:10
>>68
警告は出るだろ。
警告レベル高めにして、警告がでないように書くってのはCでも基本。
70デフォルトの名無しさん:2009/08/21(金) 19:17:49
警告やらエラーが出ないと気づかないようなアホは、
何も考えずにキャストしまくってバグだすよ。
71デフォルトの名無しさん:2009/08/21(金) 19:25:26
>>68
Cの勉強をせずにCでプログラムを書こうとする行為がとても恐ろしいんですけど。
72デフォルトの名無しさん:2009/08/21(金) 19:32:51
>>68
・・・
73デフォルトの名無しさん:2009/08/21(金) 19:57:31
配列を初期化するとき

int a[10] = { 0 };

でこの配列の全ての要素を0にできると思いますが

2次元配列や3次元配列の場合は同様にできないのでしょうか?
74デフォルトの名無しさん:2009/08/21(金) 19:59:06
>>73
同じようにできるさ
75デフォルトの名無しさん:2009/08/21(金) 20:11:28
>>74

int a[10][10] = { { 0 } };

でいいですか?
76デフォルトの名無しさん:2009/08/21(金) 20:20:13
>>68
慣れるとその類のバグはすぐ見つけられるようになるよ。
77デフォルトの名無しさん:2009/08/21(金) 20:20:40
>>75
俺も初心者で勉強中だが、こんな初歩的なものは自分で本かネットで調べろ。
聞いてばっかりじゃ伸びないよ。
78デフォルトの名無しさん:2009/08/21(金) 20:27:29
>>75
それではダメですか?
79デフォルトの名無しさん:2009/08/21(金) 20:29:39
int a[10][10] = { { 0 }, };
だったかもしれない
80デフォルトの名無しさん:2009/08/21(金) 20:52:43
>>75
その書き方を認める処理系の信用度を1回だけ
デクリメントしておいてくれれば良い
81デフォルトの名無しさん:2009/08/21(金) 21:24:07
やべぇ俺初心者じゃないつもりでいたけど
正解がわからねぇw
82デフォルトの名無しさん:2009/08/21(金) 21:29:38
http://www.google.co.jp/search?hl=ja&source=hp&q=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9EC+site%3Ajisc.go.jp&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=&aq=f&oq=
p.97 例3 に書いてある。
なんかよくわからんが、コピペ出来ないようになってる・・・

要するに
int a[10][10] = {0};
でOK
>>75でも大丈夫じゃないか?
a[0][0]が0で初期化されて他の足りない要素も0で初期化されるわけだし。
83デフォルトの名無しさん:2009/08/21(金) 21:30:31
8465:2009/08/21(金) 23:08:19
あのですね、
ピッチャーの球種は乱数で決定する。
それでバッターはその球を打つ。
でも、実際ボールって打てない?
マルチスレッドって命令実行中に割り込むってことですか?
そんなことって出来るのでしょうか。
基本を教えて欲しいのですが。
85デフォルトの名無しさん:2009/08/21(金) 23:11:31
アクションゲームでマルチスレッドは使わないだろう。
86デフォルトの名無しさん:2009/08/21(金) 23:12:39
ピッチャーが投げるところまではできているような口ぶりだけど、
ぜんぜんできてないんじゃないか。
8765:2009/08/21(金) 23:24:35
とりあえず打つことを教えて欲しい
誰か解る人いない?
88デフォルトの名無しさん:2009/08/21(金) 23:30:56
しつこい
89デフォルトの名無しさん:2009/08/21(金) 23:48:59
マルチじゃなくてマイクロスレッドじゃね
90デフォルトの名無しさん:2009/08/21(金) 23:52:03
そこまで言うなら、とりあえずソースをうpしてみろよ。
91デフォルトの名無しさん:2009/08/21(金) 23:54:31
もういいって
92デフォルトの名無しさん:2009/08/22(土) 00:01:26
こいつはまずGUIプログラムを作れるのかどうかすら疑問だ。
93名無しさん:2009/08/22(土) 00:16:19
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p="A";
char *h="B";
char *rp;
int length;
length=p-h;
printf("%d\n",*p);
printf("%d\n",*h);
printf("%d\n",*p-*h);
printf("%d\n",length);
return 0;
}
これで最後のlengthが何故 -4 って出るかがわからない
上の*p-*hはA(64)-B(65)で-1ってわかるけど

length=p-h;これが何故-1なのか不明教えてくれ
94名無しさん:2009/08/22(土) 00:18:06
-1じゃなくて-4な
95デフォルトの名無しさん:2009/08/22(土) 00:20:24
>>93
アドレスの引き算したんだろ

メモリ上に配置されてるんだけど4バイト境界で収まってるんじゃね?

メモリ上に

A\0??B\0??

という感じで
?のところは何が入ってるか不定という意味で使ってる
96デフォルトの名無しさん:2009/08/22(土) 00:20:44
>>93
一番最後の行は無いな
97デフォルトの名無しさん:2009/08/22(土) 02:08:02
ちゅかまぁ、length=p-h; は仕様的に違反だけどね。

これはポインタの引き算だけど、
二つのおぺらどんが同じ配列のオブジェクト
またはその配列の最後の要素の一つあとでないときは
不定となるっていうルールなので、
length のあたいは超不定。
98デフォルトの名無しさん:2009/08/22(土) 02:21:05
こまけぇこたぁいいんだよ
99デフォルトの名無しさん:2009/08/22(土) 05:35:31
rand関数と確率を組み合わせたらネットカジノ作れるんじゃね
100デフォルトの名無しさん:2009/08/22(土) 05:46:35
>>99
詐欺師乙
101デフォルトの名無しさん:2009/08/22(土) 06:56:22
おそらく小さいアドレスから大きいアドレス引いたから-4なのだろう
102デフォルトの名無しさん:2009/08/22(土) 09:55:26
>>65
「ピッチャー投げた」と表示
 (内部でどの球種(コース)かは決められている)

「バッターどうする?」と、その選択肢も書いて、
その後、scanfなどで入力待ち状態にし、
ユーザーに入力してもらう
1、速球のタイミングで積極的に打つ
2、変化球のタイミングで積極的に打つ
3、ボール球に気をつけて消極的に打つ
・・・など

投手の投げた球種(コース)と打者の打ち方により、
結果(空振り、アウト、ヒットなど)を計算する

キー入力したタイミングで空振りとかは難しいかもしれない。
ピッチャー投げたの後にclockで時間を計り始め、
バッターの入力のタイミングが0.5秒だったら速球のタイミング、
0.6秒なら変化球のタイミングとかできるかもしれないけど。
10393:2009/08/22(土) 10:11:29
http://情報処理試験.jp/FE21a-pm/t09.html
基本情報の午後問でlengthが使われていて。
void convert(const char *path, const char *base, char *result)
const char *pp, *bp;
int length;

Cの答えがlength=bp ‐base
これもあのわかりずらいアドレスの引き算なのか?
104デフォルトの名無しさん:2009/08/22(土) 10:14:13
おい・・・
105デフォルトの名無しさん:2009/08/22(土) 10:46:25
変数aとbが連続で宣言されても、それぞれがメモリのどこに配置されるかは不定。
後から宣言したbはaよりも後ろのほうに配置されただろう、なんて思い込みはやめること。
106デフォルトの名無しさん:2009/08/22(土) 10:48:08
やさしいC
107デフォルトの名無しさん:2009/08/22(土) 11:07:29
やさC
10893:2009/08/22(土) 11:11:44
独習Cがおすすめ
C言語でRPG作ってんだけど
2次元配列でマップつくってswitchでキャラおいて。
扉も作って持ち物メニューとステータスも作った。
もちろん、鍵を使う?Y/Nも実装して扉の前の座標にたって、鍵の名前をstrcmpで一致させて
そしたら開くようにした。
109デフォルトの名無しさん:2009/08/22(土) 11:13:16
ヨッシー
110デフォルトの名無しさん:2009/08/22(土) 11:49:22
独習シリーズを薦める奴がまだいるのか
ネタなのか本気なのか罠なのか
111デフォルトの名無しさん:2009/08/22(土) 11:52:21
入門書なんてなんでもいいだろ。
ある程度知識つけたら、後はひたすら書いてけばそのうちなれるし。
112デフォルトの名無しさん:2009/08/22(土) 11:58:30
使えなさ過ぎる入門書が多すぎるけどな
独習Cは1冊目に読むには向かないとは思う。
113デフォルトの名無しさん:2009/08/22(土) 12:04:39
他人の否定ばっかしてないで自分のおすすめを挙げろよ役立たず共が
114デフォルトの名無しさん:2009/08/22(土) 12:18:01
今読んでいるソース(ヘッダファイル)に

#define HOGE(aaa)

#define HAGE(bbb) HOGE(bbb)

のような記述があります
使われ方から察するに、 HOGE を変数のように扱って、 HAGE(bbb) は
HOGE に bbb を入れているようなのですが、
その考えで正しいのでしょうか?
115デフォルトの名無しさん:2009/08/22(土) 12:36:56
違います。入門書読んで。
116デフォルトの名無しさん:2009/08/22(土) 12:46:25
>>115
どう違うんでしょうか?

ググっても入門書読んでも分からなかったんで聞いているんで
分かるようでしたら教えていただけると幸いです
117デフォルトの名無しさん:2009/08/22(土) 12:51:14
プリプロセッサだからそういう扱いではないってだけ
118デフォルトの名無しさん:2009/08/22(土) 12:58:06
ではどういう扱いなんでしょうか?
分からない人に分かるように説明してもらえると助かるんですが
119デフォルトの名無しさん:2009/08/22(土) 12:59:57
すみません、質問の仕方を変更します。

#define HOGE(aaa)

とはどういう意味なんですか?
120デフォルトの名無しさん:2009/08/22(土) 13:04:57
プリプロセッサエラーかな
121デフォルトの名無しさん:2009/08/22(土) 13:09:11
#define HOGE(aaa)
なら分かりますが、
#define HOGE(aaa)
は分かりません。
122デフォルトの名無しさん:2009/08/22(土) 13:10:27
マクロは理解して使わないと危険だからなあ

#define HOGE(aaa) xxxxxx(aaa,0x01)

これはxxxxxx関数の引数を2つ用意したけど実際は第一引数しかかわなくなったとかで
マクロを使った場合のイメージ



123デフォルトの名無しさん:2009/08/22(土) 13:12:12
>>121
では、お分かりになる
#define HOGE(aaa)
の方で結構ですので教えていただけると助かります。
124122:2009/08/22(土) 13:13:55
>>121
間のスペースが全角とか半角を皮肉るのはどうかとw
125デフォルトの名無しさん:2009/08/22(土) 13:23:52
>>122
挙げていただいた例は分かります

これは

HOGE(aaa) が xxxxxx(aaa,0x01) に置き換えられるのですよね

しかし、問題のソースは

#define HOGE(aaa)

とだけあって、本来これを置き換えるであろう文字列が存在していないのです
知識不足の私はこのようなコードは今回初めて見ました。


質問の元となったソースというのはMPEG1デコードライブラリ(ttp://chihara.aist-nara.ac.jp/people/97/shuuji-o/mpeg_lib/mpeg_lib-1.3.0.tar.gz)
のutil.hにある

#define UPDATE_COUNT(numbits)

の一文です。このソースはUNIX上ではビルドできるらしいのでコードが間違っているということは恐らくないと思います。
126デフォルトの名無しさん:2009/08/22(土) 13:27:02
>>125
ソース及びヘッダ等関連ファイルのテキスト検索やってみた?

UPDATE_COUNT(

とかをキーワードにして

使われなくなって放置されてるとかそういうのではないの?
127デフォルトの名無しさん:2009/08/22(土) 13:28:10
>>125
マクロってのは単純に置き換えるだけだから、
#define HOGE(x)
は何も無い状態に置き換える(削除する)
128デフォルトの名無しさん:2009/08/22(土) 13:29:17
俺も詳しくは知らないんだけど、なんか暗黙のなんたらってどっかで見た記憶がある
129デフォルトの名無しさん:2009/08/22(土) 13:38:35
>>126
grepしてみたところutil.h内でしか使われていません。
util.hにはバイトアライメントされていないデータを読込むためと思われるコードがあり、
例えば3bit読込むマクロには

UPDATE_COUNT(3); \

のようにUPDATE_COUNTの引数には読込んだbit数が入っています。
しかし、それを何かに使っている様子がないので
一体何のためにあるのかまったく分かりません。

もしかしたら使われずに放置されているのかもしれませんね

>>127
なるほど、そういうことでしたか
確かに何もない状態に置き換えになりますね
130デフォルトの名無しさん:2009/08/22(土) 13:57:29
こうやって見てみると質問しときながら解決してもあいさつもしないプログラマ志望のやつって
現場でやっていけるのか不思議に思うんだけど、今はそれが主流なのかな
131デフォルトの名無しさん:2009/08/22(土) 14:10:51
てめぇは老後の心配でもしてろよ
132デフォルトの名無しさん:2009/08/22(土) 14:13:12
>129
とりあえず、コメント読んどけ
~/mpeg_lib-1.3.0% sed -n 44,45p util.h
/* Macro for updating bit counter if analysis tool is on. */
#define UPDATE_COUNT(numbits)
133デフォルトの名無しさん:2009/08/22(土) 18:57:29
>>103
アドレス先の問題において、bpはもともとbaseを基にしたアドレスでしょ。
>>93とはまったく意味合いが異なる。
ってか文字列長出すならちゃんと終端文字の位置探せ。
134デフォルトの名無しさん:2009/08/22(土) 23:25:31
C言語初心者です。フローチャート書くのが苦手です。
フローチャートをうまくコツってありますか?
135デフォルトの名無しさん:2009/08/22(土) 23:26:36
ひたすら練習
136デフォルトの名無しさん:2009/08/22(土) 23:27:36
>>134
Cのコードを書いて、そこからフローチャート起こすと、楽で早いよ。
137デフォルトの名無しさん:2009/08/22(土) 23:28:06
フローチャートが書きやすいコードを書く
138デフォルトの名無しさん:2009/08/22(土) 23:28:18
>>134
フローチャートかあ。まだ教えているとこあるの?
139デフォルトの名無しさん:2009/08/22(土) 23:35:32
たまーーーーにフローチャートを提出しろって客はいたが
どうせ見ないだろおまえと言ってしまった
140デフォルトの名無しさん:2009/08/22(土) 23:52:43
クラス図なら描くがフローチャートは描かんなぁ
141デフォルトの名無しさん:2009/08/23(日) 00:00:05
フローチャートって書くの?

いらないな、うん。
142デフォルトの名無しさん:2009/08/23(日) 04:48:46
規格などで動作フローを厳密に定義するときにフローチャートは使われたりしている。
または、順序や条件が複雑な問題を考えるときに、頭ん中を整理したくて書きたいことはあるな。
143デフォルトの名無しさん:2009/08/23(日) 06:01:44
フローが分断されるようなイベント駆動とかメッセージ指向のパラダイムを持つ言語って
フローチャートの意味がまったくない
144デフォルトの名無しさん:2009/08/23(日) 06:18:54
イベント受けた後の処理(要するに、イベントハンドラの中身)が複雑な時は
フローチャートで整理することもあるよ。
145デフォルトの名無しさん:2009/08/23(日) 10:13:31
複雑な処理を整理するのにフローチャートを使うとか言ってる人が
いるけど、初心者はマにうけないようにな。

フローチャートは特別表現力が高いわけじゃないし、描くのも、
プログラミング言語に比べたらすごい労力になるから、そういう用途に
つかったら、ひどい目にあう。
146デフォルトの名無しさん:2009/08/23(日) 10:43:38
え?
フローチャートって、裏紙に適当に描くものだろ。ホワイトボードでもいいけど。
147デフォルトの名無しさん:2009/08/23(日) 10:46:43
チャート系はなあ・・・
今の開発規模やプログラムの作り方では使いにくにくいんだよな

フローチャートとかねえ

そういえば某H社が使う変なチャート図はなんていうんだろ
148デフォルトの名無しさん:2009/08/23(日) 13:16:54
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.3.3.html
フローチャートは禁止しましょう。フローチャートは制御の流れを「もろ」に書けてしまうので良くありません。
149デフォルトの名無しさん:2009/08/23(日) 13:40:09
プログラムコードそのものを設計する目的でフローチャートを使うのは間違っているが、
フローそのものが解決したい問題の本質であるときは、それを「もろ」に書くために有用。
150デフォルトの名無しさん:2009/08/23(日) 13:54:28
カナダ人作成の韓国人の問題解決フローチャートとかですな。
151デフォルトの名無しさん:2009/08/23(日) 15:49:00
フローチャートとか書くだけむだだろ
かっこつけか伝統とかしかないな。

書くだけ 無 駄 なんだよ
プログラマーのステータスだろ フローチャートを書いて、ブログやHPに載せて見せびらかすのはww
152デフォルトの名無しさん:2009/08/23(日) 15:58:14
知的に見られたいために、人間の誕生など 何かをフローチャート化して知的ぶるw
ITに進むやつはバカで知的にみられたいのか知らんがバカがおおすぎww
必死にgrepネタ出してるけどそれで何かするわけでもないしコマンドを覚えて無駄ww

なんだかんだいってエクセルとワードを使いこなせるやつのほうが世間一般的にウケがいいなw
153デフォルトの名無しさん:2009/08/23(日) 16:00:11
人間の誕生
154デフォルトの名無しさん:2009/08/23(日) 16:01:16
>>152
うっせーんだよITドカタw
マ板にいけ。
155デフォルトの名無しさん:2009/08/23(日) 16:01:58
芸能界も覚せい剤を使って 怖くみられて  普段は優しそうだけど 実は怖いっていうギャップを狙ってるのかw
芸能界は覚せい剤など、コネなどステータスかと思ってマネするのと同じだなww
156デフォルトの名無しさん:2009/08/23(日) 16:04:46
フローチャートだけではプログラムの1側面して表現できておらぬ。
状態遷移図やシーケンス図なども駆使して多角的に表現できなくてはならない。
157デフォルトの名無しさん:2009/08/23(日) 16:12:48
>>152
wの数を数えると
そいつの程度の低さが分かるって言うけど本当なんだね。
158デフォルトの名無しさん:2009/08/23(日) 16:17:46
図星なのかしらないけど 程度の低さなどとしか言い返せないww
159デフォルトの名無しさん:2009/08/23(日) 16:24:09
延びていると思えばこれ流れか
スレ立てて別のところでやれ
160デフォルトの名無しさん:2009/08/23(日) 17:38:46
いや、もう別のスレを立てられる方が迷惑だろ。
このスレないで収めてくれ
161デフォルトの名無しさん:2009/08/23(日) 17:42:42
処理時間を大まかに把握したいときにフローチャートが役に立つことはある。
162デフォルトの名無しさん:2009/08/23(日) 17:44:16
データの流れを書いた物があればいい
163デフォルトの名無しさん:2009/08/23(日) 17:45:05
アクター図で十分なきもする
164デフォルトの名無しさん:2009/08/23(日) 18:12:14
標準ライブラリの使い方について詳しく説明してる定番本のようなものはありますか?
K&Rのライブラリの説明はあまりにも簡素すぎて今の私には使いこなせません。
165デフォルトの名無しさん:2009/08/23(日) 18:18:13
C言語のライブラリの辞書買えばいいのでは
166デフォルトの名無しさん:2009/08/23(日) 18:37:56
>>164
MS-Cの頃は、それなりの書籍があって、MS-C 独自関数も含めて標準ライブラリの使い方を書いた本があったんですけどね。
今はどうかな?
167デフォルトの名無しさん:2009/08/23(日) 19:34:28
時間があるならUNIXプログラミングから勉強するのもお勧め。
システムコールレベルのコード読んでると標準ライブラリ見てるだけでは気付かなかったことが色々分かってくる。
Javaから始めた人がCを勉強して色々気付くのと同じ感覚。
168デフォルトの名無しさん:2009/08/23(日) 21:05:26
普通にMSDNみればいいんじゃねぇの
169デフォルトの名無しさん:2009/08/23(日) 21:20:43
MS独自拡張のライブラリなんか覚えても他で通用しないんじゃ汎用性に欠ける。
昔からそうやって利用者を囲い込む姑息な企業だからな。
170デフォルトの名無しさん:2009/08/23(日) 21:28:27
POSIXはその囲い込みに失敗した良い例というわけ
171デフォルトの名無しさん:2009/08/23(日) 21:38:43
>>164
ちょっとちがうけど「Cプログラム診断室」は?
人の書いたコードをけなしながら「そういう処理は標準関数をこうつかえよw」みたいな
つっこみがいっぱいあったような記憶が。
今でもネットで見れると思う。
172デフォルトの名無しさん:2009/08/23(日) 21:55:27
C言語始めたばかりで、自作関数の勉強をしています。
「キーボードから整数の入力を受け取って、それを10倍した値を返す関数を作って下さい。」
という問題で下記を作ったのですが、失敗作のようです。
どこがどう間違っているのか解説お願いします。

#include<stdio.h>

int sum(void);

int main(void)
{
sum();
printf("%d",(int)(num * 10));
return 0;
}
int sum(void)
{
printf("整数を入力してください\n");
scanf("%d",&num);
return 0;
}
173デフォルトの名無しさん:2009/08/23(日) 21:56:32
>>172
南無
174デフォルトの名無しさん:2009/08/23(日) 22:02:00
それだとだめだよ
#include<stdio.h>
int sum(void);
int main(void)
{
printf("%d\n",sum());
return 0;
}
int sum()
{
int num;
scanf("%d",&num);
return num*10;
}
こう
175デフォルトの名無しさん:2009/08/23(日) 22:04:00
なんでsumなんだろう
176デフォルトの名無しさん:2009/08/23(日) 22:05:31
>>172
おまえ、雑記帳ってサイトでネタにされてたよ。
177デフォルトの名無しさん:2009/08/23(日) 22:11:14
キーボードから整数の入力を受け取って、それを10倍した値を返す関数を作って下さい。

でぐぐれかす
178デフォルトの名無しさん:2009/08/23(日) 22:12:19
>>174
ありがとうございます!
自分のだと自作関数内の数値がメイン関数に反映されてないっぽいですね。
見比べながら復習しようと思います。参考になりました。
179デフォルトの名無しさん:2009/08/23(日) 22:13:55
>>170
POSIXいいぞ。
教科書どおりのfopenとかだけで20年以上飯食えてるからな。
180デフォルトの名無しさん:2009/08/23(日) 22:28:36
どこで質問したらよいのか分からないので質問させてください。
僕は意味不明なファイルがどういうものか知りたくて
(たとえばCドライブにあるsetting.iniとかを見て「こいつはこのソフトを動かすのに使われているんだな」って分かるような)
プログラミングを始めました。言語はVB.NETです。
それで、VBの方は簡単なゲームを作れるところまでできてきたのですが、当初の目的の
「ファイルがどういうものかを知る」というのがいまひとつピンときません。

VBだから当たり前なのかもしれないのですが、なぜかC言語なら分かる気がしたのでVisualC++をとりあえずインストールしました。
そこで伺いたいのは、別にCとかC++とか関係なくC系の言語を学べばファイルというものがどういうものなのか理解できるのでしょうか?
本当にあいまいな質問ですみません。

また、職業はプログラマとかではないので将来プログラミングをバリバリ使って働くわけでもないです。
そういう意味で僕の目的を満たすには、C言語を学ぶのはオーバーワークなんでしょうか?
ご回答よろしくお願いします。
18193,174:2009/08/23(日) 22:36:47
>>173
C言語がいちばん簡単だから安心しろ^^
資料もおおいし。
最初からPythonとかマイナー言語進める奴はバカだな
何かの記事でハッカーはPythonを使うとかバカの一つ覚えてかっこいいと思って使ってる奴が多い。
名前が蛇みたいでかっこいいとか^^;(滝汗)
182デフォルトの名無しさん:2009/08/23(日) 22:40:09
>>180
VBでもファイルを読み書きしたり、作ったりと言うようなプログラムは作れるでしょ。
183デフォルトの名無しさん:2009/08/23(日) 22:41:54
>>180
setting.iniに関していえば、初期設定情報をファイルとして外に出したと思っていい。
184デフォルトの名無しさん:2009/08/23(日) 22:42:23
>>181
救いようのない馬鹿だな。
何調子のってんだ?
185デフォルトの名無しさん:2009/08/23(日) 22:45:11
>>181
消えろカス
186デフォルトの名無しさん:2009/08/23(日) 22:45:32
>>180
これはいい燃料ですね

とりあえず.NETならXMLという話をどこかできいた
187デフォルトの名無しさん:2009/08/23(日) 22:46:09
Windowsならレジストリ
18893,174:2009/08/23(日) 22:46:31
>>184-185
Pythonをやればハッカーだと思って勉強しちゃったカスですか かっこわらい
18993,174:2009/08/23(日) 22:47:18
図星で反論 テラパオスですね かっこ笑い
190デフォルトの名無しさん:2009/08/23(日) 22:47:55
>>188
ポインタも理解できないお前の方がカスだけど(爆笑)
19193,174:2009/08/23(日) 22:49:26
バーベルで頭ぶっ叩いたら即逝しそうだなクソガリ かっこわらい
192デフォルトの名無しさん:2009/08/23(日) 22:50:28
>>191
Pythonで挫折したんですね、わかります。
193デフォルトの名無しさん:2009/08/23(日) 22:51:17
たしかに、Pythonはクソ言語だな
194デフォルトの名無しさん:2009/08/23(日) 22:52:35
>>193
どうした?
夏休みの宿題が終わらなくて泣いているのかな?w

じゃあてめぇが素晴らしい言語を設計してみろカス
195デフォルトの名無しさん:2009/08/23(日) 22:53:19
この間うちのチームに入ってきた奴が3年近くPGやってるはずなのにファイルを触ったことが
無いっていうのを聞いて驚いたんだが、今はそういうのが多いの?
196デフォルトの名無しさん:2009/08/23(日) 22:53:59
夏休みの宿題か…
ただの一度も完遂したことがないな
197デフォルトの名無しさん:2009/08/23(日) 22:54:11
93 : 名無しさん : 2009/08/22(土) 00:16:19
 #include <stdio.h>
 #include <string.h>
 int main(void)
 {
 char *p="A";
 char *h="B";
 char *rp;
 int length;
 length=p-h;
 printf("%d\n",*p);
 printf("%d\n",*h);
 printf("%d\n",*p-*h);
 printf("%d\n",length);
 return 0;
 }
 これで最後のlengthが何故 -4 って出るかがわからない
 上の*p-*hはA(64)-B(65)で-1ってわかるけど

 length=p-h;これが何故-1なのか不明教えてくれ
198デオフォルトの名無しさん:2009/08/23(日) 22:54:27
>>194
どうした?
夏休みの宿題が終わらなくて泣いているのかな?w

じゃあてめぇが素晴らしい言語を設計してみろカス
199デフォルトの名無しさん:2009/08/23(日) 22:55:02
93 : 名無しさん : 2009/08/22(土) 00:16:19
 #include <stdio.h>
 #include <string.h>
 int main(void)
 {
 char *p="A";
 char *h="B";
 char *rp;
 int length;
 length=p-h;
 printf("%d\n",*p);
 printf("%d\n",*h);
 printf("%d\n",*p-*h);
 printf("%d\n",length);
 return 0;
 }
 これで最後のlengthが何故 -4 って出るかがわからない
 上の*p-*hはA(64)-B(65)で-1ってわかるけど

 length=p-h;これが何故-1なのか不明教えてくれ
200デフォルトの名無しさん:2009/08/23(日) 22:55:25
>>195
ファイルってのは標準関数でオープンしたりするあれ?
それとも特定の開発現場でSQLを使わなくてアクセスできるあれのこと?
201デフォルトの名無しさん:2009/08/23(日) 22:56:16
>>197
もういいそれは見飽きた貼るな
20293,174:2009/08/23(日) 22:57:28
ぷぎゃー
くやしいのぅwwwwwww草w
203デフォルトの名無しさん:2009/08/23(日) 22:59:03
>>200
標準関数でオープンしたりするアレ。
特定の開発現場は知らん。
204デフォルトの名無しさん:2009/08/23(日) 22:59:13
93の釣りに釣られた奴は低能なんだろうなw
低能の釣りに低能が釣られる
205デフォルトの名無しさん:2009/08/23(日) 22:59:52
ファイル触ったこと無いって
よっぽど高級なことやってたに違いない
アルゴリズマー
206デフォルトの名無しさん:2009/08/23(日) 23:00:01
>>181
> C言語がいちばん簡単だから安心しろ^^

簡単なことで躓いている奴が言う台詞じゃねぇ・・・w
207デフォルトの名無しさん:2009/08/23(日) 23:00:46
>>203
まあ分業でやることが増えてるからそういう人もいるんじゃないの?
20893,174:2009/08/23(日) 23:01:05
>>204
おいおい、見苦しいぞ低脳君 かっこわらい
209デフォルトの名無しさん:2009/08/23(日) 23:02:16
なんで93が暴れてるのか不明なんだけど、まとめてくれ > 93
210デフォルトの名無しさん:2009/08/23(日) 23:02:47
夏だねえ
まだ終わらないのか>夏休み

>>93はこれでもみてろ
http://www.b-ch.com/flash/mv_det.php?sq=1&msc=10
211180:2009/08/23(日) 23:03:47
皆さん素早いレスありがとうございます。

>>182
確かにそうですね。その辺りもやってみます。
>>183
それについてはネットで検索して「なんとなく分かるような分からないような」という感じです。
でも、教えていただきありがとうございます。
>>186
xmlですか。
そういえば以前ちょっとだけやって何に使うんだろうと思ったことはあります。

やっぱりファイルといえども全部を理解しようとするのは無理なのかもしれなかったです。
C言語をやるかどうかはもう少し考えてみたいと思います。
212デフォルトの名無しさん:2009/08/23(日) 23:04:45
醜い
213デフォルトの名無しさん:2009/08/23(日) 23:05:13
夏だなぁ
214荻原:2009/08/23(日) 23:07:18
夏は暑いな
215デフォルトの名無しさん:2009/08/23(日) 23:09:37
>>211
ファイルの識別をしたいのか?もちろんVBでもできるよ。
大抵のファイルにはヘッダやフッダがあるから、バイナリで先頭数バイトを読んでみれ。
ヘッダ一覧は別ファイルでDBにでもしておけばいいだろう。
216180:2009/08/23(日) 23:18:23
>>215
VBでもできるんですか!
自分の勉強不足で全く知りませんでした。
それではもう少しVBをやってみたいと思います。

スレ違いの質問に答えて下さりありがとうございました。
217デフォルトの名無しさん:2009/08/23(日) 23:21:03
>>211
iniなんかはWindowsAPIに読み書き関数が用意されていて
フォーマットも分かりきっているけど

「俺は■■■みたいに書いて△☆ミのように読みたいんだ!」っつーフォーマットを自分で決めればいい
218デフォルトの名無しさん:2009/08/24(月) 00:28:13
>>216
極窓か?識別プログラム自体は楽だろうが、
ファイルのヘッダのデータ収集が一番めんどくさそうだ。
219デフォルトの名無しさん:2009/08/24(月) 00:34:12
あるソースファイルの中で、別のファイルで定義された関数を使っている場合、
gccでコンパイルする時にコンパイラは何を元に関数の実体の場所を探しているのですか?
たとえばJavaであればclasspathというのがありますが、Cにも独自の環境変数が用意されているのでしょうか?
220デフォルトの名無しさん:2009/08/24(月) 00:35:25
もっとも早くMD5が取得できるライブラリ教えてくだしあ
221デフォルトの名無しさん:2009/08/24(月) 00:42:31
ファイルを整理するソフトを作ろうと思っています。
結構色々なソフトがありますが、ファイル数が多いとハッシュを取得するのに結構案時間がかかってしまいます。
なので、咲にファイルサイズを取得してから同一のサイズのファイルだけハッシュの取得、比叡するという事をしたいです。
どうすればいいですか?
222221:2009/08/24(月) 00:44:37
自決しました
223デフォルトの名無しさん:2009/08/24(月) 00:47:13
>>219
リンカオプションですべてのファイルの位置をちゃんとぴっちり設定する必要があるのだ。
224デフォルトの名無しさん:2009/08/24(月) 01:02:41
なぜスコープ付き#defineがないのか
225デフォルトの名無しさん:2009/08/24(月) 01:03:53
>>224
一応ファイルスコープだ
226デフォルトの名無しさん:2009/08/24(月) 02:18:36
なぜならCプリプロセッサはC言語とは全く関係ないからだ
227デフォルトの名無しさん:2009/08/24(月) 17:31:05
コンパイラへの命令だって本で読んだよ!
228デフォルトの名無しさん:2009/08/24(月) 17:53:24
Cプロプリセッサへの命令。
229デフォルトの名無しさん:2009/08/24(月) 18:16:41
>>220
MD5 アルゴリズムそのものは↓
ttp://www.ipa.go.jp/security/rfc/RFC1321JA.html

もっとも早くの"早く" が実行速度を指しているのだったらワカラン
230デフォルトの名無しさん:2009/08/24(月) 21:04:54
ちょっとこのプログラムどこがおかしいのか見てくれないだろうか
52枚のトランプカードから2枚引くプログラム作ってみてコンパイル通ったけどおかしな数値しか出てこないんだ
構造体でマークと数字を別々に保管してるの作ろうとしたら二枚目で同じカード引かないようにするトコで行き詰ってこういう形になった
要するに配列52個用意して一度引いた配列に0代入して同じの引かないように作ったんだが、何か間違ってたんだろうか

int i,j,x,y,z=0;
int pcard[2];
//プレイヤーの引いたカード・今回は二枚なので
char *mark[]={"Diya","Clober","Spade","Heart"};
//数字をマークに変換する為の変数

srand(time(NULL));
//乱数の種をまく

int allcard[52];
x=1;

for(x=1;x<5;x++){
y=x*100;
for(i=0;i<13;i++){
allcard[z]=i+y+1;
z++;
}
}
//52種類のカードを用意
//100の位がマーク
//1〜10の位でカードの数字

for(i=0;i<52;i++){
printf("%d\n",allcard[i]);
}
//確認用
231デフォルトの名無しさん:2009/08/24(月) 21:05:44
printf("\n\n\n\n二枚引いてください。\n");
printf("まずは一枚目です。");
j=0;
//jは今が何枚目のカードなのか

while(getchar()!='\n'){}

i=rand()%52;
//出した乱数をとりあえず変数に保存しておく
pcard[j]=allcard[i];
allcard[i]=0;
//今回引いたカードにはゼロを入れておく

printf(" %d to %s\n",pcard[i]%100,mark[pcard[j]/100]);
//プレイヤーカードを100で割った余りのを出力
//プレイヤーカードを100で割った数値に対応したマークを表示
j=1;
//プレイヤーカード二枚目
printf("\n二枚目を引いてください。\n");

while(getchar()!='\n'){}

i=rand()%52;
pcard[j]=allcard[i];
while(allcard[i]==0){
i=rand()%52;
pcard[j]=allcard[i];
}
  //既に引いたカードならやり直し
allcard[i]=0;
//今回引いたカードにゼロを入れておく
printf(" %d to %s\n",pcard[i]%100,mark[pcard[j]/100]);
232デフォルトの名無しさん:2009/08/24(月) 21:13:34
>>230
まずアプローチがちがう
配列 シャッフル
でggrks
233デフォルトの名無しさん:2009/08/24(月) 21:21:27
>>227
その本は焼き捨てるか、
窓から投げ捨てると良いよ。
このご時世ならリサイクルもありだな。
234デフォルトの名無しさん:2009/08/24(月) 21:43:22
>printf(" %d to %s\n",pcard[i]%100,mark[pcard[j]/100]);
pcard[i]%100じゃなくて、,pcard[j]%100だろ
235デフォルトの名無しさん:2009/08/24(月) 21:54:13
>>234
ありがとうございます。視力が弱いせいでiとjが同じに見えてました
凡ミス・・・確認不足・・・恥ずかし・・・もうちょっと区別の付きやすい変数にしとこ・・・xyz使い回すか
236デフォルトの名無しさん:2009/08/24(月) 22:02:17
0で埋めるより、抜いたところに一番後ろのカードを入れると無駄なループしなくていいよ。

allcard[i] = allcard[51-j];

i = rand() % (52 - j);
237デフォルトの名無しさん:2009/08/24(月) 22:33:01
だれか助けていただけないでしょうか。

2プロセス間(A,B)でメッセージ通信を行っています。
この際に例えばAでBからのメッセージ1を受信後、さらにBよりメッセージ2を受信しようとすると、
セグメンテーションエラーがでます。
GDBを利用してデバッグしましたが、具体的にエラーが出ている行数や関数名等が表示されず、
大変困っています。
238デフォルトの名無しさん:2009/08/24(月) 22:35:37
デバッガ使ったけどバグ直ってないニダ
謝罪と賠償ニダ
239デフォルトの名無しさん:2009/08/24(月) 22:39:41
はいはい
とりあえずソースを見せろ
240デフォルトの名無しさん:2009/08/24(月) 23:47:53
>>233
独習Cってそんなにまずいの?w
2回も読んだよ
241デフォルトの名無しさん:2009/08/25(火) 00:00:17
ハーバートシルト先生の本は
ともかく平易で読みやすくキレイにまとまってはいるんだけど
平易にしすぎるせいか、意味があいまいだったり、
コードが安全でなかったりするんだよね。

STL標準講座も標準講座MFCもそんな感じだった。
とっかかりの本としてはいいんだけど
それだけで終わるとプログラマとしても終わってしまう。
別の本で、曖昧な箇所をきっちり矯正しておく必要あり。

ある程度他の言語を使ってきた人には二度手間本。
242デフォルトの名無しさん:2009/08/25(火) 00:03:36
独習C++も簡単?
243デフォルトの名無しさん:2009/08/25(火) 00:04:48
いつになったらwindowsアプリ作れるようになるんですか
244デフォルトの名無しさん:2009/08/25(火) 00:32:49
>>237
コア吐かせれば何か分かるでしょ。
245デフォルトの名無しさん:2009/08/25(火) 00:37:57
>>237
*((char*)p+1)なことやってるとか
handleを生ポインタで扱ってるとか
作って消して渡して読み取ってるとか
そもそもメッセージングには何使ってるんだおい
246デフォルトの名無しさん:2009/08/25(火) 01:06:46
PS3薄型と旧型の違い

旧型PS3:
Linuxインストール機能内蔵でPS3をPCとして使うことができる。
PPC Linux用の無料のソフトがいっぱい動く。
また、Cellの開発ツールも無料で入手できるので自分でCellのプログラムを作って実行させることができる。
ドルビーTrueHD、DTS-HDMAはリニアPCM変換で対応。
HDD〜80G
実勢価格36000円程度

薄型PS3:
Linuxインストール機能は除去された。
ブラビアリンク機能でブラビアと連動した電源のON OFFができる。
ドルビーTrueHD、DTS-HDMAのビットストリーム出力対応。
HDD120G
比較して低騒音低発熱
実勢価格29980円
247デフォルトの名無しさん:2009/08/25(火) 09:59:48
>>246
何?nanなの?
248デフォルトの名無しさん:2009/08/25(火) 13:11:54
>>236
ぐっときた
249デフォルトの名無しさん:2009/08/25(火) 14:24:23
>>235
iとjを見分ける労力=無駄【目がチカチカ】
http://pc12.2ch.net/test/read.cgi/tech/1243509968/

このスレ思い出したw
250デフォルトの名無しさん:2009/08/25(火) 18:49:57
インクリメントに使う一時変数の名前を最初にiとしたヤツは死刑。
251デフォルトの名無しさん:2009/08/25(火) 19:12:27
フォントによってはiとjの区別がほとんどつかないのもあるよねw
lと1の区別がつかないのもあるし、mとnも似てるし、oは0と混同するし、qは9と似てる場合もあるし。
252デフォルトの名無しさん:2009/08/25(火) 19:13:39
Cの標準ライブラリの関数名決めた奴の方が問題だろ
253デフォルトの名無しさん:2009/08/25(火) 20:37:20
代入してある数値の牛乳2本とジュース1本。1000円出しておつりはいくら?
消費税1.05%込み、答えは整数で。
って言う問題でコレ作ったんだけどコンパイルできない。
正答は知ってるけど、全然違うやり方だし、コレのどこがおかしいのか知りたいので
アドバイスお願いします。

#include<stdio.h>
int main(void)
{
int juice,milk,money,change,tax;
juice = 198;
milk = 138;
money = 1000;
tax = 1.05;

printf("%d",(int)(tax * (money - (juice + milk * 2))));
return 0;
}

254253:2009/08/25(火) 20:39:28
すいません、違うの貼ってしまいました。
コレです。

#include<stdio.h>

int main(void)
{
int juice,milk,money;
double tax;
juice = 198;
milk = 138;
money = 1000;
tax = 1.05;

printf("%d\n",(int)(tax * (money - (juice + milk * 2)));
return 0;
}

255デフォルトの名無しさん:2009/08/25(火) 20:43:37
>>253
エラーメッセージを読め、馬鹿
256デフォルトの名無しさん:2009/08/25(火) 20:47:33
money - (int)(tax*(juice + milk*2))
257デフォルトの名無しさん:2009/08/25(火) 20:57:31
というか、算数レベルの間違いしているのか。。
258デフォルトの名無しさん:2009/08/25(火) 21:01:04
乙。酔っ払いに立ち向かうなんて偉いじゃんw
259253:2009/08/25(火) 21:07:07
>>256
ありがとう、間違いに気づきましたw
260デフォルトの名無しさん:2009/08/25(火) 23:00:43
下記のプログラムについて質問です。
ブロック内でvalue2の宣言をしていないのに普通に使え、ブロック外でもブロック内での変更が
有効なのはなぜですか?
普通だったらブロック内→使えない ブロック外→20になるように思えるのですが。

#include <stdio.h>
int main(void)
{
int value1 = 10;
int value2 = 20;
printf("1:value1 %d\n",value1);
printf("1:value2 %d\n",value2);
{
int value1;
value1 = 30;
value2 = 40;
printf("2:value1 %d\n",value1);
printf("2:value2 %d\n",value2);
}
printf("3:value1 %d\n",value1);
printf("3:value2 %d\n",value2);

return 0;}

実行結果
1:value1 10 1:value2 20
2:value1 30 2:value2 40
3:value1 10 3:value2 40
261デフォルトの名無しさん:2009/08/25(火) 23:04:00
>>260
>普通だったらブロック内→使えない ブロック外→20になるように思えるのですが。

それはどこの言語のルールだ。
Cではこれが普通なのだ。
仕様どおりなのだ。
262デフォルトの名無しさん:2009/08/25(火) 23:04:53
>>260
%d→%pにしてみりゃわかる。
263デフォルトの名無しさん:2009/08/25(火) 23:05:33
レキシカルスコープでggr
264デフォルトの名無しさん:2009/08/25(火) 23:06:38
>>260
>>260
{
int value1;
value1 = 30;
value2 = 40;
printf("2:value1 %d\n",value1);
printf("2:value2 %d\n",value2);
}
はブロック外でなくブロック内。
265デフォルトの名無しさん:2009/08/25(火) 23:08:14
ブロック内で新たに宣言したらそれを使用、
ブロック内で宣言しなかったらブロック外の変数をそのまま使用。
266デフォルトの名無しさん:2009/08/25(火) 23:10:16
ふくろだたき
267デフォルトの名無しさん:2009/08/25(火) 23:10:57
>>261
ありがとうございます。もう少し詳しく説明してもらってもいいですか?
ローカル関数の寿命はブロック内、value1は別ブロック内で宣言されているので、
当初のvalue1とは名前が同じだけの別物の変数ですよね?
value2が宣言なしに別ブロック内で使えていること(このvalue2は当初のvalue2と同じものなのか別物なのか)
別ブロックを抜けたあとにも関わらず当初宣言されていた20が適用されず40になっていること

ここがよく理解できません。よろしければ詳しいアドバイスお願いします。
268デフォルトの名無しさん:2009/08/25(火) 23:19:28
C++ならこの問題簡単なんだろうなあ
でもこのスレはCだから面倒だなあ
269デフォルトの名無しさん:2009/08/25(火) 23:19:48
プログラミング言語作りたいんだけどflexとyaccって今でも使われてるんですか?
270デフォルトの名無しさん:2009/08/25(火) 23:23:51
>>267
話は単純なのだ。変数は宣言されたスコープ内では常に有効だ。
A{
 B{ }
}
のような場合、B{ }の中はA{ }のスコープの中でもあるのだ。
だからA{}の中で宣言された変数はB{}の中でも使えるのだ。

そんだけ。
271デフォルトの名無しさん:2009/08/25(火) 23:24:53
>>262
すみません、ポインタはまだ勉強していないのでよく分かっていません。

>>263
ググってみましたがC言語での説明が見つからなかったので、後で詳しく調べてみます。

>>264
{ (ブロック1){ (ブロック2)} } とした場合、ブロック1=ブロック2となるのでしょうか?

>>265
value2はブロック2で宣言されていなかったのでブロック1と同じものになるということでしょうか。
このルールは、例えば  { (ブロック1)} {ブロック2 }  といった環境でも適用されますか?
272デフォルトの名無しさん:2009/08/25(火) 23:25:12
>>267
1.上位ブロックで定義されたシンボルは下位ブロックでも同じものとして参照できる。
2.上位ブロックで定義されたものと同じシンボルが下位ブロックで定義されたら
それは別物とする。

こういう規則ですよ。
273デフォルトの名無しさん:2009/08/25(火) 23:26:09
>>270
なるほど!!!理解することができました。
皆様親切にどうもありがとうございます、とても助かりました!
274デフォルトの名無しさん:2009/08/25(火) 23:31:09
>>272
ありがとうございます!おかげさまで完全に理解できました。
そのルールで考えると
下位ブロック内でのvalue1は別物であり下位ブロック内のみで有効、
下位ブロック内でのvalue2は上位ブロックと同じもの

となるのですね。詳しい説明、どうもありがとうございました。
275デフォルトの名無しさん:2009/08/25(火) 23:32:07
>>271
ブロック内で宣言した変数はブロック内でのみ有効。
だからブロックが終了したらそれと同時に破棄される(例外はあるが)。
どうしてもブロック外の変数が使いたいなら、{ }以外の場所で
グローバル変数として宣言すべき。
276デフォルトの名無しさん:2009/08/25(火) 23:32:26
>>274
はい、そのとおりです。
277ドクターゲロ:2009/08/25(火) 23:36:15
C言語の壁はextern 構造体 配列 ポインタじゃ。
278デフォルトの名無しさん:2009/08/25(火) 23:37:44
関数ポインタ嫌い
279ブリーフ博士:2009/08/25(火) 23:38:37
C言語なんか簡単じゃのぉ
ドクターゲロなんてワシよりだめだのー
則巻センベエさんと話あったらドクターゲロとドクターミューはポインタが理解できてないっていってたの(笑)
280デフォルトの名無しさん:2009/08/25(火) 23:38:49
>>275
{ } { } となった場合でも使えるのがグローバル変数なんですね。
ちょうど勉強中のところなので参考になります、どうもありがとうございました!
281デフォルトの名無しさん:2009/08/25(火) 23:59:11
いや、グローバル変数はファイルをまたいでってことだな。
広域でも static 付けた
ファイル内のみ有効なのはグローバルとは言わん。
282デフォルトの名無しさん:2009/08/26(水) 02:07:49
なんでグローバル変数まで飛躍しちゃったんだ?
283デフォルトの名無しさん:2009/08/26(水) 09:31:57
坊やだからさ。
284デフォルトの名無しさん:2009/08/26(水) 10:04:16
typedef unsigned char UCHAR;
*((UCHAR*)0x4AAA) = 0xAA;
この場合0xAAが代入されるのはどこですか?
0x4AAA番地?0x4AAA番地に入ってるアドレスの番地?
285デフォルトの名無しさん:2009/08/26(水) 10:10:20
      00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0x4AA0 xx xx xx xx xx xx xx xx xx xx XX xx xx xx xx xx

このXXの部分が書き換わる
286デフォルトの名無しさん:2009/08/26(水) 10:37:58
>>284
いろいろツッコミどころがありすぎるが
**((UCHAR*)0x4AAA) = 0xAA;
後者はこう
287デフォルトの名無しさん:2009/08/26(水) 11:34:43
>>286
それは
>**((UCHAR*)0x4AAA)
に突っ込んでくれ、ってこと?
288デフォルトの名無しさん:2009/08/26(水) 11:35:26
今時そんなコード書くなんて
289デフォルトの名無しさん:2009/08/26(水) 11:46:43
坊やだからさ。
290デフォルトの名無しさん:2009/08/26(水) 11:54:44
>>285
ありがとうございます。

>>286
>>288
どこがおかしいでしょうか?
291デフォルトの名無しさん:2009/08/26(水) 12:55:28
>>284
0x4AAA番地

おかしなレスはスルーしとけ
292デフォルトの名無しさん:2009/08/26(水) 17:07:49
組み込みか
293デフォルトの名無しさん:2009/08/26(水) 20:08:05
0x4AAA番地に入ってるアドレスの番地に何かを代入するなら>>286でよくね?
294デフォルトの名無しさん:2009/08/26(水) 21:05:51
>>293
それならUCHAR**にキャストしないと
295デフォルトの名無しさん:2009/08/26(水) 21:19:37
アッー
296デフォルトの名無しさん:2009/08/26(水) 22:11:09
セグるんですけどどうやって原因の箇所を見つけ出したらいいですか。
297デフォルトの名無しさん:2009/08/26(水) 22:13:13
printfデバッグ
298デフォルトの名無しさん:2009/08/26(水) 22:18:42
printfを入れるのと入れないのとでセグる場所が変わるんですけどどうしたらいいですか。
299デフォルトの名無しさん:2009/08/26(水) 22:26:04
変わらなくなるまでprintf入れまくれ
300デフォルトの名無しさん:2009/08/26(水) 22:27:09
目視デバッグ
301デフォルトの名無しさん:2009/08/26(水) 22:41:16
>>298
配列やポインタ操作で
予約している大きさを突破して書き込んでいるパターンかも
302デフォルトの名無しさん:2009/08/26(水) 22:49:43
>>298
おそらく、どこかでスタック上のメモリーを壊しているか
初期設定されていないスタック上のデータをアクセスしている。

printfなどの関数を呼ぶとスタック上のメモリーが呼ばないときと変わるので
上のようなケースでは呼ぶ場合と呼ばない場合とで動作が異なってくる。
303デフォルトの名無しさん:2009/08/26(水) 22:57:50
データを破壊している配列やポインタはどうやって特定すればいいですか
現代の科学技術ではこの問題に対して人類は目視デバッグでしか対抗できないのですか
304デフォルトの名無しさん:2009/08/26(水) 23:00:26
つ デバッガ
305デフォルトの名無しさん:2009/08/26(水) 23:01:08
釣りくさ
306デフォルトの名無しさん:2009/08/26(水) 23:04:01
いや、ソース見せてみて
サークリデバッグしとくから
307デフォルトの名無しさん:2009/08/26(水) 23:08:23
cygwinでコンパイルすると警告が出ない。
メモリ破壊プログラム。

void sub(int** p)
{
  *p = (int*)100;
}

int main(void)
{
  int* p;
  sub(&p);

  return 0;
}
308デフォルトの名無しさん:2009/08/26(水) 23:10:47
>>307
これ安全じゃないの?
309デフォルトの名無しさん:2009/08/26(水) 23:16:19
pに100を代入しているだけだもんな。
310デフォルトの名無しさん:2009/08/26(水) 23:26:23
mallocで割り当てられたアドレスと同じアドレスをちゃんと解放したのに
クラッシュするなんてことはありえるんですか?
311デフォルトの名無しさん:2009/08/26(水) 23:29:10
一見pに100を入れてるように見えるけど
実はアドレスの0x64(100)番地を差すって意味になってるとか?
312デフォルトの名無しさん:2009/08/26(水) 23:32:52
>>311
一緒の意味じゃねーかw
313デフォルトの名無しさん:2009/08/26(水) 23:36:00
わりい、ごめん。メモリ破壊しないわw
314デフォルトの名無しさん:2009/08/26(水) 23:40:42
>>310
二回ちゃんと開放したらクラッシュするかもね
315デフォルトの名無しさん:2009/08/26(水) 23:40:43
単に型が一致しないってエラーが出るだけか
316デフォルトの名無しさん:2009/08/26(水) 23:58:55
デバッグしながら実行したら出た「DAMAGE after Normal block」
ってのググったらバグの内容だけはすぐに分かった。原因はまだ分からない
あまりにも珍事だったんですぐ聞いてしまった。ごめん
ほんと初心者の常識なんて当てになんないねぇ
317デフォルトの名無しさん:2009/08/27(木) 00:17:08
デバッグ終了した
くだらない書き間違いだったmalloc(10 + sizeof(int))
見つけるのに2時間かかったが・・・
ありがとうございました
318デフォルトの名無しさん:2009/08/27(木) 01:14:16
セグった後でそのアドレスの前後に何という名前の変数や関数が格納されているかを確認できないすかね。linux環境で。
319デフォルトの名無しさん:2009/08/27(木) 02:46:40
今だから、ゲーム作る本買おうとして、はじめに読んだら、C言語を知ってて前提みたいなことかいてアンの
だからやさしいC++って本買ったら、C言語からおしえやんの
猿でもわかるC言語みたら、いきなり数学やらすから蕁麻疹でてやめた
320デフォルトの名無しさん:2009/08/27(木) 02:54:01
向いてないからやめて正解だと思うよ
321デフォルトの名無しさん:2009/08/27(木) 02:55:13
ばかっ!
あきらめたらそこで試合終了だよ!
322デフォルトの名無しさん:2009/08/27(木) 03:17:35
いつまでも終わらない死合はもういやだお…
323デフォルトの名無しさん:2009/08/27(木) 06:02:08
向いてない感じがばりばりだから
止めとくのが良いかと。

どの言語だって上になるにつれて難しくなってくるし。
324デフォルトの名無しさん:2009/08/27(木) 06:07:13
向いてないとかすぐ人を遠ざけるw自分が知ってる知識をこれ以上広げたくない、俺がしってりゃいいw
ちょっとばかしできたからと、直ぐ調子に乗るのがお前の悪いところだ
325デフォルトの名無しさん:2009/08/27(木) 08:47:51
あなたがその博愛精神を生かして懇切丁寧に教えてあげれば宜しかろうと存じます。
326デフォルトの名無しさん:2009/08/27(木) 08:49:05
>>324
与えられた時間内にそれなりの結果を出さないといけないんだよ
向いてないものにかかりっきりとか馬鹿じゃねーの?
327デフォルトの名無しさん:2009/08/27(木) 09:49:24
アドバイスお願いします。
A,B以外の場合にプリントエフ文を実行させたくて作ったプログラム(プログラム三行目)
が、Aの場合でも実行されてしまいます。
A||Bに直したらうまく実行されるようになりましたが、なぜなのかが理解できておらず
困っています。分かる方、宜しくお願いします。
if(A)printf(A)
if(B)printf(B)
if(!(A && B))printf(A,Bではありません)・・・失敗

if(!(A || B)printf(A,Bではありません)・・・成功
328デフォルトの名無しさん:2009/08/27(木) 09:53:55
!(A && B) は、 (!A || !B) と同値だと、中学くらいで習ったような
329デフォルトの名無しさん:2009/08/27(木) 09:59:00
(!A&&!B) が !(A||B) と同値なのも同じくらいに習うよな
330デフォルトの名無しさん:2009/08/27(木) 10:29:33
!(A && B) = (!A || !B) だから、Bでない時でもAだったから実行されてしまったということ、
!(A || B) = (!A && !B) だから、!(A || B)でprintf(A,Bではない)の実行が成功したということ
が理解できました。ありがとうございます!

ただ、!(A && B)というのは 否定(AとB)なのに、
なぜ(A,Bでない)にならずに(Aでない または Bでない)になるのかが感覚的に理解できないのですが、
括弧内の&&論理演算子の偽が適用された(!で(&&)の真が偽に切り替わった)訳ではなく、
単純に論理的に考えると(AとB)の反対は(AかB)になる、ということなんでしょうか?

読みづらい質問で大変恐縮ですが、よろしければ回答お願いします。
331デフォルトの名無しさん:2009/08/27(木) 10:34:37
ド・モルガンの法則は高等数学Aだと思うが。
俺がゆとり世代だからか。
332デフォルトの名無しさん:2009/08/27(木) 10:45:18
>>331
ド・モルガンの法則ググって幸せになれました、感謝です!
自分は高校でも習った記憶ないのですが、文系特化した私立高だったので飛ばされたっぽいです。
333デフォルトの名無しさん:2009/08/27(木) 11:59:05
中学1年生で、集合論や二進法を教えていた時代もあったというのに。
ttp://www.dainippon-tosho.co.jp/math_history/history/age03_ju/index.html
334デフォルトの名無しさん:2009/08/27(木) 12:03:42
>>333
団塊Jrの上の世代だな
335デフォルトの名無しさん:2009/08/27(木) 16:33:40
>>318
1. ソースコードを目で追って確認
2. デバッグモードでコンパイルすると落ちた箇所の関数名とライン数が出るコンパイラもある
 (gccは知らない)
3. デバッガーで実行し、落ちたところの状況を調べる。
4. gccでコンパイルするときにリンクマップファイルを出力する。
 そのリンクマップファイルに書かれている関数のアドレス、外部変数のアドレスを目安につきとめる。

まあ、こんなところかな。
336デフォルトの名無しさん:2009/08/27(木) 16:56:47
シンボル付きでコンパイル/リンクしてれば
core と一緒にデバッガに渡せばすぐ判るだろjk
337デフォルトの名無しさん:2009/08/27(木) 18:02:48
「セグる」って略はおかしいだろ。
Wikipedia を wiki と略すぐらいおかしい。
338デフォルトの名無しさん:2009/08/27(木) 18:06:34
江川スグる
339デフォルトの名無しさん:2009/08/27(木) 18:09:04
ソフトウェアキーボードのような他の窓などにキー情報を送るアプリとか簡単に組めるようになりますか?
340デフォルトの名無しさん:2009/08/27(木) 18:13:12
主語が無いのでわからない。
341デフォルトの名無しさん:2009/08/27(木) 18:18:29
Can you 〜?
Can I 〜?
342デフォルトの名無しさん:2009/08/27(木) 18:38:29
なおさらおかしいかもしれんが 「SEGVる」 はわりと使う
343340:2009/08/27(木) 19:06:39
主語が無いのでわからないとか国語力とかいうやつって
やたらとコミュニケーションとかを重視して、技術力を忘れてるバカだよな。


だいたい339の言ってる事はわかるだろ。
何故そうやって主語が無いのでわからないとかいうんだろうな^^;
過去に、お前主語が無いよって指摘されたのか、主語を国語で習ってそれから使いだしたやつだよな(爆笑)
34493,174:2009/08/27(木) 19:11:17
テラワロス wwwwwwwwwwwwww
345340:2009/08/27(木) 19:15:09
なんで最近の馬鹿は
英語 コミュニケーション能力 を重視してるわけ?(笑)
過大評価し過ぎだろ^^;

マスコミの影響だろうな。英語ができれば給料があがるとか。
ITが発達してきて忘れられてる物などのドキュメンタリー番組の影響を受けて
やたらとコミュニケーション能力を過大評価しすぎ。

英語できないとだめ そんな事無い。日本で働いてるなら英単語くらい

コミュニケーション能力 いらない 話かけて応答できるくらいで。

技術力がなくて仕事に興味が無いっていうやつは邪魔。

だいたい企業の紹介文に、明るく前向きにコミュニケーションがとれるかた!
とIT系にやってるのはコンプレックスの裏返し。

ネクラ企業、怪しい企業とみられたくないように必死に女性などの画像をはって
明るくみられたいための手段(笑)

だいたいお見通しですよ(爆笑)
346デフォルトの名無しさん:2009/08/27(木) 19:15:50
340の言ってることが的中しすぎて反論できない(笑)
347デフォルトの名無しさん:2009/08/27(木) 19:25:04
地球人と同等の知能でもことば通じない宇宙人と一緒に仕事したくないだろ普通
コミュニケーション能力が欠如してるやつってのは普通の人から見たらほとんど宇宙人とかわらないんだよ
自覚してくれまじで
348デフォルトの名無しさん:2009/08/27(木) 19:26:18
主語を付けたとしてもまだわからんと思う。
349デフォルトの名無しさん:2009/08/27(木) 19:35:44
うっせばーか!C++の本買ったからこんなショボスレこっちから出てってやるよ!
350デフォルトの名無しさん:2009/08/27(木) 19:36:26
主語は「私」だろ。
日本語の口語では主語をはっきり言わないことが多い。
文脈や相互の立場から主語は暗黙のうちに理解されている。
351デフォルトの名無しさん:2009/08/27(木) 19:42:38
>>350
(私は)ソフトウェアキーボードのような他の窓などに
キー情報を送るアプリとか簡単に組めるようになりますか?
352デフォルトの名無しさん:2009/08/27(木) 19:43:49
質問です。
C言語の勉強をはじめたばかりで、下記の問題の正答に納得できない部分があります。

Q1:関数に数値を渡すために宣言する変数のことをなんと呼ぶか。
自分の答え:実引数
  正答 :仮引数

Q2:関数を作るのは何のためか、簡潔に説明せよ。

自分の答え:プログラムとは関数の集まりであり、関数を作らない限り動作しないから。
  正答 :機能別に関数を作り、それを組み合わせることでプログラム全体が完成し、
      大きなプログラムでも作りやすくなるため。

Q1
実引数=呼び出し側の関数が関数側に渡す数値。
仮引数=関数側が呼び出し側から実引数を受け取るための特別な変数。
というように理解していたので、渡すための変数なら実引数のように思えたのですが、
なぜ仮引数になるのか。
Q2
大きなプログラム云々の前に、関数を作るのはプログラムをつくるためだと思うのですが、
なぜこのような正答になるのか。

長文ですみませんが、アドバイスもらえたら助かります。宜しくお願いします。
353デフォルトの名無しさん:2009/08/27(木) 19:44:38
>>351
おまえ次第、としか言いようがない。
35493,174:2009/08/27(木) 19:47:22
>>352
ワロタ wwwwwwwwwwwwwwwwwww
355デフォルトの名無しさん:2009/08/27(木) 19:48:38
>>352
こんなことに頭を使うより、具体的なコード作成練習をするべき。
356デフォルトの名無しさん:2009/08/27(木) 19:51:45
>>352
Q1
「と理解していた」ていうけど、本来の意味を無視して自分勝手に解釈してるだけ
Q2
「云々の前に」というけど、これもまだ大したプログラムができない自分をを中心に
勝手に解釈してるだけね
35793,174:2009/08/27(木) 19:57:54
この「宣言する」というキーワードがミソだな。

俺が問題作成者なら

 「関数に数値を渡すために宣言する変数」
→「関数に数値を受け取るために宣言する変数」
         ̄ ̄ ̄ ̄ ̄ ̄
35893,174:2009/08/27(木) 19:59:07
>>357
日本語でおk
359デフォルトの名無しさん:2009/08/27(木) 20:02:17
>>355
まだ引数、仮引数、実引数あたりの知識が曖昧な感じなので、間違って覚えてたら
困ると思って質問しました。

>>356
仰る通り自分勝手に解釈しているので、どこが間違っているのか指摘してもらうために
ここで質問したんですが…ずいぶんな言い方されてますが、嫌なことでもあったんですか。
あんまり噛み付かないでくださいね。

360デフォルトの名無しさん:2009/08/27(木) 20:04:34
これくらいで随分な言い方と感じてたら世の中渡り歩けないぞ
36193,174:2009/08/27(木) 20:06:07
気楽に行こうぜ wwwwwwwwwwwwwwwwwwww
362デフォルトの名無しさん:2009/08/27(木) 20:10:58
>>360
既に渡り歩いてますので大丈夫です。
36393,174:2009/08/27(木) 20:13:09
こういう、ひねくれた事ばかり言っているから
問題が素直に解けないんだな かっこわら
364デフォルトの名無しさん:2009/08/27(木) 20:16:34
回答者でない、ましてやアドバイスもなく嫌味ばかり言う人間に礼儀正しくする必要は感じないのですが
365デフォルトの名無しさん:2009/08/27(木) 20:19:33
ここはIDでないから自演で成りすましが多い。
バカがくだらないことしてるって鼻で笑って気にしないのが一番。
366デフォルトの名無しさん:2009/08/27(木) 20:23:27
アドバイスがあればいいんだね。
main"関数"すらないプログラムだってかけるんだぜ。
よってプログラムを作成するために必須であるとはいえない。
char main = 0;
367デフォルトの名無しさん:2009/08/27(木) 20:33:29
memcpyやCopyMemory関数を使えば、あるバッファから別のバッファへのコピーができます。
それに対し、あるバッファ(配列)を特定の値で埋めるような関数はないでしょうか?

例えば、DWORD型配列の先頭ポインタpBuffDstに対し、4要素分( 4 * sizeof( DWROD ) = 16[ Byte ] )すべてに0xfe8d9aを埋めたいときなどに使える関数です。

今はfor文で回して、各要素に順番に代入していますが、関数を使えば記述がシンプルになるほか、
速度面でも改善されるかもしれない、と期待しています。
(for文によるコピーよりもCopyMemoryやmemcpyのほうが断然速かった経験があるため)

もし、そういう関数をご存知でしたら教えてください。
よろしくお願いします。 m(_ _)m
368デフォルトの名無しさん:2009/08/27(木) 20:35:44
memset
369デフォルトの名無しさん:2009/08/27(木) 20:36:38
あーすまんよく読んでなかった
自前で作ったらどう?
370デフォルトの名無しさん:2009/08/27(木) 20:37:31
>>352
その問題からは、どっちが正しいとも言えない。
多分、初心者か中級者が作った問題なんだろうけど
問題が悪いとしかいいようがない

世の中渡り歩いてるなら、相手の意図を汲み取って回答するようにしよう
371デフォルトの名無しさん:2009/08/27(木) 20:39:53
>>343
なんでそんな自己批判を繰り返すのですか?
372デフォルトの名無しさん:2009/08/27(木) 20:41:55
>>367
for文で書いても普通に最速になるはず

memcpyが速い理由として、CPUの特殊命令(SSEとか)を使っている可能性が
あるけど、仮にそうでもよほど大きなサイズでないと for文との差は出ない。
373デフォルトの名無しさん:2009/08/27(木) 20:47:35
>>365
ありがとうございます。煽り耐性身につけようと思います。
文句言うだけの暇人なんて気にしない!

>>366
参考になりました。Q2はプログラムとは基本的に関数の集まりであるから、と考えることにします。

>>377
私もこの問題は曖昧すぎるように思いましたが、初心者の時点で問題が悪い、と決めつけるのは
学習の妨げになると思っているので、他の方の意見が欲しくて質問しました。
あと、作った方は筋金入りのプロみたいですよ。間違っても良問だとは言えませんが。

欲しかった答えがもらえたので失礼します。ありがとうございました。
374367:2009/08/27(木) 20:51:05
>>368
ありがとうございました!
速度はあまり変わりませんでしたが、勉強になりました!

>>372
う〜ん、for文の二重ループで1920x1080の画像を同サイズのバッファにコピー移ししたときに
計測(QueryPerformance〜を利用)しましたが、
for文記述: 約3.0[ms]
CopyMemory: 約1.6[ms](memcpyもほとんど同じ)
でした。
CPUはCore2Duo E8600@定格です。
VC++の設定で「拡張命令セットを有効にする」は設定なしにしているので、SSEとかは
入ってないはずです。
不思議ですね・・・(汗)
375368:2009/08/27(木) 20:54:16
x86の命令に大量に転送するために使うのがあったはずなんだわ
その関数の中ってアセンブラでかかれてない
376デフォルトの名無しさん:2009/08/27(木) 20:58:05
>>373
必ずしも関数の集まりである必要はないんだけど、なぜ関数の集まりになっているのかというと、
先の回答の通り。
377デフォルトの名無しさん:2009/08/27(木) 21:00:52
>>372
for文回すときでも、アライメント合わせて複数バイトまとめて転送とかは基本テクニック。
あとパイプラインを乱さないために、ループ一回で16byteくらいはコピーした方がいい。
378372:2009/08/27(木) 21:02:27
>>374
for文がバイト単位でコピーしてるなら、copymemoryの方は
アライメントを揃えてワード単位でやってるかもしれない。

逆にいうとそれぐらいの工夫はfor文でも普通にやるもんだと思う。

あと確かに >>375のいう命令(loopだっけ)で効率化されるけど、
ほとんどの時間はメモリアクセスに掛かってるんじゃないかなあ
379デフォルトの名無しさん:2009/08/27(木) 21:04:39
>>374
4byteデータでfillする話と
for文の二重ループで1920x1080の画像を同サイズのバッファにコピー
の話はまるで違うように思わんでもないが
380デフォルトの名無しさん:2009/08/27(木) 21:06:05
for文で2重ループももったいないな
381372:2009/08/27(木) 21:06:40
あ、思い出した。rep プレフィクスか
382368:2009/08/27(木) 21:08:39
そうそう

rep movsd とか
383368:2009/08/27(木) 21:09:44
http://www5c.biglobe.ne.jp/~ecb/assembler/assembler00.html
http://www5c.biglobe.ne.jp/~ecb/assembler/7_3.html

これは8086の話なのでもっと大きなレジスタ使える今だともっと違う方法があるかもね
384367:2009/08/27(木) 21:14:06
>>375
なるほど。
そうだったんですか。

>>377
>>378
アライメントというのを考慮しないといけないんですね。
ありがとうございます。

>>379
はい、それはまた別の話です。
あと、1920x1080とは言いましたが、UYVY形式になっていますので、RGB形式とはちょっと違ってきますね。
385367:2009/08/27(木) 21:15:04
以下に単純コピー時のコードを記します。

DWORD *pBuffSrc;
DWORD *pBuffDst;

・・・
(pBuffSrcに画像データが入る)
・・・

W = 1920 / 2;
H = 1080;

// pBuffDstにコピーする
for( int Y = 0; Y < H; Y++ )
{
for( int X = 0; X < W; X++ )
{
*( pBuffDst + X ) = *( pBuffSrc + X );
}

pBuffSrc += W;
pBuffDst += W;
}

-------------------------------------------------------------

関数コピーの場合のコードを以下に記します。

CopyMemory( pBuffDst, pBuffSrc, DataSize );
386368:2009/08/27(木) 21:16:33
>>384
x86はアライメント無視しても実行速度低下というペナルティで済むけど
他のプロセッサはアライメント無視すると実行不可になるから
387368:2009/08/27(木) 21:18:49
>>385
for文を一つにしたらどう?

ピクセルデータといえど 縦 x 横 / バイト数 分繰り返すのも同じだし
388デフォルトの名無しさん:2009/08/27(木) 21:21:37
あーすまん
>縦 x 横 / バイト数 分繰り返すのも同じだし
これ変だな

縦 x 横 分繰り返すのも同じだし
389デフォルトの名無しさん:2009/08/27(木) 21:21:59
動画のエンコードで左右比較したいって言ってた人か
左側だけ新しいのを貼り付けたいってこと?
390デフォルトの名無しさん:2009/08/27(木) 21:23:16
とおもったら半分に限ったわけでもなかった。
1重に落とすのが楽だろうね
391デフォルトの名無しさん:2009/08/27(木) 21:31:57
>>356 が馬鹿すぎる件
392367:2009/08/27(木) 21:32:04
>>386
x86は寛容ですね!

>>387
>>388
>>390
ありがとうございます!
一重にしたらかなり高速化されて、CopyMemoryとほぼ同じ1.4[ms]となりました!
(それでも若干(70[us]ほど)まだCopyMemoryのほうが速いです)

ありがとうございました!
393368:2009/08/27(木) 21:36:33
>>392
寛容というかアライメントの話は8086までさかのぼるんだけどねw
x86はひたすら互換を維持することで今まで拡張されつつ残ったCPUだからねえ

394デフォルトの名無しさん:2009/08/27(木) 21:43:33
8086はx86じゃないのか?
395368:2009/08/27(木) 21:49:17
そうだよ

ただアライメントの話をするにはどこからそうなってるかというので8086とあえて言ってるだけ
8086をベースにモードが増えたりレジスタを拡張したりそれまでは
バス速度とCPUの速度が一緒だったのをCPUだけクロックあげる仕組みいれたりと・・・


396デフォルトの名無しさん:2009/08/27(木) 22:00:34
int count = H * W;
while (count--) *pBuffDst++ = *pBuffSrc++;

とやるのはどうなんだろうか。
397363:2009/08/27(木) 22:03:25
うんちくび
398デフォルトの名無しさん:2009/08/27(木) 22:05:05
レス番コテばっかでワケワカメ
399デフォルトの名無しさん:2009/08/27(木) 22:06:11
idほしいよね
400デフォルトの名無しさん:2009/08/27(木) 22:06:50
const DWORD *pSentinel = pBuffSrc + H * W;
do {
*pBuffDst++ = *pBuffSrc++;
} while (pBuffSrc != pSentinel)

このほうがいいかなぁ。
だけど、CopyMemoryで実現できることをなんでわざわざループでどうにかしようとしているんだろう。
401363:2009/08/27(木) 22:08:54
>>400
画像コピーするとかばかだろ
402デフォルトの名無しさん:2009/08/27(木) 22:08:55
>>391
なんで?
403デフォルトの名無しさん:2009/08/27(木) 22:08:57
お世話になります。現在、C言語を勉強中なのですが以下のプログラムでわからないことがあります。

#include <stdio.h>

#define MATHMAX 1000

typedef struct{
char mathbox[MATHMAX][MATHMAX];
} MATH;


int matharr(MATH *math){
long int roop1, roop2;

for(roop1=0;roop1<MATHMAX;roop1++){
for(roop2=0;roop2<MATHMAX;roop2++){
math->mathbox[roop1][roop2]=1;
}
}
return 0;
}


int main( void){
MATH math;
matharr(&math);
return 0;
}


現在、構造体の勉強中なのですが、これは間違っていますでしょうか?
MATHMAXの値を大きくすると、セグメンテーションフォルトになってしまいます。
404デフォルトの名無しさん:2009/08/27(木) 22:10:41
>>401
4byteデータでfillしたいという話ならループの話に持ってってもいいけどねえ。
なぜ画像コピーの話になったのやら。
405363:2009/08/27(木) 22:10:53
>>400
日本語でおk
主語が無いよ
406デフォルトの名無しさん:2009/08/27(木) 22:11:40
>>403
スタックに巨大な領域を確保しようとしているから

とりあえずは static を追加すればおk

int main( void){
static MATH math;
matharr(&math);
return 0;
}
407デフォルトの名無しさん:2009/08/27(木) 22:12:35
>>403
サイズがでかすぎたんでないの?
408デフォルトの名無しさん:2009/08/27(木) 22:12:36
>>405
おもしろい?
409デフォルトの名無しさん:2009/08/27(木) 22:12:52
>>403
int main( void){
MATH math;

この確保だとスタックという場所にMATHが確保されるんだけどスタックはそれほど大きな場所じゃないので
エラーがでます

mallocで動的に確保するかstaticで確保しましょう
410363:2009/08/27(木) 22:12:57
>>404
>>406
主語が無いよ
日本語でおk
411363:2009/08/27(木) 22:16:49
主語が無いよ
日本語でおk
と言われて不快だろ?
人に言われて嫌なことを言うな。
412デフォルトの名無しさん:2009/08/27(木) 22:18:43
>>410
こういう、ひねくれた事ばかり言っているから
問題が素直に解けないんだな かっこわら
413403:2009/08/27(木) 22:19:16
皆様ありがとうございます。

スタックと言うものを少し調べてみたのですが、プログラムの間違いではなく、OS?の仕様と言う認識でよろしいでしょうか?
414デフォルトの名無しさん:2009/08/27(木) 22:20:41
>>413
まあそんなところです
415デフォルトの名無しさん:2009/08/27(木) 22:21:19
staticはスタックのことでよろしいですか
416デフォルトの名無しさん:2009/08/27(木) 22:21:57
>>411
やられたらやりかえすのは悪いクセだということを小学校で習わなかったかい?
417デフォルトの名無しさん:2009/08/27(木) 22:21:58
>>415
いえ
staticをつけると実行ファイルの中に確保されます
418デフォルトの名無しさん:2009/08/27(木) 22:24:23
>>417
嘘言ってんじゃないよ
419デフォルトの名無しさん:2009/08/27(木) 22:25:45
>>417
初期化してなければそうでもないんじゃね?
初期化してないっつーのは、要は全部 0 ってことな。これもまあ初期化ではあるけど。
420デフォルトの名無しさん:2009/08/27(木) 22:29:16
staticはスタックに確保されるかって質問に「実行ファイルに確保される」って答えはおかしいよな
421デフォルトの名無しさん:2009/08/27(木) 22:29:53
>>418>>419
まあ正確には実行ファイルのサイズが増える場合とそうでない場合がある
422デフォルトの名無しさん:2009/08/27(木) 22:32:11
>>420
初期化の有無とかでかわるのかも知れないがstaticをつけると実行ファイルの中に
すでに組み込まれてる場合もあるよ

その場合はスタックでもないし
423デフォルトの名無しさん:2009/08/27(木) 22:34:09
>>422
そりゃ、実行ファイルはstaticがどう初期化されるかって情報を
持ってるだろうけど「実行ファイルに確保される」は変だろ。
424デフォルトの名無しさん:2009/08/27(木) 22:34:46
>>415
場合によって意味が変わるから本を読むとかググって調べるといいよ
425デフォルトの名無しさん:2009/08/27(木) 22:36:10
>>423
じゃあなんというんだいw
実行ファイルがstaticありとなしで配列分程度サイズが増減する場合はどこにあるっていうんだよw
実行ファイルがメモリにロードされた時点でメモリに存在するし
配列はスタックの上には無いぜ
mallocで確保したわけでもない
426デフォルトの名無しさん:2009/08/27(木) 22:36:59
あんな質問馬鹿にされるかと思ったのになんて有意義(そう)な議論やってるんだ
俺は感動したよ
427デフォルトの名無しさん:2009/08/27(木) 22:37:40
実行ファイルがどうこうと、プロセスになってからの挙動は、レイヤーが違うからなぁ。
428デフォルトの名無しさん:2009/08/27(木) 23:09:47
初期値があるんだから実行ファイルの中に無かったらおかしいだろ。
文字列リテラルだって実行ファイルの中にあるわさ。
わざわざコピーする手間省くためにロードしたそれをそのままアクセスしてるだけだろ。
429367:2009/08/27(木) 23:13:55
>>396
考えてくださって、ありがとうございます。
結果は約3.0[ms]でした。

>>400
結果は約2.5[ms]でした。
>だけど、CopyMemoryで実現できることをなんでわざわざループでどうにかしようとしているんだろう。
僕が「forループでコピーするよりCopyMemory等の関数のほうが速い」と言ったのに対して、
そんなことはなく、ループでも同等に速くなるはず、という意見をいただいたからで、
それを実証すべく、ループでのコピー方法を考えるという流れになりました。
430デフォルトの名無しさん:2009/08/27(木) 23:15:57
>>428
そこはぜんぜん否定してないよ。
「static変数はスタックに確保されますか?」って文脈だと
「実行ファイルに確保される」って答えは変って話。
431デフォルトの名無しさん:2009/08/27(木) 23:16:24
static変数はメモリーにロードするときのアドレス解決の情報のみが実行ファイルに格納されている。
初期値があれば初期値も入っている。

ということではないかな?
432デフォルトの名無しさん:2009/08/27(木) 23:16:44
char *p = "Fack you.";
p[2] = 'u';

こういうのって許されるの?
433デフォルトの名無しさん:2009/08/27(木) 23:21:01
>>432
ふつうのコンパイラではダメでしょ。
"Fack you."の文字列が格納してあるところにセグメント/ページにwriteプロテクトをかけている。
writeプロテクトを設定しないコンパイラ(環境)だったら許される。
434デフォルトの名無しさん:2009/08/27(木) 23:45:42
実行ファイルに確保ってどういう事だよ…
実行時に静的領域に確保されるんだろ?
435デフォルトの名無しさん:2009/08/27(木) 23:47:35
そんなこと規格書に書かれているのか
436デフォルトの名無しさん:2009/08/28(金) 00:01:16
>>435
言語か?それともコンパイラか?OSか?
437デフォルトの名無しさん:2009/08/28(金) 00:08:33
>>436
お前どんだけ無能なんだよww

規格とヘルプの違いも知らんのか。
438デフォルトの名無しさん:2009/08/28(金) 00:10:42
>>435
どこに確保しようがコンパイラの自由
439デフォルトの名無しさん:2009/08/28(金) 00:15:23
ローダーが読めなきゃだめだろ
440デフォルトの名無しさん:2009/08/28(金) 00:18:10
>>439
揚げ足とりは楽しいかい?
441400:2009/08/28(金) 01:08:36
>>429
あれ、おそくなっちゃった?ごめんね><
442デフォルトの名無しさん:2009/08/28(金) 04:06:22
>>437
何言ってるのかわからないので放置しまう^p^
443デフォルトの名無しさん:2009/08/28(金) 09:29:15
>>434
だから環境によるって何度も言われてるじゃないか。
初期値があれば勿論のこと、なくても
定数 0 の羅列が実行ファイルに確保されることだってある。
444デフォルトの名無しさん:2009/08/28(金) 12:06:42
今年開成高校に入学した者ですが、C言語を独学で勉強したところ夏休みだけでマスターしてしまいました。
最近はP2P技術に興味がありwinnyなんかのソースを解読したいと思っています。
大学レベル程度のことでしたら独学でいけますが、ハッカーになるためには次に勉強するべきことは何でしょうか?
英語はTOEIC730ぐらいです。
445デフォルトの名無しさん:2009/08/28(金) 12:11:37
そういえば家の研究室にTOEIC950持ってるやついたな
俺?おれ420ですよ論文やばい
446デフォルトの名無しさん:2009/08/28(金) 12:13:23
論文ってことは大学生ですか?大学生で420とかやばいですね。
447デフォルトの名無しさん:2009/08/28(金) 12:13:35
TOEICって新しいC言語ですか
448デフォルトの名無しさん:2009/08/28(金) 12:16:17
博士課程れす^p^
めっちゃやばい日常会話ができない
449デフォルトの名無しさん:2009/08/28(金) 12:18:23
なんか最近変な奴が多いな。
夏だからか。。
450デフォルトの名無しさん:2009/08/28(金) 12:20:47
>>444
> ハッカーになるためには次に勉強するべきことは何でしょうか?
それくらいググればいくらでも出てくるだろ。。
451デフォルトの名無しさん:2009/08/28(金) 12:22:02
ってかC言語マスターしたならそれでいいんでね?
452デフォルトの名無しさん:2009/08/28(金) 12:38:20
まず必要なのは日本語の勉強じゃね?
スレタイに書いてある程度の漢字も読めないみたいだし。
453デフォルトの名無しさん:2009/08/28(金) 12:40:38
マジレスするなら次はC++のマスターだな
winnyはC++で書かれてるはずだし
454デフォルトの名無しさん:2009/08/28(金) 12:41:52
開成行くような奴がハッカー…高卒でもなれるもん目指してどうするよw
455デフォルトの名無しさん:2009/08/28(金) 12:57:06
俺はFランだが、ガキの頃から独学でやってきて今ココ。
456デフォルトの名無しさん:2009/08/28(金) 13:08:57
開成に外部からじゃ肩身がせめーだろw
457デフォルトの名無しさん:2009/08/28(金) 13:10:44
>>447
他にKADOKAWA-Cもあります。
458デフォルトの名無しさん:2009/08/28(金) 13:41:48
>>444
これなんかのコピペだろ
459デフォルトの名無しさん:2009/08/28(金) 13:48:09
英語の自慢がしたいだけだよ。
スルーしておけ。
460デフォルトの名無しさん:2009/08/28(金) 15:18:29
結局もう出てこないしな。
461デフォルトの名無しさん:2009/08/28(金) 18:46:05
>>443
スタックじゃなければどこよ?って話なんだから実行時のメモリの使い方だろが。
初期値がどこに確保されるか?って話じゃないのに何故実行ファイル?
462デフォルトの名無しさん:2009/08/28(金) 19:15:05
結局実行ファイルがロードされた領域の名前を誰も挙げないってことでFA?
463デフォルトの名無しさん:2009/08/28(金) 20:42:14
すみませんが以下のプログラムの::の意味を教えてください

while(1)
{
Move1();
::Sleep(10);
}

「::」でググってもうまくヒットしてくれない
464デフォルトの名無しさん:2009/08/28(金) 20:47:18
>>463
C++
スコープ解決演算子
名前空間の中にも同じSleep()という関数があり、それと
区別してWin32 APIのSleep()を呼び出す
465デフォルトの名無しさん:2009/08/28(金) 20:48:48
#include <stdio.h>
void convert(long num,char str[]);
int main(void)
{
char str[80];
char u[80]="4";
long i;
i=1234567;// 1,234,567
convert(i,str);
printf("%s\n",str);
return 0;
}
void convert(long num,char str[])
{
int i=0,j=0;
char table[]="0123456789";
char tmp;
do{
str[j++]=table[num%10];
num/=10;
i++;
466デフォルトの名無しさん:2009/08/28(金) 20:50:33
if(i%3==0 && num!=0)
{
str[j++]=',';
}
}while(num!=0);
str[j--]='\0';
for(i=0; i<j; i++,j--)
{
tmp=str[i];
str[i]=str[j];
str[j]=tmp;
}
}

これって出力結果が1,234,567になるけど
i%3の時に,を入れるって書いてありますよね?
いれたらかぶっちゃいませんか?
str[3]=4にして
num/=10
iが3だから
str[3]=','
4が消えてしまうんですが。流れが全然よめません。どなたか詳しく教え
てください。
467デフォルトの名無しさん:2009/08/28(金) 20:57:50
>>464
ありがとうございます!!
468デフォルトの名無しさん:2009/08/28(金) 21:20:42
>>466
j
469デフォルトの名無しさん:2009/08/28(金) 21:32:10
>>465
> char table[]="0123456789";

これ無駄だろ。
char *table="0123456789";
にしろよ。
470デフォルトの名無しさん:2009/08/28(金) 21:33:20
>>469
あんたも好きね
471デフォルトの名無しさん:2009/08/28(金) 21:35:42
>>469
IPAの基本情報の午後問題にtable[]って書いてあったんだけど(笑)
472デフォルトの名無しさん:2009/08/28(金) 21:38:00
>>471
中身を書き変えてるんだろ?
473デフォルトの名無しさん:2009/08/28(金) 21:40:15
俺ならこうだな。
str[j++]="0123456789"[num%10];
474デフォルトの名無しさん:2009/08/28(金) 21:41:02
インクリメントがちょいわからなん
do{
str[j++]=table[num%10];
num/=10;
i++;
if(i%3==0 && num!=0)
{
str[j++]=',';
}
}while(num!=0);

i++ってループをぬけたら+1だっけ?
それともi++をやった直後+1だっけ?
475デフォルトの名無しさん:2009/08/28(金) 21:51:47
ケン・トンプソンの埋め込んだバックドアってどんな方法で偽装してたの?
476デフォルトの名無しさん:2009/08/28(金) 21:51:56
なん……だと……!?
477デフォルトの名無しさん:2009/08/28(金) 22:07:15
>>474
行が処理された後
478デフォルトの名無しさん:2009/08/28(金) 23:11:39
>>477
s = i++ + i++;
479デフォルトの名無しさん:2009/08/28(金) 23:31:32
>>478
俺が透視能力を得た
480デフォルトの名無しさん:2009/08/29(土) 03:47:12
ブロック文について質問です。
ブロックを何重も使ってプログラムを書いた場合、1つのブロックの範囲がどこまでなのかがわかりません。
例えば下のようになっている場合、一番はじめの { が閉じられるのは4番目の } なのか、最後の } なのか、という感じの疑問です。

{ { { } { } } }

また、ブロック文について参考になるサイトがあったら教えてください。よろしくお願いします。
481デフォルトの名無しさん:2009/08/29(土) 04:19:27
インデントしろや。
それと、対応するカッコがすぐ見つけられるエディタ/開発環境使えよ。
482デフォルトの名無しさん:2009/08/29(土) 05:04:25
>>480
}はそれよりも前の一番近い{と対応する、というのが本来の考え方だけど、
一番内側の{}ペアが一つのブロックになると思えばいいよ。
そのブロックをさらに挟み込む形でブロックがあって、一番外までという感じ。
483デフォルトの名無しさん:2009/08/29(土) 05:37:47
>>481ー482
ありがとうございます。
{ が単純に次の } に対応してしまう訳ではなく、下位ブロックからきちんとセットで認識していくと分かって納得しました。
見やすいプログラムを書けるよう気をつけようと思います!
484デフォルトの名無しさん:2009/08/29(土) 05:38:13
算数の()と同じ考え方で、悩むようなことはないと思うんだが。
485デフォルトの名無しさん:2009/08/29(土) 07:18:56
>>480
これで悩む理由がわからん
直感で理解できるだろう
プログラム向いてなさそう
486デフォルトの名無しさん:2009/08/29(土) 07:44:27
>>485
例えば、 { { } という打ち間違いがあった場合にどういう判断がなされるのか(どういった手順でブロックを認識していくのか)という意味を含んだ質問だったのですが。

下手な質問でまさに知りたかったことを教えてくれた>>482さんと比べて、>>485さんは思考が安直ですね。
嫌味とか通じなさそうw
487デフォルトの名無しさん:2009/08/29(土) 07:47:36
>どういった手順でブロックを認識していくのか
こういう話がしたいんだったらCスレから離れて構文解析等のキーワードでぐぐるべきだな
488デフォルトの名無しさん:2009/08/29(土) 07:48:53
むしろ本読むなりコンパイルしてみるなりで解決できることなのに
燃料として機能するとは…
489デフォルトの名無しさん:2009/08/29(土) 07:53:14
{}が初見で理解できない低脳が嫌味とか、なんの冗談だよw
490デフォルトの名無しさん:2009/08/29(土) 08:03:53
ハイハイ、アルゴリズム体操だよ(^^)

文字列走査してー
開き括弧('(', '{', など)に出会ったらー、スタックに push push !
閉じ括弧(')', '}', など)に出会ったらー、スタックから pop pop ! して
対応するものと == 演算子で比較するお (^^
491デフォルトの名無しさん:2009/08/29(土) 08:15:42
{} だけでいいのなら、括弧が開いていることを示すフラグを用いるのもおk。

開きおっぱい括弧 { に出会ったらフラグ反転。
閉じおっぱい括弧 } に出会ったら、フラグの値が真(=括弧が開いている)なら
括弧終了ということで、またフラグ反転。
492デフォルトの名無しさん:2009/08/29(土) 08:18:46
あ、でも>>491だと括弧がネストした場合は無理だな。
やっぱり>>490でいこう。
493デフォルトの名無しさん:2009/08/29(土) 08:25:06
後付して言い訳してるけど、どう見てもブロックの範囲とは関係ないと思うが。
494デフォルトの名無しさん:2009/08/29(土) 08:39:33
この前の>>352と同じ人でしょ?
ケンカの売り方が似ている・・・
495デフォルトの名無しさん:2009/08/29(土) 09:16:51
>>486
コンパイラの立場にたって考えればすぐ分かる内容だな。
496デフォルトの名無しさん:2009/08/29(土) 09:47:42
>>486は偽者です。書き込んでません。
497デフォルトの名無しさん:2009/08/29(土) 09:59:59
最近頭のおかしいのがまた復活したからな。
成りすまされたくなかったらトリップつけたほうがいいかも。
498デフォルトの名無しさん:2009/08/29(土) 13:08:32
括弧はちゃんと両側用意されてるから良いんだけど、
引用符って片方しかないんだよね。
“ ” ‘ ’
が正しい筈なのに、後ろの一つずつしかない。
特に ' は引用符でない記号とも共用だしな。
499デフォルトの名無しさん:2009/08/29(土) 14:11:48
ネストしないなら記号一つで十分だし
500デフォルトの名無しさん:2009/08/29(土) 14:17:07
そりゃそうだ
501デフォルトの名無しさん:2009/08/29(土) 14:45:21
入門の質問であればあるほど荒れるなぁ
/* /* */ */
も置いておきますね
502デフォルトの名無しさん:2009/08/29(土) 15:05:05
lisp暦12年の俺の出番だな
503デフォルトの名無しさん:2009/08/29(土) 15:11:55
ワロタ w
504デフォルトの名無しさん:2009/08/29(土) 16:14:16
>>490
ありがとう
長年悩んでいた問題が氷解したw
505デフォルトの名無しさん:2009/08/29(土) 16:36:32
>>490
俺もそれやってみたら、股間にストレッチパワーが溜まってきた!
506デフォルトの名無しさん:2009/08/29(土) 17:18:11
C言語について質問があります。

フレーム(frame)という構造体へのポインタ配列を
メンバにもつブロック(block)という構造体を作りたいんですが。。。

blockはframe(mallocで動的に確保する)を任意の個数
持つとして、

struct block {
frame * buf[];
}

という構造体を宣言した場合、実行時に

buf[0] = (frame*)malloc(sizeof(frame));

といった書き方ができますか?

この場合、コンパイラはbuf配列の個数が
わからないような気がしますが。。。

507デフォルトの名無しさん:2009/08/29(土) 17:30:38
>>506
規格では保証されてないけど
struct block {
frame *buf[1];
};

としといてblockの領域を大目に取って置いてframeを
mallocで1を超えて確保する事はよくある

何回も言うけど規格で動作は保証されてないので
本当は鼻から悪魔

でもなぜかよく使われるテクニック
508デフォルトの名無しさん:2009/08/29(土) 17:43:30
>>507
ご教授、ありがとうございます。

構造体の内部で、

frame *buf[];

とした場合、

frame *buf[1];

とコンパイラは判断するということでしょうか?

509デフォルトの名無しさん:2009/08/29(土) 17:49:52
C99なら似たようなことは可能
struct frame {
int foo;
};

struct block {
unsigned size;
struct frame *buf[];
};

void *
malloc();

foo(bufs, nbufs)
int *bufs;
unsigned nbufs;
{
struct block *blk = 0;

blk = malloc(sizeof(struct block) + sizeof(struct frame *)*nbufs);
blk->size = nbufs;
for ( unsigned i = 0; i < nbufs; ++i ) {
blk->buf[i] = malloc(sizeof(struct frame)*(i+1));
}

return 0;
}
規格のセクションは、ガチ規格スレで聞いてくれたら答える
510デフォルトの名無しさん:2009/08/29(土) 18:08:47
>>509
ありがとうございます。

この場合、

struct block {
unsigned size;
struct frame **buf;
};

としないのは、

使用する側に、bufはポインタ配列であることを
明示するのが目的なのでしょうか?

度々の質問ですいません。
511デフォルトの名無しさん:2009/08/29(土) 18:26:45
>510
ただC99なら最後のメンバが配列の場合要素数を省略できることを示したかっただけ
ポインタ配列であることを明示しているわけではない
で、コンパイル通るように適当に作ったのでbufs使うの忘れていた

>510の場合はまた違う確保の方法になるだろ
一例としては
struct block *blk = malloc(sizeof(struct block) + sizeof(struct frame *)*nbufs);
blk->buf = (char *)blk + sizeof(struct block);
blk->buf[i] = malloc(sizeof(struct frame)*nelems);
もっと効率よく一度にメモリを確保してもよい
512デフォルトの名無しさん:2009/08/29(土) 18:28:19
>>508
違う
frame *buf[]; はコンパイルエラーになるから
frame *buf[1]; としている

このテクニックはメモリがシームレスに連続している事を前提として
いるから、規格は無視してとにかくこうしないと困るという場合に
用いられる事が多い
513デフォルトの名無しさん:2009/08/29(土) 19:13:25
以下のように初期値を入れる処理を書いたら上司に怒られました。
 long n = 0;

以下のように書くべきだといわれました。
 long n = 0L;

C言語の本を読めば分かるといって理由は教えてもらえませんでした。
サフィックスをつけないといけない理由が分かりません。
誰か教えてください。
514デフォルトの名無しさん:2009/08/29(土) 19:42:50
C99とか現場でも使われてないのに初心者に教えんなよ
515デフォルトの名無しさん:2009/08/29(土) 19:47:17
>>513
long 型だから

よほど古いコンパイラを使ってるのでない限り気にしないけど
516513:2009/08/29(土) 20:06:20
サフィックスをつけないと、どんな不具合が発生するのでしょうか。
517デフォルトの名無しさん:2009/08/29(土) 20:16:11
>>516
0なら特に困ることはないよ。

longがintより大きい環境で、intを超えた定数のときはLをつけないとエラーになるんだったかな?
もう忘れた。
518デフォルトの名無しさん:2009/08/29(土) 20:16:38
int → long の変換が実行時に行われる。かも
大抵のコンパイラならコンパイル時に何とかしてくれるはず
519デフォルトの名無しさん:2009/08/29(土) 20:19:57
intとlongのサイズが違う環境だと
↓こういうときもLをつけないとバグるかな?

printf("%ld %d", 10L, 20);

ただの代入だと、困るようなことはないと思う。
520513:2009/08/29(土) 20:35:55
皆さんありがとうございます。

もっと致命的なことが、起こるのかと思っていました。
私は経験もそんなにないのですが、先輩に指摘された
 long n = 0L;
のような初期化は現場で一般的にどこでも使われるのでしょうか?
521デフォルトの名無しさん:2009/08/29(土) 20:55:03
>>520
一般的ではないんじゃないの?

上司の言うとおり、Cの本を適当にいくつかみてみて、longの変数に
代入してる箇所で、Lがついているか確認してみたら?
522デフォルトの名無しさん:2009/08/29(土) 21:04:18
そんなにつけたくないならつけなきゃいいじゃん。
long val = 2000000000 + 2000000000;
とかしちゃえばいいよ
523デフォルトの名無しさん:2009/08/29(土) 22:36:29
過去に付けるべきところに付けなかったアホが居た職場だと、
そういうバカなルールが出来ることはままあるな。
524デフォルトの名無しさん:2009/08/29(土) 22:37:35
f の付け忘れは稀によくある話
525デフォルトの名無しさん:2009/08/29(土) 22:55:21
506です。
丁寧にありがとうございました。
526デフォルトの名無しさん:2009/08/30(日) 01:32:05
char型の配列の要素はひとつ1バイト、int型の配列の要素はひとつ4バイトで
要素番号0からメモリ領域が連続しているってので合ってますか?
527デフォルトの名無しさん:2009/08/30(日) 01:33:22
あってる
528デフォルトの名無しさん:2009/08/30(日) 01:35:30
>>527
どうもありがとうございます!
529デフォルトの名無しさん:2009/08/30(日) 01:58:17
sizeof(int)は環境依存で4とは限らない。
530デフォルトの名無しさん:2009/08/30(日) 02:00:09
今int=2バイトのプロセッサでC言語使う開発ってあるのかな?
int=2バイトだとそのままアセンブラで組みそうだけど
531デフォルトの名無しさん:2009/08/30(日) 02:03:40
逆に64ビットでint8バイトが主流になるかもよw
532デフォルトの名無しさん:2009/08/30(日) 02:05:28
longなら8バイトになった環境もあるが、intは4バイトのままだなぁ
533デフォルトの名無しさん:2009/08/30(日) 02:11:27
搭載メモリ16GBとかが普通になったらintも8バイトになるかもね
534デフォルトの名無しさん:2009/08/30(日) 02:13:58
>>533
そういえあ64bit windowsの場合アプリケーションが使える最大メモリはかわってるんだっけ?
32bit windowsは2GBが最大だっけ?
535デフォルトの名無しさん:2009/08/30(日) 02:14:32
intが8バイトだと、4バイトの整数使いたいときに困るなぁ。
shortを4バイトにしたら、今度は2バイトの整数使えなくなるし。
536デフォルトの名無しさん:2009/08/30(日) 02:15:00
534
1プロセスが最大2GBな
メモリ自体は3GBまで認識=32bit

64bitはどうなんだろう
果てしなく大きい事は確かだが
537デフォルトの名無しさん:2009/08/30(日) 02:16:17
>>535
だからLLP64にしたのかもな
538デフォルトの名無しさん:2009/08/30(日) 02:17:57
>>536
理論上は果てしなくだがPC業界ってなぜか中途半端なところを最大にしちゃうから幾度となく拡張する羽目になってるよねw
HDDとか言い例だし

まあ新しく変われば物が売れるからいいのかねw
539デフォルトの名無しさん:2009/08/30(日) 02:18:40
x86のレジスタのように素直に元の名前はそのままにしてくれるほうがいい
540デフォルトの名無しさん:2009/08/30(日) 02:19:19
>>535
まあその頃には
int32_tやint16_t型が、
独自拡張も含めて、「当然のように使える」という状態になってるよ。たぶん。
32bitをカバーできないなら、__int32 とかが使われて、ね。
541デフォルトの名無しさん:2009/08/30(日) 02:20:07
その変わりx86-64のアーキテクチャは目も当てられないほど
ひどい物になってしまったけどな

まあ幸いな事に命令コードに関してだけで、ハードウェア的には
まずまずの線を行っているのでまだよかった
542デフォルトの名無しさん:2009/08/30(日) 02:20:50
>>540
差し当たってtime()の返すtime_tはまず64bitにされる罠
543デフォルトの名無しさん:2009/08/30(日) 02:53:09
>>536
Windows x64 では、1ユーザープロセスは8TBまで。
2GBの400万倍。
544名無しさん@そうだ選挙に行こう:2009/08/30(日) 06:03:36
>>543
4000倍に見えるぞ
545名無しさん@そうだ選挙に行こう:2009/08/30(日) 07:50:11
>>538
例えばポインタとかデータサイズを256bit長にしたとして、それで解決すると思う?
現時点では処理が重くなってメモリも無駄に消費するだけだけど、いずれ足りなくなって拡張することになる。
「そんなバカな、256bitもあれば人類が滅亡するまで大丈夫だろ」って議論は過去に何度もなされてる。
歴史が繰り返した結果が今のぐちゃぐちゃの規格なわけだ。

これはある程度経験を積まないと理解できない話なんだけど、
一般的には、最初から保険をかけておくより、足りなくなってから拡張した方がコストは安く済むんだよ。
546名無しさん@そうだ選挙に行こう:2009/08/30(日) 08:28:37
世の中には可変アドレッシングといううわなにをするくぁwせdrftgyふjlp;@:「
547名無しさん@そうだ選挙に行こう:2009/08/30(日) 12:11:18
ちゃんとくぁせふじこってやれよ
548名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:32:07
if文を一行で書くことは推奨されますか。
if(...) { ... }
みたいな。
549名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:33:58
>>548
その方が読みやすいんなら別にいい。
550名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:36:36
一行で書くときはオッパイ括弧は省略するかな。

if (...) break;

みたいな。
551名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:39:26
逆を言うと、オッパイ括弧を付けるときは必ず複数行に書くようにしている。
552名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:40:27
pascalと同じ流儀だね
複文を書くときはbegin-endで囲み、単文の時は書かない
553名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:44:08
そして
if(...)
  処理;
  後から追加した処理;
とかやらかしてプギャーするんですね分かります。
554名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:45:12
それはない
やった事は一度も無い
555名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:47:38
>>533
うん、そういうのが嫌だから、基本的には

if (...) {
...
}

を使っている。ただ、ループを抜けるときの式(break文のみ)などのときは
>>550の方が好み。
556名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:02:13
昔はbreak, returnの時はif ( cond ) statement;だったけど
今はコードを統一するために
if ( cond ) {
 statements;
}
にしている、スタイルを統一することは重要
確信犯的に
for ( x; y; z )
for ( u; v; w ) {
 if ( c )
  s;
}
こんなの見てびっくり、マジ止めてほしいわ
557名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:05:12
>>556
インデントすりゃいいじゃん
558名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:06:55
インデントだけだと、>>553みたいなことやらかす可能性高いよな。
559名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:09:01
ない
あるとすればインデントを間違えた時だけ
560名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:13:57
自動インデント機能使えば、そういうミスはないけどな。
561名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:18:11
Visual Studioって
switch case 文を入れ子にすると
インデントめちゃくちゃになるよね。
562名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:18:57
>561 kwsk
563名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:19:57
↓ここらへんのソースを見るとふつーにifの波カッコを省略してる。
linux
git
postgresql
subversion
firefox
python
apache
vim
ruby
gimp
OpenOffic
jdkのライブラリのソース

机上の空論じゃなくて、実践でばりばりコードを書いてる人たちは、省略したってバグるとか思ってない。
564名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:21:07
前にもどこかで同じようなの見たなぁ
565名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:21:37
できる人だけを基準にしていいなら、そういうことも言ってられるんだけどね。
566名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:26:11
こういうのはできる、できないって関係ないでそ。

高度なコードを書いたりする人は、ケアレスミスもぜんぜんしないとかってわけじゃないだろうし。
567名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:26:25
自分の書いたコードが他人にメンテされるような環境の人じゃないんだろ。
趣味でやってる人かな。
568名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:28:01
>>563
これって、趣味レベルで、他人にメンテナンスされないプロダクツなんだ。
569名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:45:32
ぽまいらはC++ Coding Standardsとか読まないのか?^^
{ }をつけるかつけないかみたいな些細な話は
チームで統一すべきコーディング標準の中には含まれないって書かれてるじゃろ。
重要なことは自分自身の書くソースコードの中では「一貫性を保つこと」であって
他人のコードに強制するのは間違っている、とも。本嫁よ、夏休みなんだから^^
570名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:54:12
現場が本に書いてある通りに回るなら、誰も苦労なんてしないw
571名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:54:40
int array[10] = {1,2,3,4,5,6,7,8,9,10};

i = sizeof(array) / sizeof(array[0])

printf("%d\n",array[i]);

という感じにsizeof演算子で求めた要素数を変数に代入して、要素番号として使うことは無理なんでしょうか?

572名無しさん@そうだ選挙に行こう:2009/08/30(日) 14:55:50
>>571
要素数でアクセスすると配列の最後の要素を1超えた要素になるよ
アドレスを取る事は許されるが要素の参照は許されない
573名無しさん@そうだ選挙に行こう:2009/08/30(日) 15:01:47
>>553
俺は結構このミスやらかすな。注意力が足りないのかな・・・

if(...)|
  処理;

VC++のエディタだとif文の括弧の右側にカーソルがあるときにエンターを押すと、

if(...)
  |
  処理;

↑の場所にカーソルが来るんだよ
自分がミスをする人間なら>>555みたいに書けばいいと思う
574名無しさん@そうだ選挙に行こう:2009/08/30(日) 15:08:36
>>572

ありがとうございます。
では求めた要素数-1すればおkですか?

>アドレスを取る事は許されるが要素の参照は許されない
申し訳ないです、勉強はじめたばかりで理解できないので、
もう少し詳しく教えてもらえないでしょうか?
575名無しさん@そうだ選挙に行こう:2009/08/30(日) 15:10:46
>>574

int array[10] = {1,2,3,4,5,6,7,8,9,10};

i = sizeof(array) / sizeof(array[0])
printf("%d\n",array[i-1]);
printf("%p\n", &array[i]);

みたいな感じ
576名無しさん@そうだ選挙に行こう:2009/08/30(日) 15:12:02
配列のいんでくすは 0 から 要素数-1 だ。おけ?
要素数を超えた"アドレスそのもの"までは使うことはできるが、アドレスが指している"要素"を使うとアクセス違反になる。おけ?
577名無しさん@そうだ選挙に行こう:2009/08/30(日) 15:19:18
知らないなら今のうちに覚えておこう、「半開区間」。
件のケースなら[0.10)のように記述する。
0以上10未満。10を含まない。
10-0=10で、要素数10個と簡単に計算できる。
for ( int i = 0; i != 10; ++i )
が何回ループするかなど、簡単におまんこできる。
578名無しさん@そうだ選挙に行こう:2009/08/30(日) 15:23:33
>>575
>>576
>>577
printf("%d\n",array[i-1]); がエラーになっちゃうのは何故なんだ・・・。
皆様の教えてくれたことを理解する作業に入ります。ありがとうございました。
579名無しさん@そうだ選挙に行こう:2009/08/30(日) 15:26:12
>>578
そりゃ変数 i が定義されてないからでしょ
580名無しさん@そうだ選挙に行こう:2009/08/30(日) 15:31:32
>>579
セミコロン忘れてました。バカスw
ご指摘どうもありがとうございました!
581デフォルトの名無しさん:2009/08/31(月) 02:25:41
初心者におすすめの本を教えてください
582デフォルトの名無しさん:2009/08/31(月) 14:58:19
ローベル
583デフォルトの名無しさん:2009/08/31(月) 14:59:10
ロベールの翻訳は分かりやすい
584デフォルトの名無しさん:2009/08/31(月) 15:08:38
初歩のラジオ
585デフォルトの名無しさん:2009/08/31(月) 15:20:09
猫でもわかるは、ソース量多くて嫌になる
586デフォルトの名無しさん:2009/08/31(月) 16:44:09
すまん教えてくれ
新入社員からdelete[]pを使わなく良いかと質問があったんだが
現実的にdelete pで良いんだよな?
587デフォルトの名無しさん:2009/08/31(月) 16:50:28
C++スレ逝け

new[]で確保したらdelete[]pで解放しないと鼻から悪魔だぞ
588デフォルトの名無しさん:2009/08/31(月) 16:51:24
もしかしてC++でも使っているの
スレ違いだが簡単に答えると意味に違いがある
delete[] p;はp = new T[n];の時、delete p;はp = new T;の時
メモリの管理情報が異なるので使い分けなければならない
589デフォルトの名無しさん:2009/08/31(月) 16:51:33
デストラクタが呼ばれないだけで悪魔は出ないわ
590586:2009/08/31(月) 16:59:25
ごめんスレ違いだった
>>587->>589
ありがとう仕様として知っていたけど
return 0; return (0);程度の違いだと思っていた
591デフォルトの名無しさん:2009/08/31(月) 17:01:54
>>589
規格票読んでみ
592デフォルトの名無しさん:2009/08/31(月) 17:16:16
>>590
とりあえずEffective C++を読むといいよ
英語版はどっかの誰かがWebに載っけてたと思うし
593デフォルトの名無しさん:2009/08/31(月) 21:33:56
C言語であるパラメータの構造体のアドレスをゲットする関数について教えてください。

例えば
typdef struct AAAAA{
int a;
int b
}AAAAA_t;
のような構造体がある場合、

get(int param)
{
  ?????
}

を下記のようなmain関数から呼び出すと、paramに上記構造体のアドレスが返却されるという
ものを実装してますが
どうしてもうまくいきません。
宜しくお願いします。
int main(void)
{
get( ??? );
}

594デフォルトの名無しさん:2009/08/31(月) 21:37:19
>>593
ポインタで調べろ
595デフォルトの名無しさん:2009/08/31(月) 21:38:44
いろいろ調べたり、実装してみたのですが、なかなかうまくいきません、
ヒントだけでも構わないのでお願いします。
596デフォルトの名無しさん:2009/08/31(月) 21:39:03
>>593

void get(AAAA_t** param) {
*param = &どこかにあるAAAA_tの実体;
}

こういうこと?
文面からすると初心者っぽいけど、いまからこんな変なコードを書くのはお勧めしない。

597デフォルトの名無しさん:2009/08/31(月) 21:40:50
get()の引数はあくまでint型でポインタではないのです。
596さんのおっしゃるようなAPIだとうまく実装できるのですが・・・
598デフォルトの名無しさん:2009/08/31(月) 21:44:14
>>597
ポインタ使わないとどうやってもmain()に値を返すことは不可能だよ。
599デフォルトの名無しさん:2009/08/31(月) 21:48:37
多分get()の引数は
int main(void)
{
AAAAA_t a;
get((int)&a);
]
となるような気が。。
600デフォルトの名無しさん:2009/08/31(月) 21:53:46
AAAA_t* a;
get((int)&a);

void get(int param) {
*(AAAA_T**)param = &実体;
}

で、できるね。一般的な64bit環境では動かないだろうけど。
601デフォルトの名無しさん:2009/08/31(月) 21:58:45
<<600
ありがとうございます。
試してみます!

>一般的な64bit環境では動かない
よくわからないので簡単におしえてください。
Linuxでも動かないですか?
602デフォルトの名無しさん:2009/08/31(月) 22:01:17
一般的な64ビットの環境だとポインタ型は8バイト、int型は4バイトってことでは
603デフォルトの名無しさん:2009/08/31(月) 22:01:46
試してから言え
604デフォルトの名無しさん:2009/08/31(月) 22:18:25
なんで
get(int param)
{
  ?????
}
の形式じゃないといけないのかがまったくわからない。
なにか根本的な勘違いをしてる気がする。
605デフォルトの名無しさん:2009/08/31(月) 22:25:42
もっと高水準の言語を使っていて
その機能をCで実装したいとかなのかなあ
自分も以前、配列を渡して要素数を返す関数を書こうとしてはまったことがある
606デフォルトの名無しさん:2009/08/31(月) 22:52:21
>>593
アドレスだろうが何だろうが
param で返すのはダメだろw
ひどすぎる……
607デフォルトの名無しさん:2009/08/31(月) 23:05:53
/* code を改良せよ */
if ( !(c == 'y' || c == 'y') )
  return;

length = (length < BUFSIZE) ? length : BUFSIZE;

flag = flag ? 1 : 0;

quote = (*line == '"') ? 1 : 0;

if (val & 1)
  bit = 1;
 else
  bit = 0;
と 云う様な物なのですが 着目点が掴めないので助言をして頂けないでしょうか…
608デフォルトの名無しさん:2009/08/31(月) 23:10:29
普通に&aでいいと思うのだが…何がしたいのだろう???
609デフォルトの名無しさん:2009/08/31(月) 23:12:07
>>607
可読性
610デフォルトの名無しさん:2009/08/31(月) 23:13:18
>>607
その問題の模範解答が改良かどうか疑問なので
分かったら教えて欲しい

下は改良というより書き換えただけ
改悪と言えなくも無い

'y' は両方小文字であってるのか?
if(toupper(c)!='Y') return;

if(length>BUFSIZE) length=BUFSIZE;

flag=!!flag;

quote=(*line=='"');

bit=val&1;
611デフォルトの名無しさん:2009/08/31(月) 23:17:54
先越されてしまった。

flagについては、
if(flag) flag = 1;
の方が代入が一つ減る可能性あるかな。
612デフォルトの名無しさん:2009/08/31(月) 23:22:02
>>610
小文字では在りませんでした…
if ( !(c == 'y' || c == 'Y') )
  return;
こうです
613デフォルトの名無しさん:2009/08/31(月) 23:37:55
>>612 plus
打ち込み miss です
取り敢えず レスして頂いた source を比較して着目点を考える事にします…
上がって居る時に またお願いします
614デフォルトの名無しさん:2009/09/01(火) 00:38:05
>>613 plus
もう一つ打ち込み miss が在りました…
flag = flag ? 0 : 1;
こうでした…
615デフォルトの名無しさん:2009/09/01(火) 01:11:55
レスしようと思ったら>>610と全く一緒だったでござる
616デフォルトの名無しさん:2009/09/01(火) 01:16:14
>>615
もう一つ在りますが…
617デフォルトの名無しさん:2009/09/01(火) 01:27:40
ちょっとスレの意図とずれるかもしれないですが
日経ソフトウェアのMissionCのようなC言語学習ソフトがあったら教えてください
618デフォルトの名無しさん:2009/09/01(火) 01:31:37
/* 次の部分の問題点は何か */
int read(int *ip) {
  scanf("%d", ip);
  return *ip;
}
insert(&graph[vert], read(&val), read(&ch));
個人的に source に問題点が無い様に思えて仕方在りません
着目点も分からないのです… 今度の source は打ち込み miss は無いです
二度 確認しました…
619デフォルトの名無しさん:2009/09/01(火) 01:51:56
>>614
flagに1と0しか入らないことが確実なら
flag = 1 - flag;
とでも書かせたいのかね。
620デフォルトの名無しさん:2009/09/01(火) 01:52:52
flag ^= 1; の方がいいかも
621デフォルトの名無しさん:2009/09/01(火) 02:31:37
flag = !flag;
だとおもうんだけど
622デフォルトの名無しさん:2009/09/01(火) 02:32:41
>>618
2個あるread呼び出しのうち、どちらが先に呼ばれるかが分からないのが問題
623デフォルトの名無しさん:2009/09/01(火) 02:46:18
>>621
そう思うんならそれでいいんじゃね?
実行速度とか気にするほどのもんでもないしな。
624デフォルトの名無しさん:2009/09/01(火) 02:52:49
>621
それは改良じゃなくて、改悪w
625デフォルトの名無しさん:2009/09/01(火) 02:59:57
>>619-620はflagに1と0しかはいらないという勝手な思いこみの上でしか動かんでしょ?
626デフォルトの名無しさん:2009/09/01(火) 03:02:55
flagという変数名とflag = flag ? 0 : 1;この文を見て、
それ以外の可能性を考えるほうが不自然だと思うが。

そもそもflag = flag ? 0 : 1;より劣るflag = !flag に改悪しちゃいかんよなw
627デフォルトの名無しさん:2009/09/01(火) 03:04:05
何が劣るの?
628デフォルトの名無しさん:2009/09/01(火) 03:12:11
なんか言い方がアレだったかもしれないのでこれ置いときますね

flag = flag ? 0 : 1;
00411A25 xor eax,eax
00411A27 cmp dword ptr [flag],0
00411A2B sete al
00411A2E mov dword ptr [flag],eax

flag = 1 - flag;
00411A31 mov eax,1
00411A36 sub eax,dword ptr [flag]
00411A39 mov dword ptr [flag],eax

flag ^= flag;
00411A3C mov eax,dword ptr [flag]
00411A3F xor eax,dword ptr [flag]
00411A42 mov dword ptr [flag],eax

flag = !flag;
00411A45 xor eax,eax
00411A47 cmp dword ptr [flag],0
00411A4B sete al
00411A4E mov dword ptr [flag],eax
629デフォルトの名無しさん:2009/09/01(火) 03:15:09
flag = 1 - flag;
これが消費クロックは少なそうだな

あーでもあれか参照と書き込み両方あってもキャッシュに持ってくるからそれほど差はねーか
630デフォルトの名無しさん:2009/09/01(火) 03:23:49
大して有利に見えないflag = 1 - flag;はそのままにして、
flag ^= 1; は flag ^= flag に書き換えるとか、せこくない?w
631デフォルトの名無しさん:2009/09/01(火) 03:26:14
あ、これは失礼。

flag ^= 1;
00411A3C mov eax,dword ptr [flag]
00411A3F xor eax,1
00411A42 mov dword ptr [flag],eax

いずれにしても
flag = 1 - flag;
flag ^= 1;
は元のコードと挙動が異なる事には変わりないですね。
632デフォルトの名無しさん:2009/09/01(火) 03:27:59
/* code を改良せよ */ 
if (toupper(c) == 'Y') return;

length = (length < BUFSIZE) ? length : BUFSIZE;

flag = !!flag;

quote = (*line == '"') ? 1 : 0;

bit = val & 1;

可読性落ちるだけだな
633デフォルトの名無しさん:2009/09/01(火) 03:31:25
可読性をあげるための課題であったとすれば
if (flag != 0) {
  flag = 1;
} else {
  flag = 0;
}
とすべきだったのかもね。

if (flag == 1) {
  flag = 1;
} else {
  flag = 0;
}
とするのが愚であることは分かると思うけど。
634デフォルトの名無しさん:2009/09/01(火) 03:31:58
可読性が落ちるのに、実行速度は変化ないんじゃ改悪といわれてもしかたないような。
635デフォルトの名無しさん:2009/09/01(火) 03:33:22
バグを入れるよりはマシじゃね?
636デフォルトの名無しさん:2009/09/01(火) 03:34:56
フラグ立てる処理なんてゲームにしたって1フレーム単位でみても何万回もやるようなことじゃなければ
可読性重視でいいよw
637デフォルトの名無しさん:2009/09/01(火) 03:35:44
っていうか、フラグの単純なonoffを620以外の方法で書いてるやついんの?
638デフォルトの名無しさん:2009/09/01(火) 03:36:21
ビットフラグなら>>620で書くだろうね
639デフォルトの名無しさん:2009/09/01(火) 03:38:38
>>633
>>614
まぁ、いいたいことは分かる。
640デフォルトの名無しさん:2009/09/01(火) 03:44:33
>>625
勝手な思い込って言えるほど、この場合のflagの初期値に0と1が入らないと思うなら、
いったいどんな数字がflagの初期値だと思うの?
641デフォルトの名無しさん:2009/09/01(火) 03:48:31
書かれていない以上、他の値を考慮するのは当たり前じゃない?

ミスタイプではあったが、最初に書かれたコードは
flag = flag ? 1 : 0;
であり、flagに1か0しか入らないのであれば、このコードを削除することがいちばんの改良法なわけだし。
642デフォルトの名無しさん:2009/09/01(火) 03:55:16
それぞれのステートメントに使われている変数に関連性がないから
アルゴリズムの改良も出来ないし,外部化することも出来ない

となると可読性くらいしか残らないんだけど,所望の動作が分からないのでコメントでも加えればいいんでね?
643デフォルトの名無しさん:2009/09/01(火) 03:58:07
他の値を考慮するか、出題が問題として成立しうる状況を考慮するかの違いだな。
些細な間違いをいつまでもグダグダいって、建設的な代案を出せないどころか
それにケチつけるだけかw
644デフォルトの名無しさん:2009/09/01(火) 04:23:20
夜なんだからしかたがない
645デフォルトの名無しさん:2009/09/01(火) 06:46:12
>>618
2回read関数の入力があるけど最初の入力がvalかchかが環境依存
646デフォルトの名無しさん:2009/09/01(火) 07:56:36
なんだこの流れw
647デフォルトの名無しさん:2009/09/01(火) 13:50:22
>>621の何が悪いのか分からない素人の俺に優しく教えてくれ
648デフォルトの名無しさん:2009/09/01(火) 13:53:10
flag = flag ? 0 : 1;に比べて可読性が落ちるって言いたいみたい。
速度的には変化はないみたいだし、「改良」とは言えないってことじゃね。
649デフォルトの名無しさん:2009/09/01(火) 15:43:58
挙動を変えちゃった方が息巻いててワロタよ
650デフォルトの名無しさん:2009/09/01(火) 15:47:55
一応
>flagに1と0しか入らないことが確実なら
って書いてるのに、しつこく絡むほうもどうかと思うがなw
651デフォルトの名無しさん:2009/09/01(火) 15:49:00
>>646
いつものことですw
652デフォルトの名無しさん:2009/09/01(火) 15:50:08
アセンブラ素人だが、クロックについては全部3クロックでいいの?
653デフォルトの名無しさん:2009/09/01(火) 15:52:26
>>652
今のx86はわからねえw
flagが置かれてるメモリは参照書き込みあるけどキャッシュに持ってきてるから
誤差のようなレベルだけどな

むしろflagの置き場所で効率が変わるかもしれない
654デフォルトの名無しさん:2009/09/01(火) 15:54:15
flagがeaxに置かれればflag ^= 1が1ステップになるくらいか
655653:2009/09/01(火) 15:57:50
まあflagというくらいだから時々見る箇所と反転したりと状態を書き換えるところが
離れてるからレジスタに乗ってるってことは少ないと思うので

そういえばデータ領域ってキャッシュ転送する場合は一定サイズのブロックで行われるんだっけ?
656デフォルトの名無しさん:2009/09/01(火) 16:06:23
比較が入ってない方が早いのは確定だろ。
657デフォルトの名無しさん:2009/09/01(火) 16:12:26
>>656
いやいやw
今のプロセッサで今回のような微たるクロックの削減を考えるのは無意味だってw
flagの参照更新箇所がものすごい回数あるならあれだけどさ
658デフォルトの名無しさん:2009/09/01(火) 16:18:01
>>656
なんの根拠が??
659デフォルトの名無しさん:2009/09/01(火) 16:18:20
この程度から慣らしとかないと、いざ削減が必要になったときに
どうしたらいいかわからなくなりそうだが。
660デフォルトの名無しさん:2009/09/01(火) 16:20:09
いまどき削減が必要って、PCIか?
661デフォルトの名無しさん:2009/09/01(火) 16:21:53
>>659
どうだろ
今のプロセッサの場合はキャッシュの効率の方が重要だったりするしね
その昔のおじさんたちはゲームを作るのに三角関数などの計算をあらかじめ行って
テーブル化しておいたけど今のプロセッサは下手すると計算した方がいい場合がほとんどだしねえ
それだけメモリとCPUの速度差が無視できないレベルになってる


662デフォルトの名無しさん:2009/09/01(火) 16:38:15
>>659
どこが重いかをプロファイルして実測比較していくんだろうね
663デフォルトの名無しさん:2009/09/01(火) 17:44:38
>>658
コンペアが重いのは今でも変わってないだろ。
664デフォルトの名無しさん:2009/09/01(火) 18:04:25
>>663
メモリアクセスよりはよっぽど速い。つーか、処理速度を語りたいなら他所に行ってくれ。
665デフォルトの名無しさん:2009/09/01(火) 19:09:47
そもそも今のPC用プロセッサでの話かどうかも分かんないし。
細かいこと気にするくらいだから、もっと遅いプロセッサ使ってる可能性もある。
666デフォルトの名無しさん:2009/09/01(火) 22:15:03
文字列と文字の間にに0x00を入れたいんですがどうすればいいんですか?
終了コードとしてあつかわれちゃうのです
667デフォルトの名無しさん:2009/09/01(火) 22:20:57
>>666
何のために?
行間を空けたいのならスペースの文字コード入れるとか
668デフォルトの名無しさん:2009/09/01(火) 22:23:28
>>666
文字列として扱わないようにすればいいよ
669デフォルトの名無しさん:2009/09/01(火) 22:26:50
>>666
文字列を終端の\0に頼らず自分で長さ管理する
670デフォルトの名無しさん:2009/09/01(火) 23:12:32
char s[] = "文字列" "に0x00" "文字";
671デフォルトの名無しさん:2009/09/01(火) 23:16:40
ひねくれ
672デフォルトの名無しさん:2009/09/01(火) 23:24:47
>>666
C++なら文字列クラスがあるのに。
それに相当するのってc言語にもあるっけ?
673デフォルトの名無しさん:2009/09/01(火) 23:50:45
>>672
自力でなんとかするしかない。
674デフォルトの名無しさん:2009/09/01(火) 23:52:35
>>673
俺の開発環境がC++で本当に良かったと痛感するわ。
675デフォルトの名無しさん:2009/09/02(水) 00:12:13
そもそも '\0' を終端コードとしたデータ構造が文字列だろ。
そのルール破るならそれは単なるバイト列だよ。
676デフォルトの名無しさん:2009/09/02(水) 00:30:30
"\0\0"が終端な奴はたまにあるけど、文字列かと問われると唸ってしまう
677デフォルトの名無しさん:2009/09/02(水) 00:40:52
>>666
おまえみたいに掟破りなことをするのがいるからC#が誕生するんだよ
678デフォルトの名無しさん:2009/09/02(水) 01:59:18
C♯だろボケ
679デフォルトの名無しさん:2009/09/02(水) 04:27:36
どっちでもいいだろボケ
680デフォルトの名無しさん:2009/09/02(水) 05:10:21
static inlineが有るとはいえcで文字列処理を独自に用意すると
文字コード其々にライブラリ化せないかんのがにんともかんとも
681デフォルトの名無しさん:2009/09/02(水) 05:23:44
^といった累乗記号に相当するC言語での演算子はありますか?
元利計算に使いたいのですが、ググっても分からず困っています。
682681:2009/09/02(水) 05:27:05
すみません自己解決しました。
重ねて質問なのですが、累乗する際に有効な計算式や関数があったら教えてください。
683デフォルトの名無しさん:2009/09/02(水) 05:43:04
pow
684デフォルトの名無しさん:2009/09/02(水) 05:45:05
>>683
有用な関数を教えてくださり、どうもありがとうございました。
685デフォルトの名無しさん:2009/09/02(水) 06:01:25
元金、利率、期間(年単位)を入力して元利合計の計算を行うプログラムを作っているのですが
うまく作動しません。改善点を教えていただけると助かります。

#include<stdio.h>
#include<math.h>

int main(void)
{
int period;
double rate,rating,sum,money;

printf("元金の入力:");
scanf("%d",&money);
printf("利率(年利)の入力:");
scanf("%lf",&rate);
printf("期間の入力:");
scanf("%d",&period);

rating = pow((1 +rate),period);
sum = money * rating;

printf("元利合計は%dです\n",(int)sum);

return 0;

}
686685:2009/09/02(水) 07:31:57
何度もすみません。
>>685のプログラムについてなんですが、計算の途中経過を逐一チェックしようと
プログラムの間にprintf関数をはさんでみた所、全ての数値は正しく計算されており、
最後の変数sumでも正しい結果が得られました。

printf関数の挿入以外は上記のプログラムと全く同じで、計算方法は全く同じなのに
どうしてこのような結果になるのか全く分からず困っています。
アドバイスよろしくお願いします。
687デフォルトの名無しさん:2009/09/02(水) 07:47:23
moneyの型とscanf関数の指定子が一致してないよ。
688デフォルトの名無しさん:2009/09/02(水) 07:49:34
printf("元利合計は%dです\n",(int)sum);



printf("元利合計は%fです\n",sum);
689デフォルトの名無しさん:2009/09/02(水) 07:53:30
コンパイラによって速度に影響出たりするの?
あと一番よく使われるコンパイラ教えて
690デフォルトの名無しさん:2009/09/02(水) 07:57:10
>>687
>>688
こんな朝早くに回答してくれて本当に感謝です。
どこもいじっていないと書きましたが、成功したプログラムでは指定子が一致していました。
printf関数挿入の際に無意識で直していたようです…。
基本的な所からきちんと見直していかなければいけませんね。
どうもありがとうございました!
691デフォルトの名無しさん:2009/09/02(水) 09:37:59
今すごい無意識をみた
692デフォルトの名無しさん:2009/09/02(水) 09:46:07
内なる小人さんが活動したんだろう
693デフォルトの名無しさん:2009/09/02(水) 14:17:20
疲れてると時々あるよね

いたずらする小人さんの方が多いけどw
694デフォルトの名無しさん:2009/09/02(水) 16:06:18
>>689
gcc
695デフォルトの名無しさん:2009/09/02(水) 16:25:05
>>689
お金があったら欲しいやつ
使われてるかどうかはしらね
http://sourceforge.jp/magazine/09/02/18/1117225
696デフォルトの名無しさん:2009/09/02(水) 18:28:45
テキストファイルヲ開いて行数ごとに配列に代入するにはどうしたらいいの?
697デフォルトの名無しさん:2009/09/02(水) 19:06:39
一行取得するような処理があるので、テキストファイルの先頭から最後まで取得して代入する
698デフォルトの名無しさん:2009/09/04(金) 07:12:07
scanf関数から入力された数値の上2桁(2009なら20)と下2桁(2009なら09)を
それぞれ違う変数に代入したいのですが、良い方法はありますか?
699デフォルトの名無しさん:2009/09/04(金) 07:16:00
/100 %100
700デフォルトの名無しさん:2009/09/04(金) 07:28:14
>>698
欲しいのは数値化文字列か、先ずそこをはっきりしろ。
701デフォルトの名無しさん:2009/09/04(金) 07:40:05
>>699
助かりました。どうもありがとうございます。

>>700
計算に使用したいので欲しいのは数値です。
>>699さんの方法でやってみようと思います、どうもありがとうございました。


702デフォルトの名無しさん:2009/09/04(金) 12:01:34
ツェラーの公式の結果を求める下記のプログラムを作ったのですが、
2000年2月1日の結果を求めたところ2という結果が返ってきました。

wikiなどを見たところ2は月曜日に当たるように思うのですが、
カレンダーを確認すると2000年2月は火曜から始まっています。

C言語に直しているサイトを参照してみたのですが、自分では間違いがわからず困っています。
間違っている所がありましたら教えてください。よろしくお願いします。

if((month == 1) || (month == 2)){
year--;
month += 12;
}

day = (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + 1) % 7;
/*ツェラーの公式*/
printf("ツェラーの公式の結果%d\n",day);

※yearとmonthはscanfから入力された数値を用い、日にちは1で固定しています。
703デフォルトの名無しさん:2009/09/04(金) 12:50:18
Wikiとは式が違うんじゃないの?
そのサイトに、0ならば日曜日とか書いてない?
704デフォルトの名無しさん:2009/09/04(金) 12:52:08
2が火曜日であってるな
705デフォルトの名無しさん:2009/09/04(金) 12:53:04
Wikiってゆーなクズ。
706デフォルトの名無しさん:2009/09/04(金) 13:12:55
wikiとwikipediaの区別が付かないヤツは…(ry
707デフォルトの名無しさん:2009/09/04(金) 13:30:36
いちいちめくじら立てんな
708デフォルトの名無しさん:2009/09/04(金) 14:25:23
その杜撰さがバグを招くのだよ。殊にCに於いては。
709デフォルトの名無しさん:2009/09/04(金) 14:28:50
>>707
> いちいちめくじら立てんな
無能なヤツの言い訳w
710デフォルトの名無しさん:2009/09/04(金) 15:06:59
言った本人でもない俺が言い訳?
馬鹿だねぇ
711デフォルトの名無しさん:2009/09/04(金) 15:11:02
ウィキペならぎりぎり許す
712デフォルトの名無しさん:2009/09/04(金) 15:13:42
>>710
ねぇねぇ、無能って
どんな気持ち?
        ∩___∩                     ∩___∩
    ♪   | ノ ⌒  ⌒ヽハッ    __ _,, -ー ,,    ハッ   / ⌒  ⌒ 丶|
        /  (●)  (●)  ハッ   (/   "つ`..,:  ハッ (●)  (●) 丶     今、どんな気持ち?
       |     ( _●_) ミ    :/       :::::i:.   ミ (_●_ )    |        ねぇ、どんな気持ち?
 ___ 彡     |∪| ミ    :i        ─::!,,    ミ、 |∪|    、彡____
 ヽ___       ヽノ、`\     ヽ.....:::::::::  ::::ij(_::●   / ヽノ     ___/
       /       /ヽ <   r "     .r ミノ~.    〉 /\    丶
      /      /    ̄   :|::|    ::::| :::i ゚。     ̄♪   \    丶
     /     /    ♪    :|::|    ::::| :::|:            \   丶
     (_ ⌒丶...        :` |    ::::| :::|_:           /⌒_)
      | /ヽ }.          :.,'    ::(  :::}            } ヘ /
        し  )).         ::i      `.-‐"             J´((
          ソ  トントン                             ソ  トントン
713デフォルトの名無しさん:2009/09/04(金) 15:40:36
>>712
ねぇねぇ、無能って
どんな気持ち?
        ∩___∩                     ∩___∩
    ♪   | ノ ⌒  ⌒ヽハッ    __ _,, -ー ,,    ハッ   / ⌒  ⌒ 丶|
        /  (●)  (●)  ハッ   (/   "つ`..,:  ハッ (●)  (●) 丶     今、どんな気持ち?
       |     ( _●_) ミ    :/       :::::i:.   ミ (_●_ )    |        ねぇ、どんな気持ち?
 ___ 彡     |∪| ミ    :i        ─::!,,    ミ、 |∪|    、彡____
 ヽ___       ヽノ、`\     ヽ.....:::::::::  ::::ij(_::●   / ヽノ     ___/
       /       /ヽ <   r "     .r ミノ~.    〉 /\    丶
      /      /    ̄   :|::|    ::::| :::i ゚。     ̄♪   \    丶
     /     /    ♪    :|::|    ::::| :::|:            \   丶
     (_ ⌒丶...        :` |    ::::| :::|_:           /⌒_)
      | /ヽ }.          :.,'    ::(  :::}            } ヘ /
        し  )).         ::i      `.-‐"             J´((
          ソ  トントン                             ソ  トントン
714デフォルトの名無しさん:2009/09/04(金) 15:54:27
>>712
m9(^Д^)プギャーーーッ
715デフォルトの名無しさん:2009/09/04(金) 16:34:18
ウィキペディアには信頼性がないという信念にもとづき、wikiと略す。
でたらめ多いしね。
716デフォルトの名無しさん:2009/09/04(金) 16:43:59
>>715
って言うやつ自身よりはWikipediaの方がマシなのであった。
717デフォルトの名無しさん:2009/09/04(金) 16:54:00
C#も略せばCじゃんwwww
でC#厨に居座られたくないからな
WikipediaがゴミだったとしてもWikiと略すのはいやだな
718デフォルトの名無しさん:2009/09/04(金) 17:08:35
というか略すと別の物と一緒になる場合は
その略は不適当だろ?

例:USBメモリ->USB

とか。

カルボナーラスパゲッティ

カルボナーラ
も違うとか聞いたがな。忘れたけど。
719デフォルトの名無しさん:2009/09/04(金) 17:11:52
うんそうだね
720デフォルトの名無しさん:2009/09/04(金) 17:14:43
実はここのスレタイの「C言語」は「C#言語」の略
お前ら今からはC#の話だけをしろよ
721デフォルトの名無しさん:2009/09/04(金) 17:16:10
専用ブラウザをセンブラ、グラフィックボードをグラボ、ファミコンをピコピコ、電子レンジをチン…

このように、現代の若者は単語を略すのが好きです。
略して、ゲワタリャです。
722デフォルトの名無しさん:2009/09/04(金) 17:18:01
C#言語ってw
723デフォルトの名無しさん:2009/09/04(金) 17:21:50
C#もC言語です
724デフォルトの名無しさん:2009/09/04(金) 18:42:02
C OBOL言語の略か
725デフォルトの名無しさん:2009/09/04(金) 19:51:05
Cを半音あげたからC#じゃねえの。CにOOPを++したのがC++で。
だからC#の#は省略できない。
東中野を中野というのようなもの。
726デフォルトの名無しさん:2009/09/04(金) 20:09:53
PAS C AL
S c heme
S c ala
C ASL
BASI C

みんなC言語
727デフォルトの名無しさん:2009/09/04(金) 20:19:47
>>725
ほんとにOOPを追加しただけなのでしょーか?
728デフォルトの名無しさん:2009/09/04(金) 20:24:29
>>727
「だけ」ではないだろう。
ただしメインはoopということで。
729デフォルトの名無しさん:2009/09/04(金) 21:17:35
>>728
なんでも++しているような気がしてならないのですがきのせいですかそうですかっ
730デフォルトの名無しさん:2009/09/04(金) 21:32:39
テンプレートとか例外処理とか演算子のオーバーロードとかそういうこと?

C++は最初は「C with Classes」という名称で、それに上のようなものが
後になって追加された。
731デフォルトの名無しさん:2009/09/04(金) 21:53:17
C++ ++ → C♯
って聞いたけど...
732デフォルトの名無しさん:2009/09/04(金) 22:06:15
Cというかdelphi風なんだよな。C#は。
開発者が同じというのもあるんだろうけど。
733デフォルトの名無しさん:2009/09/04(金) 22:40:08
>>731
何を言ってるんだと思ったけどやっと理解した

なんと安易なw
734デフォルトの名無しさん:2009/09/04(金) 22:46:29
>>732
いや、Javaだろ。
735デフォルトの名無しさん:2009/09/04(金) 23:31:59
Javaほどマヌケじゃないよ^^
736デフォルトの名無しさん:2009/09/04(金) 23:34:55
でもdelphiじゃねーよな。
737デフォルトの名無しさん:2009/09/05(土) 02:49:26
>>703-736
スレ違い
738デフォルトの名無しさん:2009/09/05(土) 07:55:30
Pascalなめんな
739デフォルトの名無しさん:2009/09/05(土) 17:08:55
麻雀の配牌をランダムに生成し、
ソートして並べる、というプログラムが欲しいのですが
どなたか御教授願えないでしょうか??
よろしくお願いします
740デフォルトの名無しさん:2009/09/05(土) 17:15:47
順番がおかしい
741デフォルトの名無しさん:2009/09/05(土) 17:16:04
>>739
> 麻雀の配牌をランダムに生成し、
ここは乱数で行う。

> ソートして並べる
これはもう容易だろ。

具体的には麻雀の牌136枚にそれぞれ
0〜135の通し番号を付けるのがいいかもね。
742デフォルトの名無しさん:2009/09/05(土) 17:17:49
>>739
まさかと思うけどソートは出来るよね?
知らないなら遅いけど簡単な

C言語講座:バブルソート
ttp://www1.cts.ne.jp/~clab/hsample/Sort/Sort1.html

この辺をご覧ください。
743デフォルトの名無しさん:2009/09/05(土) 17:21:21
ライブラリにソーと関数あるんだからそれ使えよ^^
744742:2009/09/05(土) 17:22:48
>>743
まあそうなんだけどね。
車輪の再発明はするべきではないが、
ソートを知らない初心者の場合は
その限りではないと思ってさ。

うん、まあいいや。
745デフォルトの名無しさん:2009/09/05(土) 17:26:00
>>739 教えて欲しいというなら何が分からないのか言うべき
単に答えだけが欲しいんだろ?素直になれよ
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct tag_mj_tile_t{
int id;
}mj_tile_t;
char *get_symbol(char *dest, int id){
sprintf(dest, "%.2s", &("1m2m3m4m5m6m7m8m9m1p2p3p4p5p6p7p8p9p1s2s3s4s5s6s7s8s9s東南西北白發中"[(id/4)*2]));
return dest;
}
void swap_tile(mj_tile_t *a, mj_tile_t *b){
mj_tile_t t;
t=*a; *a=*b; *b=t;
}
int compare_tile(const mj_tile_t *a, const mj_tile_t *b){
if(a->id<b->id) return -1;
return (a->id>b->id);
}
int main(void){
int i;
mj_tile_t tile[136], haipai[14];
char symbol[10];
srand(time(NULL));
for(i=0;i<136;i++) tile[i].id=i;
for(i=0;i<136;i++) swap_tile(&tile[i], &tile[rand()%(i+1)]);
for(i=0;i<14;i++) haipai[i]=tile[i];
qsort(haipai, 14, sizeof(mj_tile_t), (int (*)(const void*, const void*))compare_tile);
for(i=0;i<14;i++) printf(" %s", get_symbol(symbol, haipai[i].id));
return 0;
}
746デフォルトの名無しさん:2009/09/05(土) 17:31:32
>>745
何でそんなにやさしいんだ。
747デフォルトの名無しさん:2009/09/05(土) 17:32:27
ttp://codepad.org/n45LsLpi
彼のソースを実行するとこうなった。
748デフォルトの名無しさん:2009/09/05(土) 17:41:34
何かおかしいか?
749747:2009/09/05(土) 18:25:58
>>748
ああごめん、全然おかしくない。
むしろすごいと思う。
750デフォルトの名無しさん:2009/09/05(土) 18:51:07
こっちこそ邪推してすまん。
751デフォルトの名無しさん:2009/09/05(土) 21:36:28
最終的にソートするんなら、ランダムで生成するは必要ないと思うんだが。
752デフォルトの名無しさん:2009/09/05(土) 21:42:38
>>751
とりあえずもう一度落ち着いて考えてよう。
753デフォルトの名無しさん:2009/09/06(日) 00:22:06
>>751
なら君の手牌は毎回同じでいいのかね?
754デフォルトの名無しさん:2009/09/06(日) 00:24:11
毎回四暗刻っていうか、天和になるならありがたいことです。
755デフォルトの名無しさん:2009/09/06(日) 00:25:07
三カンツだったすまん
756デフォルトの名無しさん:2009/09/06(日) 00:27:04
むしろ山の中が固定なら壮絶な牌取り鳴き合戦が毎回
757デフォルトの名無しさん:2009/09/06(日) 00:59:13
配牌が128枚ある麻雀について語るスレはここですか?
758デフォルトの名無しさん:2009/09/06(日) 01:04:28
違いますのでお引き取りください。
759デフォルトの名無しさん:2009/09/06(日) 02:31:32
名前付きパイプの具体的な使い方がわからない!
誰か教えてくだしあ><
760デフォルトの名無しさん:2009/09/06(日) 02:52:55
DrawLineという線を引く関数を利用して直径1mの円を書くプログラムを作りたいと思ってるんですが、
うまく作れません。どなたか作成、または作成の仕方のアドバイスをしてもらえませんか?

DrawLine (0,0,1,1)
このように初めに始点の座標、次に終点の座標xyを指定して線を引くプログラムです。

DrawLine (0,0,cos(e), 1)
現在このようにして0,0を中心にcosのθ部分をfor文で微小変化させながらx軸周りに円を書こうと思ったのですが、このプログラムだと高さが1
の部分の線しか表示されません。
そこでy座標の1を変数hにしてどうにかしようと思ってるのですがどのように変化させればいいか考えてみたのですがわかりませんでした。

hをどのように変化させていけばきれいな円が書けるか教えてください。、どなたかお願いします。



761デフォルトの名無しさん:2009/09/06(日) 02:55:16
>>759
用途じゃなくて使い方?
762デフォルトの名無しさん:2009/09/06(日) 02:59:44
>>760
http://pc12.2ch.net/test/read.cgi/tech/1248010352/845
解決したりしなかったり面倒な人だね
ちなみにdpiいくつ?
763デフォルトの名無しさん:2009/09/06(日) 03:03:28
>>760
sin(e)にしてみ
764デフォルトの名無しさん:2009/09/06(日) 03:11:13
>>762

この質問は私ではないですよ??
765デフォルトの名無しさん:2009/09/06(日) 03:11:30
double x0 = 0, y0 = 0, x1, y1, PI = 3.14;

for(i=1; i<n; i++) {
x1 = cos(2 * PI / n * i);
y1 = sin(2 * PI / n * i);
DrawLine(x0,y0,x1,y1);
x0 = x1;
y0 = y1;
}

円ってこんな感じに描くんじゃねーの?
766デフォルトの名無しさん:2009/09/06(日) 03:15:49
>>763
出来ました
ありがとうございます
767デフォルトの名無しさん:2009/09/06(日) 03:18:21
>>764
あらぬ疑いをかけて申し訳ないです。

直径1mの円描画乙おめ
768デフォルトの名無しさん:2009/09/06(日) 03:20:03
>>767
いえ、ありがとうございます
769デフォルトの名無しさん:2009/09/06(日) 08:21:27
>>764
課題なら専用スレへ。
Cとは関係ない話だし。
770デフォルトの名無しさん:2009/09/06(日) 09:55:15
>>761
使い方です><
既に動いてるC言語プログラムと通信って可能ですかね?
771デフォルトの名無しさん:2009/09/06(日) 09:59:03
>>770
そのプログラムが出力(或いは入力)するファイル名が判っていて事前に作って置けるのであれば、
名つきパイプに出力(或いは入力)させることはできる。
しかし、やっぱりスレ違い。
772デフォルトの名無しさん:2009/09/06(日) 11:15:17
arctan2(y,x)関数でxが0の場合、角度は0度(0ラジアン)となりますが、正しく値が帰ってきますか?
773デフォルトの名無しさん:2009/09/06(日) 11:19:06
atan2でした
774デフォルトの名無しさん:2009/09/06(日) 12:09:11
>arctan2(y,x)関数でxが0の場合、角度は0度(0ラジアン)となります
いいえ。マニュアルを読みましょう。
775デフォルトの名無しさん:2009/09/06(日) 12:10:20
だからそれは数学上の場合を言ってるんです。実際はどうなるのかを聞いています
776デフォルトの名無しさん:2009/09/06(日) 12:17:12
>>775
不思議!数学の定義から始めて欲しいところだね
777デフォルトの名無しさん:2009/09/06(日) 12:23:37
>>775
>だからそれは数学上の場合を言ってるんです。実際はどうなるのかを聞いています
いいえ。xが0の場合は数学的には解がありません。
778デフォルトの名無しさん:2009/09/06(日) 12:26:05
寧ろあれだ、何故xが0のときに角度が0になると思い込んだのかその根拠を知りたいところだ。
779デフォルトの名無しさん:2009/09/06(日) 12:33:50
90度じゃないの
780デフォルトの名無しさん:2009/09/06(日) 12:43:09
>>779
便宜上、atan2()はそう解釈するよう仕様が決められているね。
781デフォルトの名無しさん:2009/09/06(日) 13:34:44
>>779-780
                      ___, - 、
                    /_____)
.                    | | /   ヽ || 数学もC++も、どっちもできなくても腹は減るんだな。
                    |_| ┃ ┃  ||
                   (/   ⊂⊃  ヽ )        /  ̄ ̄ ̄ \
                   !   \_/   !        ( ( (ヽ     ヽ
                   ,\ _____ /、       | −、ヽ\     !
   ゝ/  ̄ ̄ ̄ \     /. \/ ̄\/   .\     |・  |─ |__   /
   / _____ヽ    |  |  _┌l⊂⊃l  |  |    ┌ - ′  )   /
   | | /  ─ 、−、!    |  |  / ∋ |__|  |  |    ヽ  /   ヽ <
   |__|─ |   /|ヽ |    |  /`, ──── 、 |  |     ` ─┐   ̄
   (   ` ─ o−i    ヽ /         \ .ノ_      .j ̄ ̄ |
    ヽ、  ┬─┬ノ / ̄ ./            ヽ- 、\    /   ̄ ヽ\
  // /ヽ─| | ♯|  /   i              | ..) ) \  i  ./   |\\
  | |  /  `i'lノ))┘/ , ─│             !-l⊂⊃l┐__ヽ__/\ / |   | |
  | |  | ̄| / /| / ( (... .ヽ              / |____|∈  __./ .|   | |
  |_|/ヽ、_/  ./   ` ─ /\           /ヽ      ̄ \-──| \|_|
   | |  |───/____i  l=======l  |_____ __\  |\ | |
   |/ ヽ── |______\  l二|^|二二|^|二l 丿______ |_丿 \|
  l ̄ ̄ ̄ ̄ ̄ | |      | |.  | |   | |  | |         | |  ̄ ̄ ̄ l
    | ̄| ̄ ̄ ̄ ̄.| |────| |.  | |   | |  | |.──────| | ̄ ̄ ̄| ̄|
782デフォルトの名無しさん:2009/09/06(日) 13:39:12
>>780
えっ
783デフォルトの名無しさん:2009/09/06(日) 13:58:56
はいはい。
--
DESCRIPTION
`atan2' computes the inverse tangent (arc tangent) of Y/X. `atan2'
produces the correct result even for angles near pi/2 or -pi/2 (that
is, when X is near 0).

RETURNS
`atan2' and `atan2f' return a value in radians, in the range of -pi to pi.

If both X and Y are 0.0, `atan2' causes a `DOMAIN' error.

You can modify error handling for these functions using `matherr'.
784デフォルトの名無しさん:2009/09/06(日) 14:55:12
ほいほい
-- Function: double atan2 (double Y, double X)
-- Function: float atan2f (float Y, float X)
-- Function: long double atan2l (long double Y, long double X)
This function computes the arc tangent of Y/X, but the signs of
both arguments are used to determine the quadrant of the result,
and X is permitted to be zero. The return value is given in
radians and is in the range `-pi' to `pi', inclusive.

If X and Y are coordinates of a point in the plane, `atan2'
returns the signed angle between the line from the origin to that
point and the x-axis. Thus, `atan2' is useful for converting
Cartesian coordinates to polar coordinates. (To compute the
radial coordinate, use `hypot'; see *Note Exponents and
Logarithms::.)

If both X and Y are zero, `atan2' returns zero.

加えて
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/atan2.3.html

処理系定義って事かね
785デフォルトの名無しさん:2009/09/07(月) 11:37:06
>>772
arctan y/x がxが0の場合に0になる根拠まだ〜
786デフォルトの名無しさん:2009/09/07(月) 12:20:55
三角関数わかってないアホってだけだろw
787デフォルトの名無しさん:2009/09/07(月) 16:43:22
根拠はアホ
788デフォルトの名無しさん:2009/09/07(月) 23:54:49
#include <stdio.h>

void print_rec(int num);

int main(void)
{
print_rec( 0 );
return 0;
}

/* 100を起点に、引数までの数値を表示する再帰関数 */
void print_rec(int num)
{
if( num <= 100 ) /* 100まで再帰呼び出し */
{
print_rec( num+1 );
printf( "%d\n", num ); /* 再帰呼び出しから戻ってきたときに表示 */
}
}

このプログラムでprint_rec( num+1 );の部分でnum+○の○の部分だけ減っていくのが
よく分からないのですが、なぜ−ではないのでしょうか?
789デフォルトの名無しさん:2009/09/08(火) 00:00:33
>>788
print_rec(0) は何をするか? ・・・ print_rec(1) を呼び出した後、0を表示する。
print_rec(1) は何をするか? ・・・ print_rec(2) を呼び出した後、1を表示する。
print_rec(2) は何をするか? ・・・ print_rec(3) を呼び出した後、2を表示する。
以下略

表示するのは、呼び出した後であることに注意しよう。
つまり、0を表示するのは、1を表示した後である。
790デフォルトの名無しさん:2009/09/08(火) 00:05:05
void print_rec(int num)
{
if( num <= 100 ) /* 100まで再帰呼び出し */
{
printf( "%d\n", num ); /* 再帰呼び出しする前に表示 */
print_rec( num+1 );
}
}
791デフォルトの名無しさん:2009/09/08(火) 01:52:35
>>785
> y が +0 (-0) で x が +0 の場合、+0 (-0) が返される。
さらに条件が付くけど、これは?
792デフォルトの名無しさん:2009/09/08(火) 09:18:32
>>791
「これは?」って、何を聞きたいの?
まさかとは思うけど、「数学上」と断りをつけているのに「xが0の場合」とだけ書いているにも拘らず
「更に」yが0の場合のことを語っているなんて寝言を言いたいなら眠った方がいい。
793:2009/09/08(火) 09:23:37
教えて下さい。C言語で利用できるワイルドカードの記述方法を教えてください。*で指定するとビルドエラーが出ます。宜しくお願いします。
794デフォルトの名無しさん:2009/09/08(火) 09:25:49
Win32でFindFirstFile(), FindNextFile() を使った方がいいのでわ?
Linuxはどうなってるのかしらね
795デフォルトの名無しさん:2009/09/08(火) 09:39:38
>>793
ビルドエラーが出ていると言う時点で、何か大きな勘違いをしている。
何をしたいのか、どんなエラーが出るのか書きたまえ。
796793:2009/09/08(火) 09:48:52
テーブルの構築で、二つの要素があります。ここでは、A、Bとします。検索時Bを引っ掛けたいのです。Aはなんでもよいです。Aの部分をワイルドカードにしたいです。エラーの種類は構文エラーです。
797デフォルトの名無しさん:2009/09/08(火) 10:00:27
>>796
ここはCの入門編の質問スレだから、Cの用語で質問できないのならお門違い。
798デフォルトの名無しさん:2009/09/08(火) 10:23:28
>>796
該当部分のソースのせて。
あなたの説明では必要な情報が全部落ちてる。
799デフォルトの名無しさん:2009/09/08(火) 11:23:25
納期が迫ってるんです。速く教えてくれないと困るんです。
800デフォルトの名無しさん:2009/09/08(火) 11:25:44
必要な情報を最初からすべて明らかにするのが最も速く適切な回答を得られる
801デフォルトの名無しさん:2009/09/08(火) 11:56:20
もう意味不明すぎるww
codepad
ttp://codepad.org/
ここに貼れ。
802デフォルトの名無しさん:2009/09/08(火) 12:03:44
納期が迫っているのにビルドできないとかwwwwwwwwwwww
超かわいそうwwwwwwwwwwww
803デフォルトの名無しさん:2009/09/08(火) 12:08:16
だってさ、
> テーブルの構築で、二つの要素があります。
> ここでは、A、Bとします。検索時Bを引っ掛けたいのです。
> Aはなんでもよいです。Aの部分をワイルドカードにしたいです。
> エラーの種類は構文エラーです。
このレスは無いとおもうぜww

スレタイ知らなければ
ぱっと見ではC言語の質問しているとは思えないだろ?
804デフォルトの名無しさん:2009/09/08(火) 13:41:33
>>792
数学上、xがゼロの時はpi/2なの?
805デフォルトの名無しさん:2009/09/08(火) 13:43:08
>>803
select * from table_a where B = 検索条件;
と回答してしまいたくなるよなぁ
806デフォルトの名無しさん:2009/09/08(火) 13:52:38
xが0なら π/2 or -π/2だろ、数学的に考えて
807デフォルトの名無しさん:2009/09/08(火) 14:19:21
周期関数の一部を切り取ってるかどうかわからねぇだろ・・・jk
808デフォルトの名無しさん:2009/09/08(火) 14:25:26
>>806
それが言えるのはyが0でないときに限る。
同様に、
 yが0なら π or -だろ、数学的に考えて。
も成り立つ。ただしこれも言えるのはxが0でないときに限る。


そして
数学の世界で厳密に語るなら
x=y=0の時は未定義(不定の値)となる。

C99の世界で厳密に語るなら
未定義だったり不定だったりはせず、
The atan2 functions compute the value of the arc tangent of y/x, using the signs of both arguments to determine the quadrant of the return value. A domain error may occur if both arguments are zero.
この様に定められている。
809デフォルトの名無しさん:2009/09/08(火) 16:40:29
厳密に考えるならNaNが帰ってくるべきなのかな
極限値とるにしても近づけ方によって値が変わるし
810808:2009/09/08(火) 19:11:46
>>809
どうだろうねぇ。
NaNだと数じゃないって意味になっちゃうからねぇ。

まあNaNにするべきという見解もありだろうけど、
数学的には任意(不定)ってだけで数じゃないとまでは言い切って無い気がする。

べきとかべきじゃない議論は不毛になりやすいから
あんま深入りはしないでおこう。
811デフォルトの名無しさん:2009/09/08(火) 21:53:26
winsock通信であるサーバから受信した文字に必ず\0が含まれてしまい
のちの処理に影響が出てしまうのですがどうにかできませんか
812デフォルトの名無しさん:2009/09/08(火) 22:45:10
不要なら消せばいいじゃん
受け取ったデータを全部使う必要なんてないぜ
813デフォルトの名無しさん:2009/09/08(火) 23:07:36
>>811
そのプロトコルに準拠するような処理にするしかない
814デフォルトの名無しさん:2009/09/09(水) 11:10:31
>>811
そのプロトコルを作った人を呪え。
普通はテキスト部とバイナリ部を分けるから問題にならんと思うのだが……
815デフォルトの名無しさん:2009/09/09(水) 15:35:59
関数のプロトタイプ宣言で仮引数の変数名を省略できるけど、
変数名まで書くのと省略するのとどっちが主流なの?

int func(int x, int y);
int func(int, int);
816デフォルトの名無しさん:2009/09/09(水) 15:39:13
>>815
名前を書いたほうが、プロトタイプ宣言を見ただけで意味が分かる
817デフォルトの名無しさん:2009/09/09(水) 15:39:55
>>815
俺は昔後者の方がタイプ量が少ないと思っていたが
今は全部前者
コピペで貼り付けてる
818デフォルトの名無しさん:2009/09/09(水) 18:17:15
省略出来たんだ?w
819デフォルトの名無しさん:2009/09/09(水) 18:17:56
>>818
www
820デフォルトの名無しさん:2009/09/09(水) 18:29:03
>>818
こいつバカ過ぎるwww

>>815
どっちが主流かどうかはちょっと分からん。
しかし変数名は飾りじゃない以上、付けるべきでは?
むしろ付けないのはC++でオーバーロード解決のためにつかう
便宜上のクラスとかじゃね?
821デフォルトの名無しさん:2009/09/09(水) 18:31:17
int func(int, int);

int func(x,y)
int x;
int y;
{
}
822デフォルトの名無しさん:2009/09/09(水) 18:32:12
>>820
スレ違いになるから詳しくは書かないが、C++の場合は宣言だけでなく定義の仮引数名も省略できる。
823820:2009/09/09(水) 18:45:22
>>822
うむ、俺も
> C++でオーバーロード解決のためにつかう
> 便宜上のクラスとかじゃね?
これはそれを言いたかったんだが。
わかりにくかったかな?・・・。
まあいいか。スレ違いだしね、
824デフォルトの名無しさん:2009/09/09(水) 19:41:14
オーバーロードとポリモーフィズムの違いがよくわかんね
825デフォルトの名無しさん:2009/09/09(水) 19:44:12
機能選択が動的か静的かの違いだと考えればイイと思うよ
826デフォルトの名無しさん:2009/09/09(水) 20:08:41
オイラー法を使って物体のt秒後の位置を求めたいのですがC言語で表そうとするとどのような式になるのでしょうか?
必要なパラメーターと各パラメーターの変数を使った式を書いていただけませんか?
よろしくお願いします
827デフォルトの名無しさん:2009/09/09(水) 20:34:06
加速度 10 を積分して速度を求めたいのですがどのような方法がありますか?
828デフォルトの名無しさん:2009/09/09(水) 20:34:55
>>827
台形積分
829デフォルトの名無しさん:2009/09/09(水) 20:44:21
>>827
v = v0 + 10 * t
830デフォルトの名無しさん:2009/09/09(水) 20:59:45
初速度が0の場合は加速度=速度ってことですぬ
ありがとうございます
831デフォルトの名無しさん:2009/09/09(水) 21:03:19
どう考えてもC言語の問題じゃないから
これにて終了。
832デフォルトの名無しさん:2009/09/09(水) 21:23:14
加速度から速度を求めるのは積分じゃないような
833デフォルトの名無しさん:2009/09/09(水) 21:24:12
>>815
プロトタイプなんてコンパイラがみるもんで、人間がみるもんじゃないから
書かなくていいよ。

void hoge(int x, int y);

void hoge(int row, int col) {・・・}

となってて、プロトタイプ見て信じてたらひどいことになる。
834デフォルトの名無しさん:2009/09/09(水) 21:24:36
オイラー法ならここに例が載ってるよ
これ参考にして自分で組んでみ

精度が欲しかったら4次ルンゲ・クッタ法を使う

http://nyan11.ciao.jp/B/NA/EWSNA/linkANNA.html

ここのEULER.CとかEULER2.C

.ルンゲ・クッタ法はRK4.C
835デフォルトの名無しさん:2009/09/09(水) 21:24:58
積分と微分は単なる対立関係じゃなく循環してて、無限回積分すると微分してることになるんだよ
836デフォルトの名無しさん:2009/09/09(水) 21:35:25
>>833
その例はさすがに無理があるというか、当てはまらないだろう。
837デフォルトの名無しさん:2009/09/09(水) 21:36:18
>>835
適当なこと言うなよ。
838デフォルトの名無しさん:2009/09/10(木) 03:46:57
質問があります。
シリアル通信をして一文字づつデータを取得しようと思い。
ttp://www.takebay.net/~daigo-ao/paddlewiki.pl/title_A5B7A5EAA5A2A5EBC4CCBFAE2852532D3233324329A4C7C1F7BFAEA1A6BCF5BFAEA4F2B9D4A4A6A5D7A5EDA5B0A5E9A5E0.html
を利用したのですが、str や pszBuf に入るデータが一文字づつではなくて困っています。
上のソースからどのようにすれば一文字づつのデータを取得することが出来るでしょうか?
839デフォルトの名無しさん:2009/09/10(木) 03:53:53
一旦バッファに入れて1文字ずつ読めば?
840デフォルトの名無しさん:2009/09/10(木) 04:00:33
その方法が分からないのです><
841デフォルトの名無しさん:2009/09/10(木) 04:07:18
OnReceiveの引数でいいんだよね。
str[0] str[1]って感じで文字ごとにアクセスできるよ
842838:2009/09/10(木) 04:27:53
>>839,841
ありがとうございます。
私のやりたいことを伝えられなくて申し訳ありません。

以下のようにGPSのデータを加工しようと考えています。
rx_dataには一文字ずつ入って欲しくて
rx_data = ?
の?の部分を何とか作れないかと考えています。

/* 受信データの取り込み */
while(1){
i = 0;
do{
rx_data = sci1_rx(); // 1文字受信
rx_b[i] = rx_data; // 受信データを順に配列変数に入れる
i++;
}while(rx_data != '\n'); // 改行文字の場合は取込停止
rx_b[i] = '\0';
for(i = 0; i < 6; i++){ // 文字列rx_bから最初の6文字を取出す
b[i] = rx_b[i];
}
b[i] = '\0';
c = strcmp(a, b); // 文字列aと文字列bを比較する
if(c == 0){ // 取得した文字列がRMCセンテンスの場合
for(i = 0; i < 2; i++){ // 緯度データの切り取り
lati_s1[i] = rx_b[i +16];
}
lati_s1[i] = '\0';
・・・・・
843デフォルトの名無しさん:2009/09/10(木) 05:10:16
sci1_rxの実装方法が分からんってこと?
受信自体をどこでやるのかが不明なんだけど、sci1_rxの中でやりたいと思えばいいの?

…質問者がレスするたびに内容が変わりまくるパターンだろうか
844デフォルトの名無しさん:2009/09/10(木) 05:30:18
UDP使って送信ってできたよね?
845838:2009/09/10(木) 05:36:37
>>843
ありがとうございます。
シリアル通信は
ttp://www.takebay.net/~daigo-ao/paddlewiki.pl/title_A5B7A5EAA5A2A5EBC4CCBFAE2852532D3233324329A4C7C1F7BFAEA1A6BCF5BFAEA4F2B9D4A4A6A5D7A5EDA5B0A5E9A5E0.html
で行っているのでsci1_rx() ※本来で有れば一文字ずつ受信の所をなんとか上のソースを活かして実装できない物かと考えています
現状のソースではは str や pszBufの中身を取り出すと
$GPGSA,A,3,24,12,26,14,30,22,27,21,09,18,,,2.5,1.6,1.9*3B
$GPRMC,202700.000,A,3559.7317,N,13939.6303,E,0.17,228.81,090909,,*05
$GPGGA,202701.000,3559.7317,N,13939.6302,E,1,10,1.6,22.1,M,39.1,M,,0000*68
$GPGSA,A,3,24,12,26,14,30,22,27,21,09,18,,,2.5,1.6,1.9*3B
というような感じで一行ごとに出てきます。

sci1_rx();にあたる部分を実装したいと考えています。
846デフォルトの名無しさん:2009/09/10(木) 05:37:31
strcpy(a, "$GPRMC");
while(1){
i = 0;
do{
rx_data = sci1_rx(); // 1文字受信
rx_b[i] = rx_data; // 受信データを順に配列変数に入れる
i++;
}while(rx_data != '\n'); // 改行文字の場合は取込停止
rx_b[i] = '\0';
for(i = 0; i < 6; i++){ // 文字列rx_bから最初の6文字を取出す
b[i] = rx_b[i];
}
b[i] = '\0';
c = strcmp(a, b); // 文字列aと文字列bを比較する
if(c == 0){ // 取得した文字列がRMCセンテンスの場合
for(i = 0; i < 2; i++){ // 緯度データの切り取り
lati_s1[i] = rx_b[i +16];
}
lati_s1[i] = '\0';
・・・・・

一文字ずつの受信が出来れば、
/* 受信データの取り込み */
以降のソースでGPSデータの加工が可能になります。
よろしくお願いします。
847デフォルトの名無しさん:2009/09/10(木) 07:08:50
>>845
こんな感じかねぇ。インデックスの計算とか間違ってるかもしれないけど。

char* gBuf;
int gBufLen = 0;
int gBufIndex = 0;
get1(){
if(gBufIndex == gBufLen){
gBuf = sci1_rx();
gBufLen = strlen(gBuf);
gBufIndex = 0;
}
return gBuf[++gBufIndex];
}
848デフォルトの名無しさん:2009/09/10(木) 08:01:21
>>846
もうちょっとレベリングすると「なんてアホな子としてたんだろう」ってなるからおk
849838:2009/09/10(木) 11:50:10
>>847-848
ありがとうございます。

get1()
の部分が良く分かりません、また
error C2143: 構文エラー : ';' が '{' の前にありません。
となります。
お願いします<(_ _)>
850デフォルトの名無しさん:2009/09/10(木) 12:48:14
頭痛くなってきた。
strncmpとかstrstrつかいなよ
851デフォルトの名無しさん:2009/09/10(木) 13:06:42
>>846
受信スレッドの中を文字列解析処理に書き換え
255バイト毎に読み込んでるところを
1バイトづつ読む込むsci_rx()に書き換えればいいのでは?

255バイト毎に読み込んでるところを生かすなら、
sci_rx()って処理は無理かと?
852デフォルトの名無しさん:2009/09/10(木) 14:24:53
1文字ずつ取り込む必要性が感じられない。
受信データの中に"$GPRMC"という文字列が含まれていた場合に、
データ中の特定の数バイトを変数へ取り込みたいんだろ?
よほどトリッキーなことしない限り、普通は>>850の言うようにstrstr()とstrncpy()で簡単にできる。
853デフォルトの名無しさん:2009/09/10(木) 14:52:05
sci_rx()を使いたいならコンソールアプリにすればいいような?
854838:2009/09/10(木) 23:59:05
たくさんのレスありがとうございます。
今日、こんな感じを考えてみました、
int i;
for(i = 0; i<256; i++){
if(pszBuf[i] == '\0') break;
rx_data = pszBuf[i];
}

これでもOKでしょうか? って私が質問するのも変ですが今試せる環境がないので。。。

strncmp、strstrって意見を頂いたので調べてみます。
ある程度知識のある方からすればしょうもない質問とは思いますがよろしくお願いします。
855デフォルトの名無しさん:2009/09/11(金) 00:19:11
>>854
strncpy の自作版?
856デフォルトの名無しさん:2009/09/11(金) 01:33:22
要は、行単位で受信イベント発生しているんでしょ? で、これからデータを取ればいいんだよね?
>$GPRMC,202700.000,A,3559.7317,N,13939.6303,E,0.17,228.81,090909,,*05
だったら、これがbufに入っていると仮定して、
#define RMC_STR "$GPRMC,"
if (strncmp(buf, RMC_STR, sizeof(RMC_STR) - 1) == 0) {
double valueA, valueB, valueC;
char letterA, letterB, letterC;
if (sscanf(buf + sizeof(RMC_STR) - 1, "%lf,%c,%lf,%c,%lf,%c", & valueA, & letterA, & valueB, & letterB, & valueC, & letterC) == 6) {
// success
}
}
こんな要領でしょ。
857デフォルトの名無しさん:2009/09/11(金) 01:39:07
だったら、
if (sscanf(buf, "$GPRMC,%...",...) == xx)
で良いだろ
858デフォルトの名無しさん:2009/09/11(金) 05:10:26
文字列の切り出し以前に、発想を変えないとはまるような
859デフォルトの名無しさん:2009/09/11(金) 15:57:48
受信イベント来た
自前バッファの末尾に 受信データ文字(列) を連結する

字句解析側( $から始まって LF(CRLF?) が1単位か?)は
自前バッファ が空でなければ 自前バッファの先頭の1文字を取得
(さらに 自前バッファを先頭側へ詰めたり リングで管理したりして ところてんの筒のようにする)

※ TCPもそうだけど、シリアル通信は行単位や全てのデータが一気に来るとは限らないからね
860デフォルトの名無しさん:2009/09/11(金) 19:14:35
そろそろアホな事してるって認識になってきたころあいですね
861デフォルトの名無しさん:2009/09/11(金) 19:21:01
そんなことないよ。
俺ライブラリが充実しそうだと夢がふくらんでる頃合い
862デフォルトの名無しさん:2009/09/11(金) 19:24:35
まだだったか
863デフォルトの名無しさん:2009/09/11(金) 23:19:59
(struct ~ *)&~
↑これって何?
864デフォルトの名無しさん:2009/09/11(金) 23:20:59
>>863
キャストじゃない?
865デフォルトの名無しさん:2009/09/11(金) 23:27:13
~とかいてあるの?
866デフォルトの名無しさん:2009/09/11(金) 23:28:20
>>863
C言語じゃない。
867838:2009/09/12(土) 00:48:06
>>859
どうも行単位でイベントが発生しているわけではないようです。ようやく気づきました。。。
ごめんなさい。

既存のソースを流用するのはあきらめようと思います。
質問し直させて下さい。

bufに
07,02,13,,,,1.5,0.9,1.2*3C
$GPGSV,3,1,11,02,80,342,31,04,60,116,27,05,56,304,33,10,48,290,29*7B
$GPGSV,3,2,11,13,29,042,19,07,26,087,23,08,21,127,34,29,09,322,36*7E
$GPGSV,3,3,11,15,08,216,25,24,03,308,32,17,01,168,19*48
$GPRMC,145317.000,A,3559.7367,N,13939.6392,E,0.12,7.19,110909,,*0A
$GPGGA,145318.000,3559.7369,N,13939.6395,E,1,09,0.9,23.0,M,39.1,M,,0000*65
$GPGSA,A,3,04,15,29,10,08,05,07,02,13,,,,1.5,0.9,1.2*3C
$GPRMC,145318.000,A,3559.7369,N,13939.6395,E,0.08,292.44,110909,,*01
$GPGGA,145319.0
の様なデータが送られて来る場合
$GPRMCセンテンスの"," ごとに区切られたデータ12個をa,b,c,d,e,f,g,h,i,j,k,l
の変数に入れるにはどうしたら良いでしょうか?
868デフォルトの名無しさん:2009/09/12(土) 01:03:48
どうせ行単位で届く保障なんてないんだから
受信バッファから1バイトずつ読んで「","が来たら次の変数に」、「"LF"が来たら1行そろった」
の判定を繰り返せばいいんじゃないの? 
869デフォルトの名無しさん:2009/09/12(土) 01:10:59
>>867
sscanf()でいいだろ。上で誰か実例挙げてたと思うが。
870デフォルトの名無しさん:2009/09/12(土) 02:13:42
a = foo();
if(!a) a = bar();



a = foo() ||| bar();
みたいに一括して書く方法ないですか?
foo, barは0,1以外も返す可能性があります。
871デフォルトの名無しさん:2009/09/12(土) 02:49:17
if ( !( a = foo() ) ) { a = bar(); }
a = foo()?foo():bar();
872デフォルトの名無しさん:2009/09/12(土) 03:02:27
>>843
さすがと言わざるを得ない
873デフォルトの名無しさん:2009/09/12(土) 03:12:40
if((a = foo()) || (a = bar()) );

つーか、どうしたいのかを明確にしろよ。
874デフォルトの名無しさん:2009/09/12(土) 03:21:49
a = (a = foo()) ? a : bar();
とか。

読みにくいだけで、意味は全然無いと思うけどな。
875838:2009/09/12(土) 03:34:22
if(strstr(buf, "$GPRMC")){
float time = 0;
char valid = 0;
float latitude = 0;
char NorthSouth = 0;
float longtitude = 0;
char EastWest = 0;
float sog = 0;
float direction = 0;
int date = 0;
float magneticDeclination = 0;
char magneticEastWest = 0;
int checkSum = 0;

sscanf(buf, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,%f,%c*%x",
&time,
&valid,
&latitude,
&NorthSouth,
&longtitude,
&EastWest,
&sog,
&direction,
&date,
&magneticDeclination,
&magneticEastWest,
&checkSum);
}
これでOK? 上手く動かないんだけどな。。
876デフォルトの名無しさん:2009/09/12(土) 03:40:02
>>875
>>867のGPRMCが含まれる行と形式が違わないか?
あと、bufに対してsscanfをそう書くって事は先頭にマッチさせられるような状況を作ったってこと?
877デフォルトの名無しさん:2009/09/12(土) 03:42:11
a = MAX( foo(), bar() );

両方やっちゃって良いならこれでも良いけど、処理変わるよな。
878デフォルトの名無しさん:2009/09/12(土) 03:50:48
>>875
とりあえず動かした。
char *p;
if(p = strstr(buf, "$GPRMC")){
float time = 0;
char valid = 0;
float latitude = 0;
char NorthSouth = 0;
float longtitude = 0;
char EastWest = 0;
float sog = 0;
float direction = 0;
int date = 0;
float magneticDeclination = 0;
char magneticEastWest = 0;
int checkSum = 0;

// sscanf(buf, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,%f,%c*%x",
sscanf(p, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,,*%x",
&time,
&valid,
&latitude,
&NorthSouth,
&longtitude,
&EastWest,
&sog,
&direction,
&date,
// &magneticDeclination,
// &magneticEastWest,
&checkSum);
}
879838:2009/09/12(土) 04:06:39
>>867,
ありがとうございます。
形式違いますか?あれ、どこかな?

先頭にマッチさせられるような状況は作れてません><

>>878
ありがとうございます。
うーん。&time.....それぞれにちゃんと値が入りません。
先頭にマッチさせてないことが原因でしょうか?
880デフォルトの名無しさん:2009/09/12(土) 04:37:40
デバッグできない人?
これは動くよね
#include <stdio.h>
#include <string.h>

int main()
{
char *buf = "hoge$GPRMC,202700.000,A,3559.7317,N,13939.6303,E,0.17,228.81,090909,,*05hoge";
char *p;
if(p = strstr(buf, "$GPRMC")){
float time = 0; char valid = 0; float latitude = 0; char NorthSouth = 0; float longtitude = 0;
char EastWest = 0; float sog = 0; float direction = 0; int date = 0; float magneticDeclination = 0;
char magneticEastWest = 0; int checkSum = 0;

// sscanf(buf, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,%f,%c*%x",
sscanf(p, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,,*%x",
&time, &valid, &latitude, &NorthSouth, &longtitude,
&EastWest, &sog, &direction, &date,
// &magneticDeclination,
// &magneticEastWest,
&checkSum);
printf("$GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,%f,%c*%x\n",
time, valid, latitude, NorthSouth, longtitude,
EastWest, sog, direction, date,
magneticDeclination, magneticEastWest, checkSum);
}

return 0;
}
881デフォルトの名無しさん:2009/09/12(土) 04:41:02
>>879
> 形式違いますか?あれ、どこかな?
コメントアウトされてることに気づきませんか
882デフォルトの名無しさん:2009/09/12(土) 04:56:37
ていうか、sscanfの戻り値は必ずチェックするようにしろよ
883デフォルトの名無しさん:2009/09/12(土) 05:11:05
というかこれまさか業務のコードじゃないよな
884デフォルトの名無しさん:2009/09/12(土) 08:42:42
RMCセンテンスって機器によって内容がマチマチだったような
特に列数が11個だったり12個だったり
885デフォルトの名無しさん:2009/09/12(土) 10:55:24
strstr()とstrncpy()を使わないで、ひねってやりたい年頃。
薄っぺらい人間はひねりたがる。
繁殖期に男が料理などにはまって、良い夫を演じるのに似てるな。
886デフォルトの名無しさん:2009/09/12(土) 14:10:21
>>885
おまえのほうが中二っぽい。
887838:2009/09/12(土) 19:34:13
>>レス下さった皆さん
ありがとうございます。
>>880
バッファのタイミングを弄ったら無事に出来るようになりました。
>>883
じゃないですよ。
>>884
そうみたいです。しかも説明書の解説と実際のデータが違って昨日は混乱しました。言い訳ですが。。
888デフォルトの名無しさん:2009/09/12(土) 20:31:29
> というかこれまさか業務のコードじゃないよな

ま、業務のコードでもひどいのはいくらでもあるけどな。
889デフォルトの名無しさん:2009/09/14(月) 11:37:30
つーか問題点が整理できてない

・シリアル通信を用いてデータ単位毎にイベント発生(or ブロッキングからの脱出)する+当該データを取得する しくみ
 [大前提] 通信資源からの入力操作は "行単位" や "転送側の送出操作単位" が保証されるわけではない
 # 装置が 1回 send してるにもかかわらず 複数回 recv しないとデータが揃わない とか
 # 装置が 複数回の send が 1回 recv でまとまってやってきた とか
 (最もプロトコルによっては、"時間" により データ終端を規定してたりすることもあるが…)

・1データ単位から如何にして値を取得するか
890デフォルトの名無しさん:2009/09/15(火) 08:03:11
指定オフセットから指定バイト分文字を書き換える関数無い?
891デフォルトの名無しさん:2009/09/15(火) 08:17:30
と思ったら配列要素でできるのか事故解決
892デフォルトの名無しさん:2009/09/15(火) 09:12:04
つmemcpy()
893デフォルトの名無しさん:2009/09/15(火) 13:08:12
gccってやつどこからDLするの?
894デフォルトの名無しさん:2009/09/15(火) 13:13:50
ggrks
895デフォルトの名無しさん:2009/09/15(火) 13:14:23
ソースはhttp://gcc.gnu.org/にあるけど、普通は自分の環境に合ったバイナリを入れた方がいいよ
896デフォルトの名無しさん:2009/09/15(火) 16:47:08
>>893
TDM's GCC/mingw32 Builds
ttp://www.tdragon.net/recentgcc/

ここで公開されているGCC/mingw32をインストールするといい。
最新版はバグありだけど、まあ大丈夫だよ、うん。。。
すぐ修正されるだろ。
897デフォルトの名無しさん:2009/09/15(火) 19:45:51
TDM版を使うとなにがいいことあるの?
898デフォルトの名無しさん:2009/09/15(火) 20:12:42
>>897
君がビルドした物を俺が使うより良い

とか。
899デフォルトの名無しさん:2009/09/15(火) 21:12:36
intel c compilerでscanf_s();って使えますか?
900デフォルトの名無しさん:2009/09/15(火) 21:53:20
>>898
901デフォルトの名無しさん:2009/09/15(火) 21:55:54
>>900
言い換えると俺がビルドした物を>>900さんはインストールする気になりますか?

ってこと。
冗談じゃねぇよって思うだろ?

902デフォルトの名無しさん:2009/09/15(火) 22:05:37
>>901
いやいや、MinGWプロジェクトが配布してるバイナリじゃなくて、TDMがビルドしたバイナリを使う利点はなんですか?と
聞いたつもりなんだけど、、、もしかして前者は存在しないの?
903デフォルトの名無しさん:2009/09/15(火) 22:11:23
最新バージョンを使いたい人向け?なのかな?
で、その最新バージョンをTDMがビルドしたものを使うとCPU負荷が異常に高くなってしまうと
904デフォルトの名無しさん:2009/09/15(火) 22:19:09
>>899
持ってないからわからん。
持ってるのなら試してみてはどうですか
905デフォルトの名無しさん:2009/09/15(火) 22:22:25
char s2[256];
char *point=&s;

↑エラー出る何で?
906デフォルトの名無しさん:2009/09/15(火) 22:23:07
char s[256];
char *point=&s;

間違え こうだった
907デフォルトの名無しさん:2009/09/15(火) 22:23:24
_s 系の関数はMS独自だと思ってたが結構ポピュラーなのか?
908デフォルトの名無しさん:2009/09/15(火) 22:23:37
sが未定義っていうエラーだよね?
909デフォルトの名無しさん:2009/09/15(火) 22:24:28
>>906
char * に char ** を代入しようとしているから
910デフォルトの名無しさん:2009/09/15(火) 22:24:41
× char *point=&s;
○ char *point=s;
911デフォルトの名無しさん:2009/09/15(火) 22:25:08
問題のあるポインタ変換ってでます
912デフォルトの名無しさん:2009/09/15(火) 22:26:36
>>909-910
ありがとう
913デフォルトの名無しさん:2009/09/15(火) 22:26:46
>>909
それはない
914913:2009/09/15(火) 22:27:57
すまん、途中だった

char s[256];
char **p = &s;

これなら通るかのように読めたわけだが
915909:2009/09/15(火) 22:32:04
>>914
うーん
char * に char *[256] を代入しようとしているから…
でいいのかな

ややこしいな
916デフォルトの名無しさん:2009/09/15(火) 22:32:35
いや、通るぞ。
917デフォルトの名無しさん:2009/09/15(火) 22:33:54
>>906
これがなんでだめなのかは、sが配列だからに他ならない
配列で定義したsは、その時点でアドレス変数(つまりポインタ)
になるので、ポインタ変数へはそのまま代入しなければならない
つまり、>>909が正しい
918デフォルトの名無しさん:2009/09/15(火) 22:39:25
>>916
文法的には間違っていないからでは?
ただし、配列の場所(アドレス)を格納している配列sの場所(アドレス)
をポインタpointに代入していることになる
実質ポインタのポインタとなる
コンパイラが、ある人にとってはありがた迷惑なエラー(ワーニングだとおもうが)を吐き出しているということだと思う
919909:2009/09/15(火) 22:41:07
>>917
ごめん >>909 は正しくないんだ


関係ないけど
char s[256];
char (*p)[256] = &s;
これは正しい
920917:2009/09/15(火) 22:43:49
>>919
ごめん、>>910だったw
921デフォルトの名無しさん:2009/09/15(火) 22:48:43
>>919
ところで、これは、ポインタ配列pにsのアドレスを入れてるけど、
どういうことになるんだろう?
こんがらがってきた
922デフォルトの名無しさん:2009/09/15(火) 22:49:09
>>918
ポインタのポインタ?
char **p = (char **)&s;
が問題ないと言っている?
923デフォルトの名無しさん:2009/09/15(火) 22:50:49
>>921
ポインタ配列じゃないので大丈夫。
924デフォルトの名無しさん:2009/09/15(火) 22:54:11
925デフォルトの名無しさん:2009/09/15(火) 22:56:16
>>923
char (*p)[256]はポインタ配列定義にならないんだっけ?
926デフォルトの名無しさん:2009/09/15(火) 22:57:45
>>924
話が違う。

>>925
配列へのポインタであって、ポインタ配列ではない。
927デフォルトの名無しさん:2009/09/15(火) 22:59:44
>>926
char *p[256]とchar (*p)[256]は違うということか
つまり、これはポインタのポインタ?
928デフォルトの名無しさん:2009/09/15(火) 23:00:08
char s[256] = {1, 2, 3};
char **p = (char **)&s;
printf("%d\n", **p);
これはp[0]を出力しない。

char *p = (char *)&s;
これは合法
929デフォルトの名無しさん:2009/09/15(火) 23:01:01
>>927
char [256] 型を指すポインタであって、ポインタのポインタではない
930デフォルトの名無しさん:2009/09/15(火) 23:06:34
char (*p)[256] = &s;
こうした場合、配列の先頭要素にアクセスするには、*p[0] **p のどちらでも動作する。
ならばポインタのポインタではないか、といいたくなる気持ちも分からなくはないが、

char (*p)[256];
char **q;
としたときの、sizeof(*p) と sizeof(*q) は違う。
*p は char [256]型であり、*q は char *型だから。
931デフォルトの名無しさん:2009/09/15(火) 23:09:29
ちょwwwTDMの利点が分からないままありがちな配列ポインタ談義にwww
C FAQでも読んでろwww
932デフォルトの名無しさん:2009/09/15(火) 23:18:31
>>929
char[256]型って、実質ポインタだったりしないのかな。。
たとえば、char s[256];で定義して、*sを参照したらアドレスが
出てくるんだよね?
933デフォルトの名無しさん:2009/09/15(火) 23:20:24
>>930
やばい、わからんw
qはchar **型じゃないの?
934デフォルトの名無しさん:2009/09/15(火) 23:25:14
不安な人はC FAQでも読み直したらええねん
935デフォルトの名無しさん:2009/09/15(火) 23:36:17
>>932
> char[256]型って、実質ポインタだったりしないのかな。。
しない。

char[256]型の変数を宣言すると、
char str[256];
こうなるよ。
936デフォルトの名無しさん:2009/09/15(火) 23:37:12
>>933
qはchar **型だよ。だから、*qはchar *型

連投スマソ
937デフォルトの名無しさん:2009/09/15(火) 23:45:43
>>936
なるほど、確かにw
938デフォルトの名無しさん:2009/09/15(火) 23:46:52
>>935
もちろん、表面的には*出てこないし、ポインタではないんだけど、
中身というか、メモリ上では実質ポインタと同じなのかなと言う意味
939デフォルトの名無しさん:2009/09/16(水) 00:06:08
関係ない?けど、配列へのポインタは関数ポインタの後で理解したなぁ
あんまり使わないといえば使わない、、、んだけど、配列を関数に渡したいという要望自体は初心者でもありがちだし。。。
940デフォルトの名無しさん:2009/09/16(水) 00:19:21
>>938
多分君が考えてることは合ってる
941デフォルトの名無しさん:2009/09/16(水) 00:22:24
簡単な話だ。ポインタ「変数」はその名の通り保持する値が変わり得る。
配列の先頭アドレスは変わらない。故に配列≠ポインタ。
942デフォルトの名無しさん:2009/09/16(水) 00:39:52
>>941
なるほど説得力があるな。
ただ、やったことはないから、そもそもできるかわからんが、例えば

char str[256];
str = &str[1];

ってやると、先頭アドレス1バイト分、後ろにシフトした配列に
なったりしない?
だったら、やってみろって話になるかもしれんが。w
943デフォルトの名無しさん:2009/09/16(水) 00:44:54
配列はポインタ変数じゃなくてポインタ定数
944デフォルトの名無しさん:2009/09/16(水) 00:47:41
例えば、
char str[256];
str++;
でもいい。
どうだろうか?
945デフォルトの名無しさん:2009/09/16(水) 00:48:43
>>943
あ、やっぱ定数扱いなんだ
じゃあ、無理だね
するとポインタでできるような>>944も無理だね

ありがとございます
946デフォルトの名無しさん:2009/09/16(水) 00:58:31
添え字の無い配列は、式の中ではポインタとなる
つまり
char str[ 256 ];
char* s;

s = str;
s++;

とかは可能
947デフォルトの名無しさん:2009/09/16(水) 01:02:14
>>946
うん、それだと納得
だって、sは明らかにポインタとして定義されてるからね
むしろs++でアドレスとsizeof(char)ずつインクリメントできないと困る

ということは、やっぱりstr++のように、配列として定義したstrに
対してポインタのような演算はできないということなんだね
948デフォルトの名無しさん:2009/09/16(水) 01:05:28
微妙だけど

char str[ 256 ];
char* s;

s = str + 12;

とかは可能
949デフォルトの名無しさん:2009/09/16(水) 01:12:06
>>948
なるほど。
配列をアドレス定数として扱っての演算は可能ということなのね
理解が深まった
ありがとう
950デフォルトの名無しさん:2009/09/16(水) 02:09:32
int main()
{
char str[5][100] = {{1, 2, 3}, {2, 4, 6}, {3, 6, 9}, {4, 8, 12}, {5, 10, 15}};
char (*p)[100] = &str[0];
char (*end)[100] = &str[5];

do {
printf("%d\n", ((char *)p)[1]);
} while (++p != end);

return 0;
}
配列型を意識したコードでなんか例がないかと考えた結果こんなことに。
++pで何が起こってるかを見てもらえれば分かるかなぁ?
951デフォルトの名無しさん:2009/09/16(水) 05:31:35
do{
i=strlen(r);
r[i]=20;
}while(i+1 != strlen(r));

x0を探し出してスペースに変えるもの作ろうとしたら
符号が違うだとかでエラー出るよ
どうしたらいの
952デフォルトの名無しさん:2009/09/16(水) 05:38:26
どいつもこいつもバカばっか
953デフォルトの名無しさん:2009/09/16(水) 06:12:20
>>951
0が2個連続してないと延々とメモリを書き換えていきそうだな
954デフォルトの名無しさん:2009/09/16(水) 06:54:22
文字列の間にある0を抜きたいだけだからそれはいいんだよ
955デフォルトの名無しさん:2009/09/16(水) 07:04:36
>>951
rが指す先が通常のC文字列として扱えるのならそのコードはおかしい。
rが指す先が特殊なバイト列ならstrlen()を使うのはおかしい。

特に後者の場合、コーディング規約でchar以外の型にtypedefすることを要請する場合もあるほどだ。
956デフォルトの名無しさん:2009/09/16(水) 07:09:42
>951
rの型はなんなのよ
符号というからおそらく
unsignedが付いているんだと思うけど
エラーではなく警告じゃないかな
957デフォルトの名無しさん:2009/09/16(水) 08:15:24

char str[] = "abcde";

char *str = "abced";
の扱いの違いで悩んだ記憶があったなあ
958デフォルトの名無しさん:2009/09/16(水) 08:21:09
よく分からんけど
r[i]=20;

r[i-1]=20;
じゃないの?
959デフォルトの名無しさん:2009/09/16(水) 08:28:56
>>951
#include <stdio.h>

int main()
{
    char s[] = "hello\0world\0";
    char *p = s;
    char *q = p + sizeof(s) - 1; // ここでは配列のサイズから文字列の長さを算出
   
    printf("len=%d\n", strlen(s)); // strlenは途中の\0を拾うから役に立たない
    printf("len=%d\n", sizeof(s) - 1);
   
    for(; p < q; p++)
        if(*p == '\0') *p = ' ';
   
    printf("%s\n", s);
   
    return 0;       
}
960デフォルトの名無しさん:2009/09/16(水) 10:40:50
おまえらすごいな
俺には質問の意味が理解できん…
961デフォルトの名無しさん:2009/09/16(水) 11:08:11
エスパーにはエスパーで対抗するしかないからなあ
962デフォルトの名無しさん:2009/09/16(水) 11:14:35
>>951
>符号が違うだとかでエラー出るよ
どの行にでるか、程度のことも解らんのかお前は。
どうせ i が int なんだろうけど。

>>958
r[i] = 0x20;
963デフォルトの名無しさん:2009/09/16(水) 13:48:33
CとかJavaってさ、逆にPHPとJavaScript習得している場合は習得は大変なの?
Cとか習得後はPHPとか簡単だと聞くけど
964デフォルトの名無しさん:2009/09/16(水) 13:52:38
素養ができてれば他の言語を学ぶのは簡単
965デフォルトの名無しさん:2009/09/16(水) 13:52:56
Cはポインタがあるし文字列型やGCがないから一苦労あるかも
Javaは簡単だと思うよ
966デフォルトの名無しさん:2009/09/16(水) 13:53:02
そんな事をきいてどうする?
967デフォルトの名無しさん:2009/09/16(水) 14:26:20
GCなんてものは、動的確保したものを不要になり次第ちゃんと解放してれば不要な機能だ。
つまりプログラマの意識の問題。一方、コンパクションは処理系ではなくOSの仕事であるべき。
968デフォルトの名無しさん:2009/09/16(水) 14:44:45
お前が何と吠えたところで世の中はかわらないけどな
969デフォルトの名無しさん:2009/09/16(水) 14:50:46
PHPやJavaScriptでGCに慣れ切ってる人がCに来ると、
その「ちゃんと解放する」という考え方自体がこれまでなかったわけだから、
苦労するんじゃないかな、と思った次第
970デフォルトの名無しさん:2009/09/16(水) 14:52:23
そんな奴いるのか?
971デフォルトの名無しさん:2009/09/16(水) 14:54:19
単なる杞憂ならいいんだ
何も言うことはないよ
972デフォルトの名無しさん:2009/09/16(水) 14:54:27
Basic → アセンブラ → Javaと移ってきた俺に言わせれば、
領域の確保と解放?なにそれpgrって感じだったな。
973デフォルトの名無しさん:2009/09/16(水) 16:14:39
Triassic → カンブリア → Juraと移ってきた俺に言わせれば、
領域の確保と解放?なにそれpgrって感じだったな。
974デフォルトの名無しさん:2009/09/16(水) 17:58:34
ここには職業Pはいなそうだな
975デフォルトの名無しさん:2009/09/16(水) 18:22:41
C++撲滅運動
976デフォルトの名無しさん:2009/09/16(水) 22:27:22
ハッシュテーブルや辞書型の構造体を提供するC用の有名なライブラリとかありますか?
977デフォルトの名無しさん:2009/09/16(水) 22:37:43
>>976
どうしても C でないとダメというのでなければ C++ の STL を使うのが楽
978デフォルトの名無しさん:2009/09/16(水) 22:39:09
お前は何を言っているんだ
979デフォルトの名無しさん:2009/09/16(水) 22:42:24
CSTLだろ
980デフォルトの名無しさん:2009/09/16(水) 23:09:59 BE:236678055-DIA(320721)
次スレ立てました
C言語なら俺に聞け(入門篇) Part 53
http://pc12.2ch.net/test/read.cgi/tech/1253110182/
981デフォルトの名無しさん:2009/09/17(木) 04:39:34
memcpyでコピー先のアドレスから30バイトずらしたところに移すには?
memcpy(&s+30,b,4); こうしたらコンパイルはできたが実行すると問題発生した
982デフォルトの名無しさん:2009/09/17(木) 04:42:40
&イラネ
983デフォルトの名無しさん:2009/09/17(木) 05:23:43
>>981
sの型による
s+1としても、実際は内部的にs+sizeof(s)だけポインタずらされるから
どうしてもというなら(char *)にキャストするとか
984デフォルトの名無しさん:2009/09/17(木) 07:02:08
スレを勃てるまでもない…(ry
ってスレは今 無くなった??
985デフォルトの名無しさん:2009/09/17(木) 07:33:18
connect(sock, (struct sockaddr *)&server, sizeof(server));

(struct sockaddr *)&server
これは、何をしてるの?
986デフォルトの名無しさん:2009/09/17(木) 07:53:13
キャスト。


マジレスすると、
その手のコードの場合、大抵はserverの型は
struct sockaddr ではなく、 struct sockaddr_in とかが使わている。
で、connectが受け取るのは struct sockaddr * なので、キャストして渡している。
socket関係を自力で書くときはほとんどそういう形になる。
987デフォルトの名無しさん:2009/09/17(木) 07:54:33
>>985
connectの第二引数の型がstruct sockaddr *なのでそれにあわせてキャストしている
多分serverはsockaddr_in型なんだろう
988デフォルトの名無しさん:2009/09/17(木) 13:28:57
>>984
スレを勃てるまでもないC/C++の質問はここで
無くなっちゃったね
989デフォルトの名無しさん:2009/09/17(木) 16:40:08
>>986>>987
ありがとうございました
990984:2009/09/17(木) 20:42:22
>>988
無くなったか。
まあ関連スレはいっぱいあるし、いっか。
991デフォルトの名無しさん:2009/09/17(木) 23:00:53
次いってみよー
992デフォルトの名無しさん:2009/09/17(木) 23:02:13
1000なら民主最高
993デフォルトの名無しさん:2009/09/17(木) 23:02:55
1000じゃなかったら政権交代すべき
994デフォルトの名無しさん:2009/09/17(木) 23:30:13
民主党は早くマニフェストどおり政権交代しろよ
995デフォルトの名無しさん:2009/09/17(木) 23:54:07
996デフォルトの名無しさん:2009/09/17(木) 23:56:26
1000ならC#が流行になる
997デフォルトの名無しさん:2009/09/18(金) 00:00:15
1000ならプログラミング引退
998デフォルトの名無しさん:2009/09/18(金) 00:01:01
ぬるぽ
999デフォルトの名無しさん:2009/09/18(金) 00:02:57
■━⊂( ・∀・) 彡 ガッ☆`Д´)ノ
1000デフォルトの名無しさん:2009/09/18(金) 00:04:06
人生初の1000get
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。