1 名前:デフォルトの名無しさん [2012/07/15(日) 10:28:33.18 ] C言語の入門者向け解説スレッドです。 ★前スレ C言語なら俺に聞け(入門編)Part 103 toro.2ch.net/test/read.cgi/tech/1341059858/ ★過去スレ 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 ★教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 158代目 toro.2ch.net/test/read.cgi/tech/1339338438/ ★C++言語については避けてください。C++対応明記スレへどうぞ。 ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。 # サイズが大きい場合はアップローダ等を利用してください。 codepad.org/ ideone.com/ ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
49 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 14:41:25.66 ] >>46 実装したことはないんだが、 テキストエディタのデータ構造は意外にややこしくて、それだけで一つの分野 ギャップバッファとかでぐぐるといい
50 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 15:21:02.43 ] >46 struct { void *pNae; //前の行 char *pData;//行の内容 void *pTugi //次の行 }; こんな感じの構造体を1行に付き1つ作る。 バッファは初めに大きく確保するか1行毎に確保するか好みで。
51 名前:デフォルトの名無しさん [2012/07/19(木) 18:18:11.75 ] なえ
52 名前:デフォルトの名無しさん [2012/07/19(木) 21:31:37.53 ] C言語でマルチスレッドなしでゲームプログラミングって可能? アクションゲームとか作りたい。
53 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 21:35:29.67 ] 平行進行させたい部分を細切れに分割して細切れを順繰りに動かす
54 名前:デフォルトの名無しさん [2012/07/19(木) 21:48:58.96 ] >>53 それも禁止するとしたら?
55 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 21:56:14.15 ] 禁止事項を先に書けよ 後からこれはダメあれはダメ言われちゃかなわんよ
56 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 21:57:15.81 ] 相手にしたオマエが悪い
57 名前:デフォルトの名無しさん [2012/07/19(木) 21:58:08.59 ] マジックナンバーって何ですか? toro.2ch.net/test/read.cgi/tech/1342423314/l100 ↑ スレタイからして意味不明。 int str[100] strがマジックナンバー?
58 名前:デフォルトの名無しさん [2012/07/19(木) 21:59:02.68 ] C言語の標準関数にマルチスレッド扱うものってあった? Javaならthredクラスがあるけど。
59 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 22:03:11.42 ] zero以外の即値
60 名前:デフォルトの名無しさん [2012/07/19(木) 22:12:28.86 ] int max max=16; int str[max]; とするより int str[16]のほうがソースコードが短くなり 容量も減ると思うのですが。
61 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 22:16:11.38 ] その16が沢山あったら? エディタの一括修正でいいやんけと言うなら また違った意味で16を他の変数に使っていたら?
62 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 22:19:58.88 ] >>57 コードのあちこちに 5 とか 1024 とか 0666 が散りばめられているときに、そのコードを理解したり修正するのは大変だろう。 #define N 5 #define BUFFSIZE 1024 #define RW 0666 などなんとか意味を感じられるようにすることが推奨されている。 一見して由来のわからないイミーディエイト値のことを皮肉をこめて「魔法の数字」と呼んでいるようだ。
63 名前: ◆QZaw55cn4c mailto:sage [2012/07/19(木) 22:20:55.05 ] >>60 #define か enum 八苦を使うのがいいでしょうね。
64 名前:デフォルトの名無しさん [2012/07/19(木) 22:29:56.70 ] >>61 修正って何? 修正したらいいじゃない。
65 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 22:39:00.23 ] その程度の規模しか作ってない人間にはそれでいいよ
66 名前:デフォルトの名無しさん [2012/07/19(木) 22:47:35.74 ] Cがjavaに勝ってる要素ってあるの?
67 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 22:52:07.03 ] Oracleの臭い息がかかってないだけで大勝利ですが
68 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 22:54:58.75 ] ネイティブコードが書ける。 ナマポが使える。 しかし最近はCPUすら仮想化されてるからなあ 仮想CPUでも高速化テクニックってのは通用するんだよね 仮想マシン前提のノウハウとかあんのかな
69 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 22:59:47.25 ] >62 職場の先輩が昔受けた仕事で 「数値直接使用禁止。必ず#define登録しろ。」 というルールがあったとか言われた。
70 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 23:32:10.95 ] CRとLFとどっちが好きかって聞いてるんだよ。
71 名前:デフォルトの名無しさん [2012/07/20(金) 00:33:50.19 ] #define N 100と int N=100 の違いって何よ
72 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 00:52:20.15 ] >>71 #define N 100は、デバッグ時に確認できない。 あと、グローバル変数では無いけれど、それと同様に扱える。 まぁ、定数というところ。 int N=100は、あくまでint型のNを100で初期化したもの。
73 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 00:56:53.23 ] 初期化なんて言うけど、自動変数ならルーチン入るからけっきょくは代入だろ。
74 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 01:09:16.79 ] 左辺値になれない 左辺値になれる
75 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 01:36:48.72 ] 真正右翼のヒロイン登場『大日本サムライガール』 news.nicovideo.jp/watch/nw314727 「真正なる右翼は、日本に私ただ一人である。有権者諸君、我が国は今、大きく舵を切るべき瞬間を迎えている。 日本が取れる指針はもはや少なく、残された時間には猶予もない。」 いきなり何だと思われたかもしれませんが、これは大日本サムライガールという小説のヒロイン、 神楽日毬(かぐらひまり)ちゃんの決め台詞なのです。 いや、決め台詞というのもふさわしくないか。街頭演説の時の前口上なのです。 何ともすごい小説が出てきました。この本は真に日本を憂うあまり、自らが独裁政権を敷くしかないという結論に達した 真正右翼の16歳の美少女ヒロインと、そんなヒロインを陰に日向に支える主人公織葉颯斗(おりばはやと)くんのお話なのです。 news.nicovideo.jp/photo2/229868l.jpg 『大日本サムライガール』至道流星/星海社FICTIONS この表紙の少女が神楽日毬ちゃんです。手に持っているのは愛用の拡声器「拡さん」。 この少女が、政治の頂点を目指すために、アイドルとして芸能界の頂点を目指すのです!
76 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 07:26:51.08 ] ネトウヨ・ニュース、ネタが尽きたのか。
77 名前:46 [2012/07/20(金) 09:06:19.29 ] >>48 >>49 >>50 ありがとうございました。 またすこし自分で考えて見ます。
78 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 09:13:39.82 ] ―Daily Mail(英)― 情報筋によると、イギリスの運輸省は、ロンドンと主要都市を結ぶ高速鉄道に使用される車輌の製造において、 日立製作所グループとの交渉が最終段階に入っていることをオリンピックの開会前に正式に発表する予定だといいます。 それによると、イギリスのファースト・グレート・ウェスタン・レール社は、2016年までに、500台の車輌を日本から輸入。 車輌はほとんどが広島県の日立製作所笠戸事業所で組み立てられるため、イギリスの評論家たちは 製造費10億ポンド(約1,230億円)にも及ぶ雇用機会をみすみす失ったと政府を批判しているということです。 これに対して(海外に流出できない)独自の高価な技術を使用するためと、日本国内での車輌の製造を譲らなかった 日立製作所笠戸事業所長の正井健太郎氏は「車輌の製造に関われる誇りを感じます。 安全と信頼性に長けた日本のテクノロジーで製造された車輌は、 乗客に対してもスムーズな乗心地を感じてもらえることでしょう」と述べています。 chiquita.blog17.fc2.com/blog-entry-6607.html
79 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 10:05:40.16 ] >>58 POSIX C言語 ぐぐれ
80 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 10:23:20.40 ] Cがいい。Javaがすき
81 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 10:40:09.79 ] わたしはperl! perlなの! perlがイイ!!
82 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 10:52:04.65 ] Java は unsigned がないから嫌ぽ
83 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 19:29:40.09 ] プログラミング初心者です。 現在、「C言語超入門―Windowsでゲームボーイのプログラムを作ろう! 」を使って勉強しています。 この本を最初の教科書として、学び始めました。次に読む本として何が良いかアドバイスをお願いします。 ゲームボーイに絡めて勉強したらモチベを保てるのではないかと思い、この本から始めました。 専門学校に通っているわけではなく、独学でやっています。 皆さんのお勧めの入門書を教えてください。
84 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 19:31:22.75 ] windowsゲームプログラミング/赤坂 玲音
85 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 20:41:36.44 ] B.カーニハン先生の 「プログラミング作法」 〜書法、の方じゃないから注意な。
86 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 21:52:31.68 ] Z80
87 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 22:24:03.18 ] つーか、ゲームボーイは逆に大変じゃないか? GBAとかの方が楽な気がする。
88 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 22:32:23.11 ] 「C言語超入門―Windowsでゲームボーイのプログラムを作ろう! 」 いやこの本は凄く分かりやすい 200ページちょいしかなくて、俺が初心者だった大学1年の頃にすらすら最後まで通読できた 絶版でもう売ってないんだけどマジ良書
89 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 22:41:05.15 ] ゲームボーイ用のコンパイラとかカセット用意すんの大変じゃない?
90 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 22:45:03.68 ] うん
91 名前:デフォルトの名無しさん mailto:sage [2012/07/21(土) 05:20:06.22 ] GBDKとemuでええんでないの
92 名前:デフォルトの名無しさん mailto:sage [2012/07/21(土) 06:39:57.92 ] うん
93 名前:デフォルトの名無しさん mailto:sage [2012/07/21(土) 08:35:15.11 ] 韓国のコミュニティサイト「ポムプ」の掲示板に「日本ビールがおいしくなければならない理由」とのスレッドが立てられたところ、 さまざまな意見が寄せられた。 スレ主は、日本の食文化について言及し、日本では食に対するこだわりが深い人が多く、製菓技術や製パンは世界に誇れる水準であり、 ビールも同様に世界で認められているものの一つだと述べた。一方、韓国産のビールはまだまだ改善の余地があり、 新規参入による市場の拡大が望まれると指摘した。 スレッドにはスレ主に対して同意し、日本の食文化について称賛する声が多数並んだ。 ・「日本は食文化、特にグルメへのこだわりがすごいと思います。外国の食文化を受け入れ、百年以上の探求を経て、 トップレベルにした。ビールも同じ」 ・「率直にいって、日本の食べ物はおいしいものばかり」 ・「日本は、国内市場があまりにも大きい。それに比べ、わが国の内需市場はすかすか」 また、韓国内のビールメーカーなどを批判する声もみられた。 ・「韓国のビール会社のマインドは最悪」 ・「韓国ビールは日本でいえば、ビアテイスト飲料」 ・「わが国のビールは日本では発泡酒。ビールと呼ばれること自体、恥ずかしくなる粗雑なもの」 むしろ、北朝鮮のビールの方がおいしいのではといった発言も見られ、韓国人がビールに対して高い関心を寄せている様子がうかがえる。 ・「聞いた話だが、北朝鮮のビールの味が韓国産のビールの味よりいいらしい。技術的な問題ではなく、制度や材料が大きな違いをもたらすのでは」 ・「わが国のビールがまずい理由は、小規模な醸造所の法的な問題から構造の問題までたくさん。北朝鮮のビールと韓国のビールは、簡単に比較できません」 (編集担当:李信恵・山口幸治) news.searchina.ne.jp/disp.cgi?y=2012&d=0719&f=national_0719_018.shtml
94 名前:デフォルトの名無しさん mailto:sage [2012/07/21(土) 11:12:10.40 ] エミュ厨かよ
95 名前:デフォルトの名無しさん [2012/07/21(土) 17:54:29.48 ] scanfがうまく入力できません なんでですか? ideone.com/R8do8#ul_inouterr
96 名前:デフォルトの名無しさん mailto:sage [2012/07/21(土) 18:13:26.45 ] _____ /ミミ\\\\ \ /ミミミ\\\\\\\ /彡ミミミ\\\\\\\\ |彡ミミ/\\\\\\\\| |彡 | \\\\\\\| ヽ |へ、_ _,へ\\\\/ | __ __ | / ) gets() | |/ ノ | ( / _ ) / おひさしぶりーふ ヽ ヽ | ヽ ヽー‐‐‐ァ /\ //ヽ ヽ-‐' / /\ \ / / ヽ_ / / / \ / \ |\ /| /\ \ (⌒\ / (⌒ヽ |二| | / \ \ __ゝ ヽ ___ ゝ \ \| / / | ( ヽ─ ( l ) ヽヽ / / / |  ̄ ̄( ̄丿 |  ̄ ̄( ̄ ゝ \ / / | ( ̄ノ | ( ̄ ゝ | ̄ ̄ ̄ ̄ | ( ̄ノ | ( ̄ ゝ |
97 名前:デフォルトの名無しさん mailto:sage [2012/07/21(土) 18:24:39.22 ] >>95 このプログラムいつ終わるの?
98 名前:デフォルトの名無しさん [2012/07/21(土) 18:36:40.89 ] おわらないよ
99 名前:デフォルトの名無しさん mailto:sage [2012/07/21(土) 19:50:05.70 ] ネヴァー・エンディング・プログラミング 第一章 〜彼方への旅立ち〜
100 名前:デフォルトの名無しさん [2012/07/21(土) 20:50:30.43 ] 諦めたら
101 名前:デフォルトの名無しさん [2012/07/21(土) 20:52:34.13 ] やたああああああああああああ ideone.com/QkwnG
102 名前:デフォルトの名無しさん mailto:sage [2012/07/22(日) 10:16:31.58 ] 米国 「今のままなら朝鮮戦争が再開しても、日本は韓国に協力せず、無視することができる」 hayabusa3.2ch.net/test/read.cgi/news/1342918828/ 韓国が日韓軍事協定を破棄したことで生じた問題 両国間協力の座礁は、オバマ政権だけでなく、ブッシュ政権で 北東アジア政策を担当した筆者にとっても大きな失望だ。 韓日間の安保協力が突然、暗礁に乗り上げた。 最近問題になった情報交流協定のためだ。 また最近、日本の政治は右傾化し、日韓共同防衛協力を抜け出して日本独自に動こうとしている。 マイケル・グリーン米戦略国際問題研究所(CSIS)日本室長 . 2012/7/21 japanese.joins.com/article/994/155994.html?servcode=100§code=140
103 名前:デフォルトの名無しさん mailto:sage [2012/07/22(日) 10:24:28.29 ] なげーーーーーーーーーーーーーーーーーーーーーーーよ 変数wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
104 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 02:32:29.46 ] quin2decが手元の参考書に載ってない上にぐぐっても出ないんですが、 これはどういった働きをするんでしょうか?
105 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 03:55:40.74 ] >>104 見たこと無いのだが。 というか、それはどこに出てきたのでしょうか。 ただ、よくあるパターンとしては EXCELの関数では bin2decとかhex2decとかoct2decで 2進数だったり、16進数だったり、8進数だったりを10進数に変換する。 んで、そういう機能をC言語でする場合、 そのような名前の関数を作る事がある。 (ユーザ関数なので、名前はなんでも良いんだけど。) そのパターンで考えると quin → quintuple → 5倍 で、多分5進数を10進数に変換する関数っぽいけど、 所詮、ユーザ関数だから正しくは分からない。 もちろんquinさんを10進数に変換するとも考えられる。
106 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 04:33:50.43 ] >>105 おお、ユーザー関数なんてものがあるのですか。 通りで検索してもでてこないわけだ。 おっしゃる通り五進法を十進法に変換せよ、という問題で出てきました。
107 名前:デフォルトの名無しさん [2012/07/23(月) 05:36:56.10 ] 宿題スレでコードを書いたいただいたのですが、調べながらコードを見ていても理解できない部分が 多々あったので質問させてください。 問題文 ideone.com/WnbTA コード codepad.org/nqyygUO9 ・#define N 1024は何を意味しているのか ・quin2decが引数として文字を4つ受け取っているのはどこか ・どこで戻り値として返しているか ・受け取る五進数は4桁以下の非負正数(十進法の0〜624)であると仮定する、とありますが どこで仮定されているのか、あるいはもし仮定されていないならどうすれば良いか ・static char buff[N]; が何を意味しているのか 宿題スレでコードを貰っておきながらこちらで聞くのもどうかと思うのですが、 どうしてもわからなかったのでこちらで質問させていただきました。 よろしくお願いします
108 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 06:02:51.71 ] >>94 gameboyはbios用意しなくていいから問題ないっしょ
109 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 07:03:35.31 ] >>107 まぁ、マニアックなコードだな。 質問>・quin2decが引数として文字を4つ受け取っているのはどこか 問題文>4つの文字を引数として受けとる 確かに単文で見た場合、 「4個の(文字を)引数として受け取る」と読めなくもないが、 「4種類の文字を引数として受け取る」とも読めるし、「4桁の文字を引数として受け取る」とも読める。 それぞれの返答は ・quin2decは4種類の文字(列)を1つ受け取る。 ・コード内で4桁に制限してる箇所は・・・ないね。問題文でも4桁以外の桁数だった場合どうするとか書いていないから、 コードを書いた人が、プログラムの前提条件として受け取ったんだろうね。 ・4種類のチェックを行っている部分は switch文 質問>どこで戻り値として返しているか これは「戻り値」を返す方法は勉強している(もしくは教科書に書いてある)と思う。 返答としては31行目のreturn文なんだけど、再帰呼び出し(ある関数の中で、自分自身(の関数)を呼び出してる)をしているからイメージ沸きにくいかもね。再帰呼び出しで調べてね。 質問>・受け取る五進数は4桁以下の非負正数(十進法の0〜624)であると仮定する、とありますが・・・ 受け取る文字列の種類として負を表す文字自体がなく、「r,h,f,m,y以外の文字を受け取ったらエラーとする」ので気にしなくて良いと思う。 質問>・#define N 1024は何を意味しているのか 質問>・static char buff[N]; が何を意味しているのか Nを利用している箇所は static char buff[N]; と fgets(buff, N, stdin);の二ヶ所である。 問題文では「キーボードから文字列として受け取り」とある。 受け取る領域(入れ物)が必要である。static char buff[N];はそれを用意している。その際、領域の大きさ(N)を何かしら決める必要がある。 問題文としては「4桁の5進数」とあるから、4文字分+(改行コード分またはnull終端分)が必要最低限なのだが、 「4文字以上の文字列を受け取らない」とはあるが、キー入力される文字数は制限されていない。 そうした場合、十分な大きい値(1024)を用意したという事だと思う。 #define とは何かという質問だったら、教科書調べてね。 長いね。
110 名前:デフォルトの名無しさん [2012/07/23(月) 07:41:35.79 ] >>109 長々と説明ありがとうございます、おかげさまである程度理解ができました。 ただ、引数に関してがイマイチわからないのですが、単純に引数として受け取ってるのは y,m,f,hであり、swich文で入力した文字がそれに該当してるか調べてcaseで分けているということなんでしょうか? 戻り値については早速再帰呼び出しで調べて学習してきます。 #define文自体は調べて理解していたのですが、1024という数字の意味が理解できていませんでした。 領域の大きさを決める数字と聞いて納得できました。
111 名前:109 mailto:sage [2012/07/23(月) 08:24:22.91 ] >「4種類の文字を引数として受け取る」とも読める あ、そもそも5進数だし、「r,h,f,m,y」と書いてあるのだから、5種類の文字だね。。。あほだ。。。 >>110 私が質問の意図を理解していないから上手く説明できてないのだね。 >・quin2decが引数として文字を4つ受け取っているのはどこか 「quin2decが4つの引数を受け取っていない事を疑問に思っている」と読み取って良いかな? int quin2dec(char *s, int n) それに対する返答は「4桁の文字列として、一つの引数(s)を受け取っている」から。 ただし、実際には、コードは桁数(4桁以内である事)のチェックはされていない。「なぜチェックしていないのか」は、 多分、「問題文に桁数が不正の場合、どうするのか」が指定されていないからだと思う。 まぁ、もちろん 「int quin2dec(char a,char b,char c,char d)」として4つ受け取ってもコードを書いても良いのだけど。 ただ、こうした場合、3桁の文字が入力された場合、困るかな。 あ、「受け取った4文字中r,h,f,m,y以外の文字が一文字でも含まれた場合エラーメッセージを出してプログラムを終了する。」 quin2decが「r,h,f,m,y」以外の文字を受け取っちゃいけないとは、書いてないからいいか。 まぁ、C言語と言うより、「4つの文字を引数として受けとる 」の問題文の解釈の話のような気がする。 「引数を4つにしないといけない」と読むか、「引数を4桁の文字列として受けとれば良い」と読むか。 とんちんかんな回答かな?
112 名前:109 mailto:sage [2012/07/23(月) 08:36:19.66 ] >>110 あ、ちょっと勘違いしてそうなんで補足 >戻り値については早速再帰呼び出しで調べて学習してきます。 「再帰呼び出し」と「戻り値」は直接は関係ないよ。 「再帰呼び出し」がどういう動きをするかを勉強した方が良いよ。 で、「再帰呼び出し」をした結果、それぞれの「戻り値」がどうなるか、がややこしい(かも)。 と言うことね。 まぁ、これは、地道にそれぞれのステップを追って(プログラムが動いている順番を追って)、 その時の変数や戻り値がどうなっているかを書き出してみるのが確実だよ。
113 名前:デフォルトの名無しさん [2012/07/23(月) 08:40:54.94 ] >>111 わざわざありがとうございます。 私の知識が足りないので何を疑問に思っているのかが上手く伝えられていないんだと思います。 おっしゃる通りquin2decが4つの引数を受け取っていないのが疑問でした。 私の手元の参考書と比較するとquin2dec(char *s,int n)の*sとnを仮引数として受け取るのかな、と考えたのですが それだと仮引数が2つだけで、私は「引数を4つにしないといけない」と捉えたので2つ足りない事に疑問を感じていました。 分かりにくい質問だらけで申し訳ないのですが教えていただけるとありがたいです
114 名前:109 mailto:sage [2012/07/23(月) 09:41:20.81 ] >>113 このコードで、引数(s)と、引数(n)とはそれぞれ何を表しているのか。ということですね。 すんません。quin2decについて、真っ当に追ってないから、引数(n)ついて、きちんと理解してません。 っていうのが正直な所です。 ちょっと気合を入れて動きを追ってみましょう。 7行目の if ( !s || !*s ) return n; !s は s==0と同じ意味、sは(char *)だから sのアドレスが0だった場合(実際には、後述する「r,h,f,m,y以外」の文字だった場合) !*s は *s == 0と同じ意味、 sのアドレスが指しているcharの値0の場合だから、null終端だった場合 どちらかの場合、引数(n)をそのまま返す。 11-27行目のswitch文 switch文の引数は*sだからアドレスsの指しているcharの値を指している。 case 'y'からcase 'r'まで、break;がないから、該当した文字列以下の文は(break;まで)すべて実行され、switch文を終える。 よって、yだったら14,16,18,20行目が実行されるので m==4となる。 同様に fだったら、18,20行目が実行されるので m==2となる。 r,h,f,m,y以外だったらdefaultまで行き m== -1となる。
115 名前:109 mailto:sage [2012/07/23(月) 09:41:38.76 ] (続き) 29-30行目は まず m が 0以下という事は前のswitch文で「r,h,f,m,y以外」と言う事 その場合、30行目が実行される。 その時 引数(0,-1)でquin2decで再帰呼び出しされ、その戻り値が returnされているので、自分の戻り値となる。 で、再帰呼び出しされたquin2decでは7行目に引っかかるから、無条件に -1が帰ってくる。 (ということは 30行目は return -1;と記述しても問題ないような気がする。) 31行目は引数(s + 1, 5 * n + m)でquin2decで再帰呼び出しされ、その戻り値が returnされているので、自分の戻り値となる。 s + 1 は、sの次のアドレス(隣の文字のアドレス)にして quin2decに渡している。 注:再帰呼び出しされたquin2decの引数(s)が、自分の引数(s)の次のアドレスとなっている。 5 * n + m は 受け取った引数を5倍しているから、繰り上げ処理をして mを足している。 ふんふん、なるほど。それを繰り替えして、最後の桁まで行ったら、その戻り値が、呼び出し元に上がってくる訳か。 つまり、quin2decは引数(s)上から一文字ずつ処理して、引数(n)は、そのけた時点での十進数の値ということですね。 で、それを最終桁まで繰り返している。 自分だけが納得しているような気がする・・・。
116 名前:109 mailto:sage [2012/07/23(月) 09:46:03.32 ] >まず m が 0以下という事は前のswitch文で「r,h,f,m,y以外」と言う事 あ、0未満だね。
117 名前:107 mailto:sage [2012/07/23(月) 10:28:54.36 ] 細かい説明本当にありがとうございます。 じっくり読んでquin2decが受ける引数について理解できました! それだけでなく、あやふやで理解したつもりになっていたところも 説明を読んでいるうちに大分しっかりと理解できました。 せっかくの機会なので34-42行目のところも教えていただけないでしょうか? 理解した「つもり」だらけだったので、ここも見当違いな考えになっていそうです。 何だか結局全部丸投げみたいになってしまい申し訳ないのですが、よろしくお願いします
118 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 11:09:06.06 ] >>117 途中見てないが、chop()についてだけ。 目的: 引き数で渡されナル終端文字列の後方にある改行文字をchopする。 詳細: ・ナル終端文字を見つける。 ・一つ遡る。 ・その場所の文字が改行文字(或いは復帰文字)であればナル終端を書き込み、一つ遡る。 以上。
119 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 11:18:50.03 ] void chop(char * s) { char * p = strchr(s, '\0'); for (--p, p >= s && (* p == '\n' || * p == '\r'); --p) * p = '\0'; }
120 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 11:22:00.32 ] >119を書いて気付いたんだが、>107のコードは何も入力せずに入力を閉じるとバグるな。
121 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 11:55:59.51 ] >>118 ありがとうございます。 頑張ってみます
122 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 11:59:49.68 ] いえいえ
123 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 12:17:34.50 ] あっそーれ
124 名前: ◆QZaw55cn4c mailto:sage [2012/07/23(月) 12:21:29.66 ] >>109 俺のコードをよくもマニアックといったな。慰謝料にモリタポ払え
125 名前: ◆QZaw55cn4c mailto:sage [2012/07/23(月) 12:30:13.15 ] >>120 ご指摘感謝。 何も入力しないといっても、エンターキーのみの入力という意味なら、\r, \n がバッファに載るのでほとんど問題ないでしょうが、 しかしバッファの直前がたまたま \n, \r だったりすると、確かにバグりますね。 以下に修正しておきます。 codepad.org/k8fng7Hh
126 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 12:47:06.48 ] 何も入力しないってのはCTRL-Dのことだろ 的はずれにもほどがある
127 名前:109 mailto:sage [2012/07/23(月) 13:28:09.19 ] >>124 あ、本人? 勝手にコード解説しちゃって、ごめんね。 行間まで、思い込みで解説しちゃったから、 解釈の間違いあったら、正しといてください。 きっと、間違っているから。
128 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 13:34:07.13 ] なんだ、QZコードだったのか。納得。
129 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 14:31:44.81 ] 0.1次元バーコードか?
130 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 15:53:44.74 ] えィ
131 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 17:36:21.47 ] #define NULL ((void *)0) あるポインタをNULLで初期化すると、そのポインタはメモリ上の絶対アドレスである0番地を指すということなのでしょうか
132 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 17:42:33.91 ] >>131 0番地はワイルドカード。
133 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 17:46:25.38 ] 環境による としか言い様がない気分
134 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 17:49:08.12 ] 通常アドレスは仮想化してるから実際は指してないし参照できない
135 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 18:00:30.39 ] ttp://support.microsoft.com/kb/76945/ja 意味不明な日本語だけどMS-Cではプログラム終了時にNULLセグメントを調べて そこのデータが書き換えられていればエラーとした
136 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 18:05:41.86 ] 仮想記憶のない時代の話だな。
137 名前: ◆QZaw55cn4c mailto:sage [2012/07/23(月) 18:28:00.53 ] >>127 丁寧に解説いただき恐縮です。 > 30行目は return -1;と記述しても問題ないような気がする。 これは確かに。return 文を一箇所にしたいという意思だが、そのために if (!s || !*s) と複雑になってしまったので、どっちでかいても一長一短。んー。 >>128 んー、なにを納得したのかおしえてください。匂いますか、いや臭いますか?
138 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 18:35:30.76 ] ttp://ideone.com/d8x39 とシンプルに書けばいいのに再帰使ってソースを読みにくくしてるところ
139 名前: ◆QZaw55cn4c mailto:sage [2012/07/23(月) 19:17:48.17 ] え?再帰の方がよみやすいのですが?これって主観ですかね。
140 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 19:26:00.65 ] 隙あらば再帰にしてしまう→再帰ッカー 他にもCゲンガー、フォートランナー、コボラーなど
141 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 19:27:49.63 ] 2,3のコードがあげられてて そのうちの再帰使ってるのが「わからん」ちゅーなら 初心者やらにはワカランのだろ 強力だけれども面倒くさい、 とくにその手の初心者には 誰かにとっては読みやすくても、 ここら辺りで宿題出したり聞いたりする人物のレヴェルも考える 普通なら ね
142 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 22:52:42.03 ] すみません、どうしても解答がわからないのですが... 問.関数、void addlist(LIST *head,LIST *addata)を完成させろ #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct name_list{ struct name_list *next; char *name; }LIST; void addlist(LIST *head, LIST *addata); int main(void){ LIST name0= {NULL, NULL}; LIST name1= {NULL, "B"}; LIST name2={NULL, "C"}; LIST name3={NULL, "D"}; LIST name4={NULL, "E"}; LIST addata = {NULL, "A"}; LIST *p; LIST *head; head=&name0; name0.next=&name1; name1.next=&name2; name2.next=&name3; name3.next=&name4; addlist(head, &addata); for(p = head->next; p != NULL;p=p->next)printf("%s\n,p->name"); どなたかお願い致します....(ノД`)
143 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 22:53:49.68 ] あ、一番下に return 0; } を忘れてました...
144 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 22:57:15.17 ] >>1 読むのも忘れてんぞ
145 名前:>>142 mailto:sage [2012/07/23(月) 22:59:04.90 ] >>144 ごめんなさい これは過去問でして、明日試験なんですけど聞ける友達がいない.... C言語です
146 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 23:00:32.52 ] リストの末尾に追加かね void addlist(LIST *head,LIST *addata) { LIST *p = head; while (p->next) p = p->next; p->next = addata; }
147 名前:デフォルトの名無しさん [2012/07/23(月) 23:04:27.30 ] PICマイコンを使用するためにC言語を勉強中です。 どうしてもプログラム中に、EEPROMへの読み書きを多用するので int型とlong型用の2つの値をEEPROMから読み込み、int型long型のそれぞれの変数へ代入する関数を作ったのですが、ポインタの使い方がよくわかりません hiとかloというのは2バイト以上の変数を1バイト単位に分割するために使用する”built_in.h”というヘッダファイル用の語句です このコードの何がダメなのかも分らないのでご教授ください よろしくお願いします void main() { int x; long y; read2byte(100,&x); read4byte(200,&y); } void read2byte(int a,int *b) { hi(*b) = EEPROM_Read(a); lo(*b) = EEPROM_Read(a+1); } void read4byte(int a,long *b) { highest(*b) = EEPROM_Read(a); higher(*b) = EEPROM_Read(a+1); hi(*b) = EEPROM_Read(a+2); lo(*b) = EEPROM_Read(a+3); }
148 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 23:10:09.88 ] >>147 バイトオーダーが違うかもしれない くらいしか分からん
149 名前:147 [2012/07/23(月) 23:11:54.31 ] 書き忘れました EEPROM_Read(a); というのはコンパイラ付属の関数で、aがEEPROMのメモリアドレスです