- 1 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 20:41:54 ]
- C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 130代目 pc12.2ch.net/test/read.cgi/tech/1250204272/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 53 pc12.2ch.net/test/read.cgi/tech/1253110182/ 過去スレ 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
- 4 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:06:04 ]
- %g 推奨。
- 5 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:24:06 ]
- >>3
なるほど ありがとうございます それと、もう少し教えて欲しいのですが float型は有効小数点桁数6桁、double型は有効小数点桁数8桁と本に書いてありました。 >>2の場合 double pai=3.14159265358979; としているからdouble型だけど%fだから小数点以下6桁までの出力なのでしょうか? float型とdouble型の違いは扱える実数の範囲が違うっていう認識しかないのですが… よく解っていなくて質問がおかしいかもしれません、申し訳ないです
- 6 名前:2 mailto:sage [2009/10/06(火) 21:34:02 ]
- 名前にレス番号入れてませんでした、すいません
>>4 これは便利だ %fと%eの両方の性質を持つみたいですね ありがとうございます
- 7 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:59:27 ]
- >>5
有効桁数以上に出力することはできるけど 有効桁数以上の意味は無い あと一般的な有効桁数は double が 15桁、 float が 7桁で 浮動小数点型には有効小数点桁数なんてものは存在しない 頭から15桁目まで(float なら 7桁目まで)が信頼できるだけ
- 8 名前:2 mailto:sage [2009/10/06(火) 22:12:08 ]
- >>7
なるほど、ようやくすっきりしました 重ね重ねありがとうございました
- 9 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:14:29 ]
- codepad.org/cNArrdrY
↑ 何も出力されませn。どこが間違ってるのでしょうか?
- 10 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:22:29 ]
- >>9
4096*1024*1024 == 0 ???
- 11 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:25:48 ]
- >>9
4096*1024*1024 がオーバーフローしてるっぽい。 4096LL*1024*1024 にしたら表示された。
- 12 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:40:08 ]
- >>9
オーバーフローだろそりゃさすがに。 int型じゃなくてlong longにしてごらん。
- 13 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 12:25:00 ]
- long long ago
- 14 名前:デフォルトの名無しさん [2009/10/07(水) 15:46:11 ]
- 質問です
pointer がどちらに渡って居るのかが いまいち理解できません /*次の関数を改良せよ*/ int smaller(char *s, char *t) { if (strcmp(s, t) < 1) return 1; else return 0; } と 為っているのですが お願いします
- 15 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 15:59:06 ]
- >>14
質問の意味が分からない 改良という意味では仮引数に const をつけるくらい return (strcmp(s, t)<1); とするのはちょっと嫌
- 16 名前:デフォルトの名無しさん [2009/10/07(水) 16:12:48 ]
- >>15
確かに嫌です… if (const(strcmp(s, t) < 1)) return 1; ... と 云う事でしょうか?
- 17 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:15:43 ]
- いやまずは>>14の2行目が いまいち理解できません です。
- 18 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:21:13 ]
- それは strcmp がわからないという意味か?
調べてみたか?
- 19 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:27:47 ]
- >>18
> pointer がどちらに渡って居るのか ここが理解できたおまえさんはすごいよ。
- 20 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:35:26 ]
- strempが1以下ってどういうこった?
- 21 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:39:41 ]
- 1以下じゃないだろ
1未満、つまりゼロかマイナスということだ
- 22 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:41:05 ]
- int a=0,b=0,c=0;
って意味のことを書きたい時まとめて書く方法はありませんか?
- 23 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:42:05 ]
- >>21
strcmp(s,t) <= 0 こうするんじゃないの?
- 24 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:46:42 ]
- >>22
ありません >>23 同じだからどっちでもいいよ分かりやすい方を使えば
- 25 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:46:42 ]
- >>14 の
> pointer がどちらに渡って居るのかが いまいち理解できません 分かる人はこれの意味を解説してくれよ
- 26 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:44:12 ]
- >と 為っているのですが お願いします
もなかなか。
- 27 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:48:26 ]
- >>24
でもまぁ、0と比較するほうがコストの低いコードになる可能性もあるし、 そもそも大小を変更するときに間違う恐れもあることだし、1との比較は避けるべきだな。
- 28 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:03:19 ]
- >>14
日本人とは思えない日本語だな。 ここはC言語の入門スレではあるが 日本語の入門スレではないぞ?
- 29 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:04:40 ]
- www.dotup.org/uploda/www.dotup.org230741.jpg
コンパイルできません。 どこが間違っているのでしょうか?
- 30 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:06:53 ]
- >>29
jpg とか馬鹿じゃねーの? エラーメッセージくらい嫁クズ
- 31 名前:tax mailto:sage [2009/10/07(水) 18:11:29 ]
- >>29
間違っているのはお前の頭。
- 32 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:14:09 ]
- float tax calcTax(int i)
が違っているのではないだろうか
- 33 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:15:28 ]
- >>29
codepad ttp://codepad.org/ ソースを貼るときはここへ! だがそもそも、お前みたいな頭にバグのある輩は C言語やるな。 エラーメッセージ嫁!!!!
- 34 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:22:37 ]
- 演算子の優先順位について質問です
以下の式はなんで真にならないのでしょうか? (sizeof(short) + 1) > -sizeof(short)
- 35 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:23:14 ]
- >>34
unsigned だから
- 36 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:32:13 ]
- よく読まずに脊髄レスしてみる
× float tax calcTax(int i) ○ float calcTax(int i)
- 37 名前:デフォルトの名無しさん [2009/10/07(水) 18:33:26 ]
- >29
たぶん3行目の//コメントと5行目のtaxの所為だな 3行目 s/\/\/\(.*\)/\/*\1 *\// 5行目 5s/tax //
- 38 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:38:34 ]
- >>35
あー。なるほど。演算子の優先順位が原因と勘違いしてました 回答ありがとうございます
- 39 名前:デフォルトの名無しさん [2009/10/07(水) 18:52:37 ]
- すみません入門書を購入したいのですが
ソフトバンクから出ているので柴田望洋シリーズと林晴彦シリーズっていうのがあるみたいなのですが どちらがいいのでしょうか?
- 40 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:54:13 ]
- >>30,>>32,>>33,>>36,>>37
回答ありがとうございます 次回から質問する際はかならずソースコードを貼るようにします >>33さんのサイトを利用させていただくかもしれません ちなみにエラーメッセージは Declaration syntax errorで宣言構文エラーのようでした それでコンパイルが通らなかった理由は float tax calcTax(int i) に余分に「tax」が入っていたせいでした
- 41 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:54:59 ]
- ひでぇ、>31がちゃんと回答しているのに無視だぜ。
- 42 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:13:39 ]
- ・・・?
- 43 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:14:37 ]
- もう銅でも良くね>
- 44 名前:デフォルトの名無しさん [2009/10/07(水) 19:23:49 ]
- また明日も来ますね^^
- 45 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:24:28 ]
- おまちしておりますお
- 46 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:24:38 ]
- 名前欄に気がつかないというより
自分が見たくないレスが見えないんだろうな エラーメッセージも見たくないから見ないんだろうな
- 47 名前:デフォルトの名無しさん [2009/10/07(水) 19:32:07 ]
- >>15 >>17-28
レス どうも 日本語に対しては良く言われますw 日本人なのですが…
- 48 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:37:25 ]
- そんなやつたくさんいるからどうでもいいけど、文字だけでやりとりしたかったら、訓練してよん
- 49 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:43:18 ]
- これからやとうと思う人は普通本買う。
そして、ここは入門篇と書いてある。 本があるのに、こういうところで聞くということは、 本が悪い、理解できる能力がない、2chが好き…、検索しない などの理由だろうから、まともな人が来ないのは当然。
- 50 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:03:25 ]
- やっとうううううう!!!!
- 51 名前:デフォルトの名無しさん [2009/10/07(水) 20:03:57 ]
- >>49
以外に失礼ですね…
- 52 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:14:19 ]
- でもその通りだろ
- 53 名前:デフォルトの名無しさん [2009/10/07(水) 20:20:15 ]
- >>52
ひとつだけ plus 思考な物が在りますが? 自分に嘘をつけない type ですかw
- 54 名前:デフォルトの名無しさん [2009/10/07(水) 20:35:21 ]
- >>53 plus
因みに 私は違いますが…
- 55 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:36:18 ]
- 雇う
- 56 名前:デフォルトの名無しさん [2009/10/07(水) 21:06:17 ]
- >>47 plus
また お願いします
- 57 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 07:44:06 ]
- 最近この板にわいた日本人じゃない頭のおかしなヤツだな。
- 58 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 09:55:51 ]
- 日本人なら語尾はゴザルまたはアリンスのはず
- 59 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:10:05 ]
- きさま、日本人じゃないな!?
- 60 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:12:55 ]
- >>49
・本を買えないほど貧乏 ・プログラミング如きに1円たりとも使いたくない ・実はそれほどやる気がない
- 61 名前:デフォルトの名無しさん [2009/10/08(木) 10:20:00 ]
- 俺も書籍で学習するのが好きだけど
サーバ構築して遊ぼうと思っているから、しばらくは我慢。 貧乏学生でしゅ^^;
- 62 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:22:40 ]
- Cの入門書なんて2〜3000円で買えるだろ
- 63 名前:デフォルトの名無しさん [2009/10/08(木) 10:26:05 ]
- というか、技術書って無駄に高いの多くないか?
いや普通か。
- 64 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:26:43 ]
- "入門"ってどこら辺のレベルなんだろ
コンパイラの入手方法を知らない、辺り? ソースコードを書いてコンパイルすれば実行できることは知っている、辺り?
- 65 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:29:23 ]
- コンパイル環境がないのは入門以前だろw
- 66 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:34:15 ]
- for,while辺り
- 67 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:42:29 ]
- ifは結構理解しやすいじゃん?
やっぱループ教えるには先にifとgoto教える方が理解しやすいんじゃねのかな?
- 68 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:59:18 ]
- 俺的にはとりあえず
標準仕様のうち「簡単なもの」を一通り 使えるぐらいまでが入門じゃないかと。
- 69 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 11:00:04 ]
- >>67
どうせgotoは使うなって教えるんだから 最初からif, for, whileでいいだろ。 その後do-whileとgotoを教えて、gotoは極力避けろと教えればいい。
- 70 名前:デフォルトの名無しさん [2009/10/08(木) 11:35:50 ]
- sys/time.hが私のパソコンの中に入っていないのですが、
どうやったら手に入れることができるでしょうか?
- 71 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 11:37:21 ]
- まずLinuxを入れます
- 72 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 12:32:21 ]
- それはOS依存の部分だからなあ
Windowsで実行するにはCygwinを使えばいいんじゃね?
- 73 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 12:38:28 ]
- >>70
Linuxなりのソースから拾ってきてもいいし、Webで検索しても見つかると思う。 寧ろそんなことよりも、何故それが必要だと思ったのかを説明した方がゴールに辿り着けると思うぞ。
- 74 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:22:30 ]
- コンパイラBCC使っています。
char c='5'; printf("%x--%x",&c,*(int *)&c); とすると、結果が 12ff8b--12ffb835 となりました。 アドレスはいいとして、2個目がどうして12ffb835になるのか分かりません なんかアドレスの8bが逆になったのがくっついてるし・・・ やりたいのは、cの値をint*にキャストして表示したいということです
- 75 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:32:18 ]
- > やりたいのは、cの値をint*にキャストして表示したいということです
(int *)c こういうこと? *(int *)&c は cのポインタを int のポインタとして、指している場所に書かれている int 値
- 76 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:34:18 ]
- ・「cの値」は整数なので、ポインタにキャストすることはできない。
・cのポインタ、つまり&cをint *にキャストすることはできなくはないが、そのポイント先が安全と言う保証がないので未定義動作する。 ・その結果、2個目の%xで出力された16進数の下位2桁はどうやらたまたま'5'のアスキーコードのようだ。
- 77 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:38:55 ]
- >>74
12ffb8はスタックに残ったゴミで意味のあるのは35(='5')だけだ
- 78 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:41:05 ]
- >>76
>そのポイント先が安全と言う保証がないので未定義動作する。 キャストしただけなら問題ないが、キャストした瞬間に未定義動作ということだな。 >74の場合は落ちないようだが、環境によってはセグメンテーションフォルトで落ちるだろうし。
- 79 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:43:54 ]
- cのアドレスを受け取って、それをint*にキャスト
その後に、そのアドレスを基にして実際の値を取得したいということでした。 >>75-78 未定義動作なんですね 詳しい解説ありがとうございました。
- 80 名前:デフォルトの名無しさん [2009/10/08(木) 18:10:35 ]
- > ・「cの値」は整数なので、ポインタにキャストすることはできない。
アホ
- 81 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:40:00 ]
- そりゃまぁ、厳密にはキャストできないわけじゃないだろうけど、初心者がやるようなことじゃないよな。
- 82 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:06:40 ]
- 学校の課題を家でやるときテキストエディタで書いてBorlandさんにコンパイルさせてるんだけど
お勧めのエディタってある? スレ違いなら該当スレ頼む
- 83 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:18:08 ]
- そういえば前スレでlinuxの自動インデントのエディタを聞いた者だけど
普通にgeditの設定で出来た
- 84 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:38:54 ]
- >>82
秀丸エディタ。 初心者ならこれがぴったりだと思う。
- 85 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:40:41 ]
- >>82
BorlandならCpadが簡単操作でいいんじゃね?
- 86 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:53:19 ]
- >>84-85thx
とりあえずどちらもダウンロードしてきてしばらく使ってみる
- 87 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:09:16 ]
- 関数外で動的確保した領域のサイズを、ポインタを引数でもらうだけで知ることはできますか?
int func(int *pi) { int size; ... return size; } int main(void) { int *buf = malloc(16); func(buf); return 0; }
- 88 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:13:11 ]
- >>87
普通は無理ですが コンパイラによっては専用の命令を持っていることもあります
- 89 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:20:15 ]
- >87
int func(int *pi) { size_t size; size = *((size_t *)pi-1); ... %nbsp;return size; } int main(void) { int *buf = malloc(16+sizeof(size_t)); *(size_t *)buf = 16; buf = (size_t *)buf + 1; func(buf); free((size_t *)buf - 1); } あくまで局所的にやらないこともなかったりする 構造体使う方が読みやすくなると思うけど struct { size_t size; int *buf; } foo; まぁ、どう考えても自分でメモリ管理ライブラリ作って使ったほうがいいと思う、今後のためにも
- 90 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:23:34 ]
- >>84
sakuraじゃなくてか
- 91 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:23:41 ]
- >>86
秀丸は、金払ってまで使う意義はないだろ。 フリーのやつつかえ。
- 92 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:54:03 ]
- >>86
きときとのcpad最強 バグあるけどな
- 93 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 22:24:10 ]
- >バグあるけどな
kwsk よく使ってるんだが
- 94 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:00:23 ]
- エディタへの瑣末な不満は尽きない。TeraPadとかも
- 95 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:03:46 ]
- 自分で不満の無いエディタを作ったらいいのに。
- 96 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:07:56 ]
- vim
- 97 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:29:58 ]
- BZ
- 98 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:31:22 ]
- まあ、エクセルさえあれば何でもできるけどな。
- 99 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 00:13:57 ]
- >>98
早く寝なさい。明日学校に遅刻するぞ
- 100 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 00:27:17 ]
- 統計と学習を同義とするなら、エクセルで人工知能も作れるしな
- 101 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 03:23:48 ]
- 表計算から年賀状作成まで。
万能ツールだよな。エクセル。
- 102 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 03:34:08 ]
- よくきたなもまえら、でもここは「C言語なら俺に聞け(入門篇) Part 54」だ
エディタの話がしたいのなら別のところでやってくれ
- 103 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 05:47:11 ]
- >>93
たまにメモリの開放を忘れる程度 特に支障はない なんてったってうちの会社の標準環境だしなwww
- 104 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 06:10:42 ]
- よくC言語の解説で「動作を保証しない」とか「非常に危険です」とか
説明があるけど最悪何が起こるの? パソコンがフリーズするくらいなら立ち上げなおせば元に戻るよね
|

|