[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 07/05 16:55 / Filesize : 216 KB / Number-of Response : 952
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門編)Part 104



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/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

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のメモリアドレスです

150 名前:>>142 mailto:sage [2012/07/23(月) 23:14:59.54 ]
>>146
そもそもこのプログラムって何をしているものなのでしょうか....?
ソート?


あと、for文の上の
addlist(head, &addate)というのは何なのですか?

151 名前:片山博文MZボット ◆0lBZNi.Q7evd [2012/07/23(月) 23:18:05.21 ]
hi,loの定義をさらせ。
hi(*b)は左辺値ではないから代入できないと思われ

152 名前:147 [2012/07/23(月) 23:23:18.80 ]
>>151

2バイト以上の値、例えばlong型(4バイト)を低いビットからlo,hi,higher,highestとバイト単位に分割するものです


153 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 23:26:02.62 ]
>>150
うんにゃ
わたされた head から末尾を探し出して、その末端にさらに 渡された adddata を繋げてる

name0〜name4 までのリストを手で構築後
adddata 関数を呼び出してる

意図として name0〜name4 の後ろに adddata を連結しようとしてる と俺は解釈した

154 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 23:29:09.93 ]
× adddata 関数を呼び出してる
○ addlist 関数を呼び出してる



155 名前:>>142 mailto:sage [2012/07/23(月) 23:30:02.40 ]
>>153ご丁寧にありがとうございます

このプログラムはAがname0に入るわけでは無いんですか??

addataがname4の後に連結した時、whileが初めて回りだしてAが先頭に来るって事ですか?

やばい日本語おかしくてスミマセン

156 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 23:36:07.74 ]
printf() の出力結果は BCDEA の予定
ABCDE にしたいのなら

void addlist(LIST *head,LIST *addata)
{
 LIST *p = head->next;
 head->next = addata->next;
 addata->next = p;
}


157 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 23:36:41.10 ]
>>142
厳しいようだけど、
明日試験で、過去問で解答が分からない。ってのは
解答を教えても、明日の試験では違う問題がでるから意味が無いのでは?
解き方が分かっていないんだから。

このプログラムは、addlistが不明なのだが、明示されてるのだから、
そこを理解する所から、入るべき。
(まさしく >>150 の疑問を理解できる様になる事が大事)

それから、足りない部分(addlistの中身)を考える。

158 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 23:37:14.59 ]
× head->next = addata->next;
○ head->next = addata;

なんかヒデェな… もう寝る

159 名前:157 mailto:sage [2012/07/23(月) 23:39:14.48 ]
>このプログラムは、addlistが不明なのだが、明示されてるのだから、そこを理解する所から、入るべき。
まつがい。
このプログラムは、addlistが不明なのだが、明示されている所を理解する所から入るべき

160 名前:>>142 mailto:sage [2012/07/23(月) 23:40:52.16 ]
レス下さった皆さんありがとうございます
そもそも一晩(ではないんですけども)でやろうとした自分が悪いですね...

少し前の方から再度勉強しなおしてきます...
ありがとうございました!

161 名前:片山博文MZボット ◆0lBZNi.Q7evd [2012/07/23(月) 23:41:19.46 ]
*b = ((int)EEPROM_Read(a) << 8) | (int)EEPROM_Read(a+1);

*b = ((long)EEPROM_Read(a) << 24) | ((long)EEPROM_Read(a+1) << 16) | ((long)EEPROM_Read(a+2) << 8) | (long)EEPROM_Read(a+3);
みたいに書かないといけない。

162 名前:デフォルトの名無しさん mailto:sage [2012/07/23(月) 23:47:27.06 ]
>>147
君はまだEEPROMを使うべきではない(きり)

163 名前:片山博文MZボット ◆0lBZNi.Q7evd [2012/07/23(月) 23:58:54.84 ]
共用体を使う方法もある。
union I16{int i;
struct {unsigned char LO,HI;}};
union I32{long l;struct {I16 LO,HI;}
};


164 名前:片山博文MZボット ◆0lBZNi.Q7evd mailto:sage [2012/07/24(火) 00:14:51.03 ]
久しぶりにCやったら;とunionをつけ忘れたよ



165 名前:147 [2012/07/24(火) 00:26:01.62 ]
>>161
レスありがとうございます。

その式と、下記の式だと自分には同じ動作だと思ってしまうのですが
何がどう違うのでしょうか?本当にわからないです><

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);
}



166 名前:デフォルトの名無しさん mailto:sage [2012/07/24(火) 00:29:04.57 ]
>>165
hi とか lo がどんなものか分からないからこうしようぜ

void read4byte(int a, long *b)
{
unsigned char *p;
p=(unsigned char*)b;
*(p+0)=EEPROM_Read(a+0);
*(p+1)=EEPROM_Read(a+1);
*(p+2)=EEPROM_Read(a+2);
*(p+3)=EEPROM_Read(a+3);
}






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<216KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef