1 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:07:56 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/
159 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:09:32 ] 先に起動した方は何かの通信手段でデータを受信できるように待機しておいて、 後に起動した方はその通信手段でコマンドライン情報を送信する。
160 名前:158 mailto:sage [2007/09/10(月) 22:12:35 ] >>159 共有メモリ/Socket以外の方法で可能なら、それを教えてください。 へたれですいません。お願いします。
161 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:16:50 ] なぜ共有メモリやらソケットがイヤなのかその理由を書かないと、何か提案しても、やっぱりそれもイヤとか言われる予感。 あと、ANSIの範囲外の話は、OSの種類を書いてください。
162 名前:158 mailto:sage [2007/09/10(月) 22:23:09 ] >>161 上記以外の方法で、より簡単な方法があればそれで行きたいからです。 規格はANSIで。Winだったらメッセージ使うんですが。 それと、上記の方法がいやな理由は以下の通り。 ・共有メモリ -> 保守/拡張がめんどい ・ソケット -> プログラム規模が大きくなるからめんどい よろしくお願いします。
163 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:26:45 ] ANSI ではプロセス間通信の方法は fopen で同じファイルを読み書きする以外にありません。 終わり。
164 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:31:25 ] ちなみに共有メモリもソケットも ANSI には無いものですから 残念
165 名前:158 mailto:sage [2007/09/10(月) 22:44:57 ] >>163 , 164 ANSIではファイル以外にはないですが・・・どうもです! 共有メモリってANSIではないのですね。勉強になります。 ソケットはそうですね。OS依存で言語使用ではないですね。仰るとおり。 ご丁寧にどうも!
166 名前:やおい [2007/09/10(月) 23:49:58 ] typedef unsigned long dword; typedef unsigned char byte; typedef union _struct{ byte data[12]; struct test_bit{ dword program_info_length :12; dword flag_4 :4; dword PCR :13; dword flag_3 :3; dword last_section_number :8; dword section_number :8; dword current_next_indicator:1; dword version_:5; dword flag_11:2; dword program_number :16; dword section_length:12; dword falg_2_ :2; dword flag_0:1; dword testdata :1; dword table_id :8; }bit; }header_type;
167 名前:やおい mailto:sage [2007/09/10(月) 23:50:47 ] 上記のようなビットフィールド構造を作ってdata配列に値を入れて共用体のメンバから 欲しいビット値を手に入れると言ったプログラムを作ってます。 上記の様に定義してprintfで出力し一つ一つ確認を行ったところ dword program_number以降に入るデータが期待する値と違うものが入ってしまいます。 共用体で切った容量と、構造体で切った配列は同じ大きさだと思うのですが・・・何故こんな 事が起こるのかわかりません・・・。 ちなみに dword program_number :16;の部分を >dword program_number1 :8; >dword program_number2 :8; で二つに分けるとprogram_number以降も正しくデータが入りました。 原因が分かる方が居ましたら是非、お願いします。
168 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:41:37 ] 質問です。 char* foo(){ return new char[50]; } という関数があって、戻り値をdeleteしたいとき、 char* buf=foo(); delete buf; でよいの? delete[]にできなくて気持ち悪いんだが。 char[] foo(){ とか書けないし。
169 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 04:32:34 ] >>168 普通にdelete[] bufと書けばいいのでは?
170 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:24:39 ] 最後Enterを押すまでウィンドウを閉じないようにしたいのですがどうすればいいですか?
171 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:50:08 ] >>170 止めたいところで getchar();
172 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:05:49 ] テキストファイルを読み込んで指定した文字が何個含まれるかを出力するプログラム を作りたいと思いこんな感じで書いてみたんですが、stringで宣言したbufファイル はstrstrでは使えないみたいで困ってます 他に何かいい方法ありませんか? int count=0; string buf; while(getline(test, buf)) {//読み込んだテキストファイル(test)を1行ずつbufにコピー if(strstr(buf,"test")!=NULL)//もしbufにtestという文字があれば count++; } out<<cout<<endl;//out.textに何個あったか書き出す
173 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:15:30 ] C++は知らない俺の案 string buf → char buf[1024] としてgetlineではなくfgetsを使う。 ただしstrstr(buf,"test")とするといつまでも一個めの"test"に引っかかるので、 char* start; while(...){ if((start=strstr(buf,"test")) != NULL){ count++; start++; //startを"test"の先頭の次、つまり'e'を指すようにして、次回同じ"test"にひっかからないようにする } } などとする
174 名前:173 mailto:sage [2007/09/11(火) 08:17:23 ] 追加 stringを使うにしても何にしても while の中でもう一個ループ組まないと一行に2回以上"test"があっても1回しか数えてくれないよ
175 名前:173 mailto:sage [2007/09/11(火) 08:20:43 ] たびたびすまん if((start...) != NULL) じゃなくて while((start...) !=NULL) だ。
176 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:23:33 ] >>172 strstreamとか strstreambufとかを調べろ
177 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:27:49 ] >>170 話を端折りすぎ。 何のために? 誰が作ったウィンドウを? さっぱりわからん。
178 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:34:11 ] >>172 buf.find("test") != std::string::nposか、 std::strstr(buf.c_str(), "test") != NULL でも、これだと1行に2個以上あったときにまずくないか?
179 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:52:37 ] C言語らしく。 まずは、ある文字列が1行に何回出現するのかカウントして返す関数を作るべし。 その後に、1行読んでは、出現回数を積算するループを回すべし。
180 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:53:48 ] >>173 おいおい、間違いすぎだろ。それから、startを更新しているのに使っていないぞ。 それに、strstr()でマッチしたときにstartはstrlen()分進める方がよくないか?
181 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:58:49 ] >>171 ありがとうございます。うまくいきました
182 名前:やおい mailto:sage [2007/09/11(火) 09:09:19 ] >>166-167 この問題についても分かる方居ましたら是非お願いします・・・。
183 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 09:15:37 ] ビットフィールドの配置なんて処理系依存なんだから、 まずはお前が何のコンパイラを使っているか書かないと始まらない。
184 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 09:29:07 ] >>182 フィールド幅が16だから、16ビット境界(2バイト境界)に配置されたと思われ。 pragma packかなにかでスタブ0にしてやれば間が埋まって想定どおりになるかと。 それはさておき、ビットフィールドに於いて、整数型の幅は意味がないので dwordなんて書かれると却って混乱する。signed/unsignedと書いておくことお勧め。
185 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:36:31 ] C言語で何かアプリケーションを作成したい時、ソフトは何を使えばいいですか? GUIの物を作ってみたいのですが。 ちなみにOSはWindowsXPを使っています
186 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:39:25 ] VC
187 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:54:21 ] Visual C++というのでいいのでしょうか?
188 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:57:53 ] VC#
189 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:59:44 ] >>185 C++ではなく、Cで? それはまた酔狂だな。 VisualC++なんていらない。 BCCでも、PlatformSDK付属コンパイラでも、何でもいいよ。
190 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:27:52 ] 何でも良いけど強いてというならVisualC++で、コンパイラオプションを設定してCとしてコンパイルすれば良い。
191 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 21:45:11 ] VC++6.0なら拡張子を .c にしとけば勝手にCだと思ってくれるよ 2005は知らね
192 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 22:21:48 ] 2005もだけど
193 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 23:47:52 ] ありがとうございます。それを取って使ってみようと思います。
194 名前:やおい mailto:sage [2007/09/14(金) 00:03:55 ] >>183-184 遅くなってすみません。 返信ありがとうございました。 言われた通りpragmaを使って挑戦したいと思います。 ビットフィールドって処理系に依存していたんですね。 その編の事も含めて初めて知りました。 ちなみに使っているのはVisual C++6.0です。
195 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 01:47:52 ] ファイルがあって先頭にHEADERがついています ------- ○ ○○○ ○ ○ ○ 以下必要な部分…1万行以上 -------- 先頭部分が6行くらいで一定で続いていて その後の必要な部分はRGB値がこの順番で入っています この形式のファイルを1000個くらい連続で読み込む必要があるのですが こういう作業をしたことが無いので、ヒントやどういう風にやればいいのか教えてください。 先頭6行分を飛ばして、あとをfscanf(%f)なんかで読めるといいのですが…
196 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 01:57:15 ] >>195 固定長ならfseek()でスキップ、可変長ならfgets()で空読み
197 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 13:28:35 ] >>195 ヒント 同じような処理をしているプログラムのソースを見る。 unix系には、画像のファイル形式で、テキストなのがあったと思う。 ていうか、あなたのは、まさに、それなんじゃないか? ファイルの拡張子なんだい? それで検索すれば見つかると思うぞ。 ちなみに、学校の宿題っぽいな。
198 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 19:43:59 ] PPMやBMPならばfgetsでヘッダーを全部とばして、そのあとfreadすればOK.
199 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 21:13:03 ] >>198 ハァ?
200 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:32:55 ] >>199 pbmのtypoだろ。察してやれよ。 # だとしたら、pgmの立場がないけどねw
201 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 02:07:32 ] C++のmutableは、どういう時に使うものなのでしょうか?
202 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 02:10:41 ] 例えばこういうとき。 class MyObject { mutable int hashcode_cache; public: int hashcode() const { if(hashcode_cache == 0) { hashcode_cache = なにかすごい複雑な計算; } return cached_hashcode; } };
203 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 02:48:03 ] なるほど。 ありがとうございます。
204 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 03:51:04 ] void foo(int *ar){ printf("%d",ar[2]); } void main(){ int array[2][2] ={{0,1},{2,3}} printf("%d",array[0][0]); //a printf("%d",array[0]); //b printf("%d",array[2]); //c foo(&array[0][0]); //d } 上のaは0が表示、 bはa[0][0]のアドレスが表示され、 cは配列の範囲外参照になる、で合ってますか? (cのarray[2]でarray[1][0]が表示されたりはしませんよね?) そしてdですが、やはりこれも範囲外参照、ということになりますか? どうにかして二次元配列を一次元扱いすることはできませんか?
205 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 08:24:29 ] >>204 int * p = & array[0][0]; for (int i = 0; i < sizeof(a); ++i) { printf("%d\n", p[i]); }
206 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 08:42:46 ] C++でもおkってんならboost::multi_arrayを導入するのを考えてもいいよ って僕の隣のboost厨がいってます
207 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 15:42:16 ] >>205 環境が整い次第、それで試してみます。 二次元配列はそれぞれの列(行?)が連続的に配置されているとは限らない、とどっかに書いてあったので、 それを鵜呑みにしていました……。 ということは>>204 のdはarray[1][0]を表すということですよね。 それならなんとかなりそうです。 ありがとうございます。 >>206 C++は今はちょっと…… 答えてくださりありがとうございます。
208 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:27:40 ] >>207 >ということは>>204 のdはarray[1][0]を表すということですよね。 いいえ。関数内でアクセスしているのは、array[1][0]ですが。
209 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:21:40 ] >>207 隙間なく連続しているとは限らないというのは、正しい。
210 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 18:12:53 ] >>207 >二次元配列はそれぞれの列(行?)が連続的に配置されているとは限らない、とどっかに書いてあったので、 いいえ、それが二次元配列として定義されたものなら連続しているはずです。
211 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 15:58:38 ] #include <stdio.h> #include <stdlib.h> void dary(int *ary,size_t n); void pary(int *ary,int *aryeof); int main(){ int ary1[100] = {0}; int ary2[10][10] = {0}; int i,j,*temp; dary(ary1,100); pary(&ary2[0][0],&ary2[9][9]); for(i = 0,j = 1; i < 100; i++,j++){ printf("%-3d ",ary1[i]); if(!(j%10)) putchar('\n'); } for(temp = &ary2[0][0],j = 1; temp <= &ary2[9][9]; temp++,j++){ printf("%-3d ",*temp); if(!(j%10)) putchar('\n'); } return 0;} void dary(int *ary,size_t n){ int i = 0; for(i = 0; i < n; i++) ary[i] = i;} void pary(int *ary,int *aryeof){ int i = 0; int *temp; for(temp = ary,i = 0; temp <= aryeof; temp++,i++) *temp =i;}
212 名前:デフォルトの名無しさん [2007/09/25(火) 22:39:29 ] 超初心者質問ですが「defineできる」とはどういう意味ですか? defineで定数を宣言するということでしょうか?
213 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 22:48:24 ] 前後の文脈が分からんとなんとも。 直訳すると「定義することが出来る」か?
214 名前:デフォルトの名無しさん [2007/09/26(水) 01:44:40 ] すみません、これの違いって何ですか? ポインタかどうか?だけですか? MyClass my; my.foo(5); と、 MyClass* my; my = new MyClass; my->foo(5); delete my;
215 名前:デフォルトの名無しさん [2007/09/26(水) 01:49:08 ] VC6 の SDK で、ボタンを作ってあーだこーだしているのですが、 描画がうまくいきません。マウスを左クリックしたときに そのメッセージを捕まえて、描画更新すればよいのかと思って いたのですが、上手くいきません。 WM_LBUTTONDOWNと、WM_LBUTTONUPは取れてます。が、ボタンを押す と、凹まないし、凹んだと思ったら、他のボタンは凹まないし・・ 描画処理が足らないのかと思っているのですが、どこに何を入れれば いいのでしょう?ちなみにWM_LBUTTONDOWNを受信したときに InvalidateRectと、UpdateWindowを呼んでみたのですが、何も変わりませんでした。 よろしくおねがいします。
216 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 02:02:57 ] >>214 前者はローカル変数としてスタックに確保しているが、 後者はヒープに確保している。 巨大なクラスでないなら前者にするべき。
217 名前:214 [2007/09/26(水) 02:07:53 ] >>216 そういうことでしたか。ありがとうございます。 サクっとは前者で、ぐごごご、は後者みたいな感じですね。 これからはサイズや用途などを考えて使い分けるようにします。
218 名前:デフォルトの名無しさん [2007/09/26(水) 02:11:52 ] >>212 文脈がわからんからなんともいえないけど、「defineできる」って、 誰かに言われたの?だとすると、「defineできる」って言わせる何か (プライスレス)があったわけだと思うわけですよ。 もし、そこに整数や文字列なんかがあった場合、それらはソース コード上に書くよりdefineできるから、そこらへん修正しちゃってYO みたいな感じになるのかな?
219 名前:超初心者です [2007/09/26(水) 02:13:15 ] 質問があるんですがよろしくお願いします。 C++を使ってヘリコプタのシミュレータを作っています。 今回「compact flight controller」というコントローラを使いたいと考えています。 コントローラで動きを入力するとその動きがシミュレータにも反映されるようにしたいです。 入力した動きを数値化して代入すればいいのかなと思っているのですが、 動きをC++に取り込む方法が分かりません。誰か教えて頂けませんか? 説明がへたくそですごく分かりにくくなってしまいました。申し訳ありません。
220 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 07:02:17 ] >>219 質問のポイントが漠然としすぎてる。 まるで、 私の代わりに作ってください と言っているようなものだ。
221 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 08:03:39 ] デバイスドライバと連携をとりたいとかかなあ。
222 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 08:36:58 ] >>219 DirectX
223 名前:超初心者です [2007/09/26(水) 15:55:37 ] すいません。漠然としすぎでした。本当に初心者なのでどう質問していいか 分かりませんでした。 ジョイパッドの入力データをC++に取り込む関数みたいなものがあると 聞いたので、もしあるのなら教えていただきたいです。
224 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 16:11:41 ] 超初心者はプログラムするな
225 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 16:14:01 ] あほか
226 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 16:20:33 ] DXライブラリ使いなさい 目的の関数はマニュアル見れば一発で見つかるから
227 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 17:00:31 ] 質問です cout.precision(17); cout << .8F + .1F << endl; //Line a cout << .8 + .1 << endl; //Line b これを実行すると 0.90000003576278687 0.90000000000000002 と表示されるのですが0.900000000・・・とならないのは Line aのほうはfloat型、Line bのほうはdouble型でメモリ上に確保されていて 確保していない領域まで表示してしまった結果と考えてよいのでしょうか? まったく見当違いなことを言っていましたら、どなたかなぜ0.9000・・・・とならないのかご指導お願いできますか? よろしくお願いします
228 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 17:25:42 ] >>227 2進数だから。
229 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 17:28:31 ] たとえば、 10進数の0.5は、2進数なら0.10000000000000000・・・・・ では、 10進数の0.9を、2進数で現わすと? 何桁必要なのか。 それを有限の桁数で打ち切って、さらに10進数に変換すると、どうなるのか。 ちょっと自分で計算してみればわかる。
230 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 18:01:12 ] >>228 >>229 ありがとうございます 二進数だと0.111001100110011・・・・ って感じで無限に続いてっちゃうんですね それでサイズに入らない分は切り捨てられると なんかぜんぜん見当違いなことかいててすみません 勉強になりました ありがとうございました
231 名前:デフォルトの名無しさん [2007/09/26(水) 22:47:40 ] [1] 授業: 教科書 [2] OS Windows [3]問題 double data[5] ={10.8,20.3,30,6.40,10.4,2.12}: 配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい 誰か宜しくお願いします ちなみに初心者です
232 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:10:54 ] >>231 template <int N> double sum( double (&array)[N] ) { double result = 0; for( double* i = array ; i < &array[N] ; ++i) { result += *i ; } return result ; } template <int N> double average( double (&array)[N] ) { return sum(array)/N ; }
233 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:16:12 ] double result = 0; ↓ double result(0.0) ; のほうがいい気がする。
234 名前:774 [2007/09/27(木) 22:47:40 ] log10f()はVC6ではどのライブラリに含まれてるんでしょうか? リンクで未解決になっちゃう。
235 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 22:56:38 ] >>234 VC6はC99未対応だから無いんで内科医?
236 名前:デフォルトの名無しさん [2007/09/28(金) 01:13:27 ] 未入力のエラーチェックしたいのですが getsだと簡単なのにscanfだとうまくいかない getsは非推奨だそうなので出来ればscanfでやりたいのですが いい方法ありますか?
237 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 01:19:27 ] >>236 fgets()でやれば?
238 名前:デフォルトの名無しさん [2007/09/28(金) 01:38:13 ] >>237 できませんでした(´・ω・`) if(a[0] == '\0') で未入力エラーチェックしてたのですが他の方法ってありますか?
239 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 01:42:31 ] >>238 その場合fgets()は改行文字を取り除かないから、if (a[0] == '\0' || a[0] == '\n')とでもすればいい。
240 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 01:56:46 ] scanfも非推奨
241 名前:デフォルトの名無しさん [2007/09/28(金) 02:06:19 ] なんか頭痛くなってきた。もう寝ます。 教えていただきありがとうございました。
242 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 02:42:28 ] >>236 「未入力のエラーチェック」って何だよ。 わかんねーよ。
243 名前:デフォルトの名無しさん [2007/09/28(金) 03:06:52 ] 質問です。 #include<stdio.h> #define NAME_MAX 20 int main() { char name[NAME_MAX+1]; scanf("%s",&name[0]); printf("%-20s : 名前",&name[0]); } 以上のようなプログラムを#defineの値を変えただけで 表示幅の左詰めを変更できるような方法を 知っている方がいらっしゃったら教えて頂けませんか?
244 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 03:17:34 ] printf("%-*s : 名前", NAME_MAX, &name[0]); &name[0] は name と書いたほうがいいよ。
245 名前:デフォルトの名無しさん [2007/09/28(金) 03:57:43 ] できました!ありがとうございます。 >244
246 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 14:56:42 ] >>242 何も入力しないでエンター押した時のことでしょ
247 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 21:29:24 ] >>246 それは未入力ではなく空入力と書いたほうがわかりやすいし、 もっと具体的に説明したほうがいいんじゃまいか。
248 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 17:51:52 ] #include <stdio.h> int sum_ave(int num1,int num2,int *sum,int *ave) { *sum = num1 + num2; *ave = (num1 + num2) / 2; } int main(void) { int x = 3; int y = 5; int goukei = 0; int heikin = 0; sum_ave(x, y, &goukei, &heikin); printf("合計は %d です\n",goukei); printf("平均は %d です\n",heikin); } これでコンパイルするとerror C4716: 'sum_ave' : 値を返さなければいけませんと表示されてしまいます。 何度も本を読み返してみたのですがどこがおかしいのかわかりません。ご教示お願いします。
249 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 17:54:57 ] int sum_ave → void sum_ave
250 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 17:56:37 ] エラーメッセージの言うとおりにしろよ sum_aveの中でreturnしろ 値戻す気ないなら戻り値型voidにしろ
251 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 17:57:17 ] >>249 ありがとうございます 本に書いてあるのが間違いだとは思いませんでした
252 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 18:02:51 ] 本のタイトル晒せ
253 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 18:08:45 ] 本のサンプルが細かい所で間違ってるのは良くあること
254 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 23:11:22 ] >>252 C言語のポインタがゼッタイにわかる本の160ページです 本に書いてあるのがひょっとしたら間違えてるのかなと思って 正誤表www.shuwasystem.co.jp/books/7980/1192-4/1192-4.html をみたのですが そのページのことは何も書いてなかったので私が間違えてるのかなと・・・
255 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 01:55:00 ] >>254 すごく恥ずかしいタイトルの本だなぁ。 ポインタくらいで躓く人は、その先にある、もっと大きなハードルを越えられないから、 いまのうちに諦めたほうがいいよ?
256 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 03:01:53 ] >>254 そういう壮大なタイトルをつける著者は、自分にしか分からないような文章を書く事が多いからねぇ。 まずは、メモリとアドレッシングについてきちんと理解した方がいいよ。
257 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 17:30:41 ] > そういう壮大なタイトルをつける著者は、自分にしか分からないような文章を書く事が多いからねぇ。 ハゲ堂w
258 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 16:36:02 ] ハゲって言うなこのハゲ!!
259 名前:デフォルトの名無しさん [2007/10/06(土) 04:38:31 ] テンプレートを使うとリンクで失敗します。 ソースをまとめて一つのファイルにした場合は大丈夫なのですが、 テンプレートを使ったクラスを分割コンパイルしようとすると、必ずリンクで失敗します。 環境はFC6+gcc4.0です。