1 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 20:15:31 ] C言語の入門者向け解説スレです。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題を片付けます 117代目 pc11.2ch.net/test/read.cgi/tech/1225320579/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 37 pc11.2ch.net/test/read.cgi/tech/1224000127/ 過去スレ 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
82 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:18:16 ] どうせそれぞれの差異にかかわるような話なんてしないんだから どれでもいーじゃねーか 他でやれ
83 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:29:01 ] >>81 最初に書いてある国内ってのは、脳内では無かったことになってるのか。
84 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:32:52 ] >>75 質問は返り値(戻り値)のことでの疑問でしょうか? それなら簡単です。関数の戻り値は、通常の変数の値と同じ理解でいいんですよ。 int func( int a, int b ) { return ( a + b ); // int型の関数func は常に a + b の値を返します。 // つまり関数func は a + b というint型の値を持つ変数と同じ性質です。 } void main( void ) { int n; int a = 1; int b = 2; n = func( a, b ); // n には関数funcが返す値 a + b が代入されます。n = a + b; と同じです。 }
85 名前:デフォルトの名無しさん [2008/11/01(土) 19:46:51 ] >>83 国際って書いてあるのを見落としたお前の失態
86 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:51:55 ] >>85 『「国内・国際」って書いちゃったけど、やっぱ国内のほうは無しで、国際だけね」ってこと?
87 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:52:34 ] 揚げ足取りみたいなバカがいるようで、やはりここは 回答者のレベルが低い、知能も知識も、精神レベルもw こんな腐った場所で質問する初心者は、場所を変えた方が良い。 まともな学校に通いなってことだ。所詮、ここは偽善有志者による 無責任で、一部の人間の自己満足で運営されていますからw
88 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:54:47 ] あと 俺は英語なんて読めなくてJISの訳がどの程度の質か知らんし、 >>74 は適当に思いつきで煽っただけだから、 あわてて「国際」の話だとか言い訳する必要も無いよ。
89 名前:デフォルトの名無しさん [2008/11/01(土) 19:54:48 ] >>86 ISO とも書いたがそれも読めてないようだな >>87 学校というより収容所のせいだろう
90 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:57:50 ] そもそも >>71 が激しくどうでもいい揚げ足とりだしな。
91 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:58:52 ] >>89 それくらいは読めてますよ。
92 名前:デフォルトの名無しさん [2008/11/01(土) 20:55:12 ] Borland C++ Compilerがダウンロードできないんですけど どうすればいいですか?
93 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 20:55:55 ] がんばってもっと探しましょう
94 名前:デフォルトの名無しさん [2008/11/01(土) 21:08:19 ] 他のコンパイラ探せってことですか?
95 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 21:13:15 ] Borland C++ Compilerでググって最初に出てくるページは違うのか。
96 名前:デフォルトの名無しさん [2008/11/01(土) 21:19:56 ] www.codegear.com/jp/downloads/free/cppbuilder ここで C++Compiler / Turbo Debugger をダウンロードしたいんだけど ユーザー登録してダウンロードのできるページに行こうとすると 表示するページがないって出る。ユーザー登録したメアドには Zip解凍パス届いてるのに…。
97 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 21:22:40 ] BCCは時代遅れだからVC++にしておけ。
98 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 21:25:50 ] >>96 俺もダウンロードできないな。 > 上記のダウンロードサイトにアクセスできないときは、CodeCentral のダウンロードページをお試しください。 > CodeCentralのダウンロードページを利用するには、CDNへのログインが必要です。 ダウソのページに↑と書いてあるけど、CDNの登録とか面倒だから、これ以上はためさないけど。
99 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 21:26:55 ] Cコンパイラとして使うなら、どっちでもそう変わりないと思う。
100 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 21:27:42 ] でもダウンロードの敷居が違う。 だったらめんどくさい思いしてまでして使う理由が見当たらない。
101 名前:デフォルトの名無しさん [2008/11/01(土) 21:31:11 ] >>97 win2kなんでVC++使えないです…。OS自体が時代遅れなんで。 >>96 みんなそうなんだ?なんとかならないかな…。
102 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 21:38:31 ] cygwinやmingwなら登録いらずだよ。
103 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 22:07:57 ] >>101 ttp://phys.cool.ne.jp/physjpn/bccwin.htm なら一応bcc入りだよ?
104 名前:103 mailto:sage [2008/11/01(土) 22:14:09 ] 見つけた ttp://clove.rye.tama.ac.jp/~softcat/soft/win/ABCD/BorlandC++5.5.1Jfree/freecommandlinetools2.exe
105 名前:デフォルトの名無しさん [2008/11/02(日) 04:48:43 ] FILE型はどうしてオブジェクト型なの?
106 名前:デフォルトの名無しさん [2008/11/02(日) 05:00:12 ] >>34 BCPL Cの次はP言語
107 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 05:14:43 ] >>105 オブジェクトで何か問題が?まさか関数型だとでも?
108 名前:デフォルトの名無しさん [2008/11/02(日) 05:30:37 ] >>107 どうして構造体型じゃないの?
109 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 05:32:34 ] FILEのメンバーを気にしたことある?
110 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 05:33:31 ] うわぁ・・・
111 名前:デフォルトの名無しさん [2008/11/02(日) 05:42:23 ] >>109-110 何故オブジェクト型にする必要があったの?
112 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 05:43:45 ] Cでは整数もポインタも構造体もオブジェクトなわけだが…。
113 名前:デフォルトの名無しさん [2008/11/02(日) 05:46:16 ] >>112 オブジェクト型は総称じゃないの?
114 名前:デフォルトの名無しさん [2008/11/02(日) 08:48:57 ] 電気代を算出するようなプログラムを作っているのですが 電気代の方が正常に表示されません(有り得ない桁数が表示される)。 他の部分も、まだまだ作りこまれておらず稚拙な内容ですが とりあえず今は、電気代がきちんと出る事を目的としています。 使用しているコンパイラはVisual C++ 2008です。 どなたかご教授お願いします。
115 名前:114 [2008/11/02(日) 08:49:54 ] すいません、ソースコードを張り忘れていました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7911.txt 宜しくお願いします。
116 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 08:57:22 ] scanf・・・恐ろしい子・・・
117 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 09:07:04 ] とにかくdoubleとの相性が最悪よね。どうしたのかしら。
118 名前:114 [2008/11/02(日) 09:13:07 ] >>116-117 つまりプログラムでのミスというよりは、仕様での異常という事でしょうか? そうなると、別の入力方法を考えないといけないわけですね・・・ ご解答有難うございました。
119 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 09:19:02 ] >>118 アホかい。自分が使い方間違っているだけだって。 つーか、そのミスに警告も出てないとしたら、コンパイラの使い方も間違っているかもしれないぞ。
120 名前:114 [2008/11/02(日) 09:31:16 ] >>119 そうだったのですか。 コンパイラはVisualC++2008の方に混同されているものですが 使い方などは考えたことありませんでした。 もう一度よく調べて見ます。 有難うございました。
121 名前:デフォルトの名無しさん [2008/11/02(日) 09:40:45 ] 誰か>>105 について教えて下さい
122 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 09:42:15 ] >>121 struct です
123 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 09:57:31 ] 1 は何故 int型なの? 'A' は何故 char 型なの? 0は何故偽値なの? if文は何故式じゃないの?
124 名前:デフォルトの名無しさん [2008/11/02(日) 09:58:46 ] >>122 何故オブジェクト型なのですか? 何故構造体型では無いのですか?
125 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 10:01:37 ] 構造体だって書いてあるじゃん。 バカなの?
126 名前:デフォルトの名無しさん [2008/11/02(日) 10:07:09 ] >>125 JIS X3010:2003にはオブジェクト型であると説明されているのですが、 あなたは構造体型であると言いたいのですか?
127 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 10:08:12 ] YES
128 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 10:12:13 ] >>127 どうして構造体型なの?
129 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 10:17:02 ] いや、間違った。別に構造体である必要は無いか。 規格でそこまでは決められてないな。 構造体以外で実装されている処理系は見たこと無いが。 Q.なぜ構造体ではなくオブジェクト型なのか? A.構造体です。 Q.なぜオブジェクト型なのか。 A.規格でそう決められてるから。
130 名前:デフォルトの名無しさん [2008/11/02(日) 10:18:58 ] >>129 、別に構造体型じゃなくても構わないッスw適当にやっちゃってよw、 って事?
131 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 10:21:37 ] 規格に書かれていないことは実装者の自由。 もっとも規格に沿ってない実装だってあるわけだから、 目指すものによって守るべきルールも決まってくる。 規格に無くても、世の中にはデファクトスタンダートと言うものもあるしな。
132 名前:デフォルトの名無しさん [2008/11/02(日) 10:21:57 ] ポインティンガーから構造体にアクセスするときだけ -> で いいのですか
133 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 10:25:09 ] >>131 なるほど、ありがとうございます。
134 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 13:00:04 ] っていうか、Cの規格のオブジェクトってのは、オブジェクト指向のオブジェクトとは別物だろ。
135 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:27:09 ] perlの処理系をC言語で作る事はできますか?
136 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:28:18 ] できますというかできてます
137 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:30:26 ] Perlの処理系はLarryの優しさから出来ています とりあえずこちらをご覧下さい ttp://www.cpan.org/src/README.html
138 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:36:02 ] 他にもC言語でできてる、代表的なソフトを教えて下さい。
139 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:39:41 ] Unix系OS
140 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:51:23 ] Cの処理系
141 名前:デフォルトの名無しさん [2008/11/02(日) 14:57:40 ] YO YO エビバーデー
142 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 15:29:45 ] フィンガー5じゃないが、リンリンしなくて良いからw
143 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 16:02:55 ] >>115 scanf("%f",&y); ↓ ^^ scanf("%lf",&y); ^^ printf("その電化製品で掛かる月の電気代は%e¥で、基本料金は%d¥です\n",ene,x); ↓ ^^^ printf("その電化製品で掛かる月の電気代は%.3f¥で、基本料金は%d¥です\n",ene,x); ^^^ これでいかがでしょう?(printfのほうは自分の好みで変更しました) ただ、xが使われていないような・・・
144 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 16:08:18 ] >>143 です 思いきりずれました つまり、scanfのフォーマット指定を"%f"→"%lf" pritnfのフォーマット指定を"%e"→"%.3f"(この3は小数点以下桁数なのでお好みで) でいかがでしょう?
145 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 17:49:25 ] いまひとつ有り得ない桁数というのが分からないのと それであってるのか分からないのだが eneは電気代じゃなくて一ヶ月分の消費電力しか計算して無くないか?
146 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 17:51:19 ] 普通、¥は接頭です。
147 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 17:55:35 ] 計算するときは、常に単位を意識するといい。 y * z * 30は、即ち y[W] * z[h/day] * 30[days/month]だからつまり、ene[Wh/month]となる。 つまり、月当たりの電力量と言うことだ。
148 名前:デフォルトの名無しさん [2008/11/02(日) 18:10:45 ] unsigned charの変数は初期化をしなくても問題は無いのですか? 大学の課題のサンプルプログラムの中に初期化も代入もせずに 値を参照している部分を見つけたもので気になって質問しました 試したところ確かに初期値?として0が格納されているみたいなんですが これをそのまま利用していいんでしょうか? 自分の知識や習慣だと変数を初期化等をしないまま参照するのは おかしい気がするのですが何かこうすることで問題が発生したりはしますか?
149 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:14:53 ] グローバルスコープやstaticな変数なら0で初期化される。 ローカル変数ならゴミが入ってる。
150 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:15:40 ] 型の問題ではなく、定義されている場所の問題。 関数内のローカル変数でstaticでないなら、初期化しないと不定値になる。
151 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:16:34 ] グローバル変数なら0で初期化される
152 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:19:43 ] >>149 あれ?関数内のstaticな変数は0初期化されないんじゃなかったっけ?
153 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:22:04 ] されます。
154 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:26:30 ] >>149->>151 おお、ありがとうございます! なるほど、型ではなくスコープの問題だったんですね 確かにそのプログラムではグローバル変数でした 今までそんなこと全く知らずに使ってました^^; 勉強になりました
155 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:32:39 ] スコープっていうか静的か動的かの話じゃないかな コンパイル時なら0で初期化とかやっても遅くならないし
156 名前:152 mailto:sage [2008/11/02(日) 18:36:12 ] >>153 確かにそうみたい。なんか勘違いしてた
157 名前:デフォルトの名無しさん [2008/11/02(日) 18:40:33 ] テキストファイルから1行ずつ読み込んで、 それをスペースを間に入れて表示したいです。 例えばテキストファイルの中身が a b だったら「a b」という感じに表示したいのですが、 以下のコーディングで正しいでしょうか? 環境はWindowsXP、VisualC++2008 ExpressEditionです。 char buf[1024]; FILE *fp = fopen("test.txt", "r"); while(fgets(buf, sizeof(buf), fp) != NULL){ buf[strlen(buf)-1] = '\0'; printf("%s ", buf); }
158 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:49:43 ] >>157 だいたいそれでいいんじゃないの? 一行が1024文字以上だったらどうするとか、細かいことは考えないで。
159 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:56:06 ] >>158 大丈夫そうですか? あ、でもこれだとテキストファイルの最後に空白行 入れないと駄目っぽいですね。
160 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:09:00 ] 聞く前に試せよ
161 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:24:35 ] 俺に聞けスレで試せで終わらすなんて。
162 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:33:25 ] 何故ダメなのか聞くためのスレだろ
163 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:35:35 ] >>159 fgetc()とfputc()で、一文字単位でしょりして、\nだったら空白に置き換えるってほうが、 簡単なんじゃね?
164 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:36:01 ] できることできるだけやってから質問するのは当たり前だろ
165 名前:デフォルトの名無しさん [2008/11/02(日) 19:38:22 ] 一番ダメな考え方 「動くからこれでいい」 動くからと言って、CPUの演算処理を独占するようなコードはクソである。 だから動くからいいと言うものではない
166 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:38:39 ] >143です >>145-146 さん 皆さん指摘の通り、中途半端な回答になっていました。 >>115 さん kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7916.txt に修正版をうpしたので許してください
167 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:45:17 ] >>163 その方が簡単ですね。効率性も考えるとfgetsですかね?
168 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:50:27 ] >>167 たぶん、大差ないんじゃないの? 昔、setvbuf()ってので、バッファのサイズを増やしたら速度が向上してたけど、 Windowsの時代になってから、同じようなことをやってもあんまり変わらなかった。 OSレベルでのバッファリングされてるからだと思うけど。
169 名前:デフォルトの名無しさん [2008/11/02(日) 20:19:51 ] 仮に、CPUの処理速度が無限大あって ビットシフトなんか使っても速くならないとしても 常に最適化を忘れてはいけない コンパイラが最適化してくれるとしても 自分の手で最適なコードを書くことを忘れてはいけない これが出来ない奴はルータも携帯電話も作れない
170 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:21:34 ] 携帯やルータってCで出来てるの?
171 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:29:30 ] 基本は読みやすさ。 要件をみたせないときに、最適化。
172 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:32:53 ] Cではありません。スパゲッティーで出来てます。 。。。ごめん
173 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:35:12 ] またド忘れしちゃった。。 左シフト演算って、常に論理シフトするんだっけ。 signed でも unsigned でも正値でも負値でも。 右シフト演算がちょっとめんどくさいことになってることは 覚えてるんだけど。
174 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:37:28 ] なぜコードを最適化するのですか?
175 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:40:24 ] めんどくさいものは使わない。
176 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:48:13 ] 組み込みは未だに、CとASMで出来ている
177 名前:デフォルトの名無しさん [2008/11/02(日) 20:59:00 ] >>172 ざる蕎麦ではできていないのか
178 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:59:47 ] >>173 #include <stdio.h> #include <limits.h> #define UPPER_BIT (1 << (sizeof(int) * CHAR_BIT - 1)) void print_bit_s(int n){ unsigned int mask = UPPER_BIT; for(;mask; mask >>=1) putchar(mask & n ? '1' : '0'); putchar('\n'); } void print_bit_u(unsigned int n){ unsigned int mask = UPPER_BIT; for(;mask; mask >>=1) putchar(mask & n ? '1' : '0'); putchar('\n'); } int main(){ int n1 = (-1); int n2 = n1 & ~UPPER_BIT; unsigned int m1 = n1; unsigned int m2 = n2; print_bit_s(n1 >> 1); print_bit_u(m1 >> 1); print_bit_s(n2 << 1); print_bit_u(m2 << 1); return 0; } // output 11111111111111111111111111111111 01111111111111111111111111111111 11111111111111111111111111111110 11111111111111111111111111111110
179 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 21:25:30 ] >>174 そこにコードがあるから
180 名前:173 mailto:sage [2008/11/02(日) 21:44:14 ] んー、たとえば右シフト演算について言えば、符号付き整数型の負値に対して演算を 適用した結果は処理系に依存しますよね。output の1行目でいうと、算術シフトするか 論理シフトするかは処理系に依存すると。。 上の2行は 01111111111111111111111111111111 01111111111111111111111111111111 こうなる可能性があるわけですよね。下の2行に関しては同様に処理系依存の問題は 大丈夫なのでしょうか。コードを解読し切れてないので結論が良く見えないのですが。
181 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 21:50:37 ] >>173 っMSDN と思ったけど、検索しても見つけにくかったので、ローカルから。 Shift Operators: >> and << (ごめん、英語なんだ) とりあえず適当訳。 左シフトは0埋め。論理シフト。 右シフトはunsignedは0埋め。signedは符号ビットで埋める。 unsignedは論理シフト。signedは算術シフト。 ・Microsoft Specific signed の負の数の右シフトは、実装によります。 MicrosoftのC++の場合は、MSBで空いたビットを埋めます。 MSのC++以外の場合は知らん。 だそうです。
182 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 21:53:03 ] なんでこういう細かいところ統一しないの?