aris-wiz の回答履歴
- 読み込んだ文字列を関数として実行するには?(VC++)
[やりたい事] (1)テキストファイルを読込む ※テキストには関数名が記述されてます。 (2)取得した関数を実行する。 [できない事] (1)はできたのですが、(2)ができない。 取得した文字列をどうやれば関数として実行できるのか、分からず悩んでます。 回答よろしくお願いします。
- 構造体とファイル検索(><)
なかなか前に進めず、困っています。(泣)現在、構造体とファイル検索を考えてるのですが、皆様にアドバイスを頂けたらと思っています。お願い致します。 テキストファイルの内容は自分で適当に作りました。このようにしています。 →ファイル名(soccer.txt)ファイルの中身→ 例「 番号,名前,年齢 」 1 ,川口 能活,33 38,楢崎 正剛,40 20,川島 永嗣,22 10,中澤 佑二,35 51,駒野 友一,19 9 ,中村 俊輔,29 22,遠藤 保仁,17 15,鈴木 啓太,32 19,本田 圭佑,51 28,家長 昭博,25 30,高原 直泰,18 7 ,播戸 竜二,44 ☆ /*記述*/ としているところへどのようにプログラムを書けばよいのかわかりません。(泣)どなたか教えて頂けないでしょうか。お願い致します。 サンプル: // 最大のデータ数 #define MAX_LIST (100) // 関数のプロトタイプ宣言 void read_data( FILE *fp, struct data list[], size_t size ); void print_data( struct data list[], size_t size ); void search_num( struct data list[], size_t size ); void search_name( struct data list[], size_t size ); void search_age( struct data list[], size_t size ); // メイン関数 int main( void ) { struct data list[ MAX_LIST ]; FILE *fp; int menu; if ( (fp = fopen("soccer.txt","r")) != NULL ){ read_data( fp, list, MAX_LIST ); fclose( fp ); do { printf( "条件を選択して下さい[1~4]\n" ); printf( " 1:全部表示\n" ); printf( " 2:番号で検索\n" ); printf( " 3:名前で検索\n" ); printf( " 4:年齢で検索\n" ); printf( "99:終了\n" ); scanf( "%d", &menu ); switch ( menu ){ case 1: print_data( list, MAX_LIST ); break; case 2: search_num( list, MAX_LIST ); break; case 3: search_name( list, MAX_LIST );break; case 4: search_age( list, MAX_LIST ); break; default: break; } } while ( menu != 99 ); return 0; } printf( "soccer.txt - ファイルが見つかりません。\n" ); return 1; } // テキストデータを読み込む専用関数 void read_data( FILE *fp, struct data list[], size_t size ) { /* 記述 */ } // 構造体の内容を表示する専用関数 void print_data( struct data list[], size_t size ) { /* 記述 */ } // 番号で検索 void search_num( struct data list[], size_t size ) { /* 記述 */ } // 名前で検索 void search_name( struct data list[], size_t size ) { /* 記述 */ } // 年齢で検索 void search_age( struct data list[], size_t size ) { /* 記述 */ }
- C言語での質問
プログラミングの課題をやっているのですが、一部どうしてもわからないことがあるので質問させて下さい。 課題では100個の点のX座標、Y座標を0から5の間でランダムに設定し、ファイルに書き出すといった内容なのですが、この点を設定した時、任意の2点のX座標、Y座標の差が0.01以下になる場合は設定し直さないといけません。 これは後々の課題に関係してくるから、みたいなのですが。 そこで点の設定の関数として以下のようなプログラムを考えてみました。(ちなみに構造体pointを前に宣言してあり、p[].xは点のX座標、p[].yは点のY座標です。また、NUM=100と最初に宣言してあります。) void tensettei(point p[], int num){ int i, j, k; double sa; for(i=0; i < num; i++){ p[i].x = ((double) rand()) / ((double) RAND_MAX) * 5; p[i].y = ((double) rand()) / ((double) RAND_MAX) * 5; } for(j=0; j < (num - 1); j++){ for(k=j+1; k < num; k++){ if(p[j].x > p[k].x) sa = p[j].x - p[k].x; else sa = p[k].x - p[j].x; if(sa < 0.01) tensettei(p, NUM) } } for(j=0; j < (num - 1); j++){ for(k=j+1; k < num; k++){ if(mp[j].y > mp[k].y) sa = mp[j].y - mp[k].y; else sa = mp[k].y - mp[j].y; if(sa < 0.01) tensettei(p, NUM) } } } しかし、実行してもエラーが起こったのかすぐに終了してしまい、この後に点データを出力するプログラムを書いているのですが、ちゃんと出力されません。 いろいろプログラムを変えて試した結果、原因は「tensettei(p, NUM)」にあることはわかりました。 それさえ変えればすればうまく動作しましたので。 再帰と同じ感じでいけるかと思ったのですがどうやら駄目のようです。 そこで質問なのですが、ループの中である条件が起こったら最初からやり直し、てなプログラムはどんな風にすればいいのでしょうか?
- C言語での質問
プログラミングの課題をやっているのですが、一部どうしてもわからないことがあるので質問させて下さい。 課題では100個の点のX座標、Y座標を0から5の間でランダムに設定し、ファイルに書き出すといった内容なのですが、この点を設定した時、任意の2点のX座標、Y座標の差が0.01以下になる場合は設定し直さないといけません。 これは後々の課題に関係してくるから、みたいなのですが。 そこで点の設定の関数として以下のようなプログラムを考えてみました。(ちなみに構造体pointを前に宣言してあり、p[].xは点のX座標、p[].yは点のY座標です。また、NUM=100と最初に宣言してあります。) void tensettei(point p[], int num){ int i, j, k; double sa; for(i=0; i < num; i++){ p[i].x = ((double) rand()) / ((double) RAND_MAX) * 5; p[i].y = ((double) rand()) / ((double) RAND_MAX) * 5; } for(j=0; j < (num - 1); j++){ for(k=j+1; k < num; k++){ if(p[j].x > p[k].x) sa = p[j].x - p[k].x; else sa = p[k].x - p[j].x; if(sa < 0.01) tensettei(p, NUM) } } for(j=0; j < (num - 1); j++){ for(k=j+1; k < num; k++){ if(mp[j].y > mp[k].y) sa = mp[j].y - mp[k].y; else sa = mp[k].y - mp[j].y; if(sa < 0.01) tensettei(p, NUM) } } } しかし、実行してもエラーが起こったのかすぐに終了してしまい、この後に点データを出力するプログラムを書いているのですが、ちゃんと出力されません。 いろいろプログラムを変えて試した結果、原因は「tensettei(p, NUM)」にあることはわかりました。 それさえ変えればすればうまく動作しましたので。 再帰と同じ感じでいけるかと思ったのですがどうやら駄目のようです。 そこで質問なのですが、ループの中である条件が起こったら最初からやり直し、てなプログラムはどんな風にすればいいのでしょうか?
- void*型のデータサイズ
すみません教えていただけますか? void*で宣言した変数にmallocで確保して mallocで確保したデーターサイズがわからないクラスで void*型のサイズを取得したいのですが できますか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- psychesine
- 回答数5
- iniファイルの情報求む
iniファイルをプログラムの構造体に出力したいのですが、 何分、Cの勉強を始めたばかりでソースの想像が出来ません。 また、サイトを探しても、抽象的なもの、VB用のものばかりであまり具体的な想像が出来なくて・・・。 もし、わかりやすく(簡単なものがというもの)C言語の iniファイルからの読み込み、iniファイルの値の代入方法が載っているサイトなどをご存知でしたら、教えていただけますでしょうか? よろしくお願いいたします。 よろしくお願いいたします。
- C言語をコンパイル後の膨大なファイルについて
先日このサイトで、古いC言語のソースを現在に生き返らせる ことについて皆さんからいろいろと教えていただきました. 本当に有難うございました. お礼を申し上げます. お蔭様で、昔々の printf 時代のソースが、C++でコンパイル出来ました. 上位互換の意味がよくわかりました. 具体的な、コンパイルの手法については、「猫でもわかる・・・」の説明にに従いました. ところが、コンパイルの結果について、また頭をひねっています. ファイルの格納先としては、H:\C_PlusPlus\Source を指定し、 ファイル名は Ex_001.c としました. 私としては、コンパイルすれば、objとexeのファイルくらいが 追加されるだろうと、軽く考えていました. ところが膨大な数のファイルが出来上がりました. まず、H:\C_PlusPlus\Source に、Ex_01と言うフォルダが出来ました. その中に、debug と,Ex_001と言う二つのフォルダ、 Ex_001.ncb, Ex_001.sln, Ex_001.suo と言う三つのファイルが 出来ました. debugフォルダの中身は、Ex_001.exe, Ex_001.ilk, Ex_001.pdb の 三つのファイルです. Ex_001フォルダの中身は、debug と言うフォルダと、Ex_001.proj, Ex_001.projNEC・・・, Ex_001.c の三つのファイルです. さらに、debugフォルダには、次の8ケのファイルが入っています. BuildLog.htm, Ex\1.exe.embedded.manifest, Ex\1.exe.embedded.manifest.res, Ex_001.intermediate.manifest, mt.dep, Prog_001.obj, vc80.idb. vc80.pdb この莫大な数のファイルがいったい何であるのか、見当もつきません. 5,6冊ほど、C++の本を買って来ましたが、どういうわけか、どの本も、ビルドして、デバッグせよと言うだけで、それから先の説明が見つかりません. お手数かけて恐縮ですが、どなたかそのあたりについてご教示をお願いします. または、この辺について記述されている書籍をご紹介ください. よろしく、お願いします. 追伸 ずっと昔、コンパイルしてリンクしていたころのことを思い出して、 ソースとexeファイル以外は全部消して見ました. それでも結構、exeファイルは動きます. 問題ないようです. いったい、あの沢山のフォルダやファイルは、はたして、保管の必要があるのでしょうか? テストしたプログラムは、最簡単なものとして、次のとおりです #include "stdio.h" int main() { int num; printf (" My name is Bill \n"); scanf ("%d", &num); return 0; }
- VC++6.0からVC++.NET2005へ移植
VC++6.0で作成したプログラムをVC++.NET2005に移植しました。 ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。 ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。 どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。
- C言語をコンパイル後の膨大なファイルについて
先日このサイトで、古いC言語のソースを現在に生き返らせる ことについて皆さんからいろいろと教えていただきました. 本当に有難うございました. お礼を申し上げます. お蔭様で、昔々の printf 時代のソースが、C++でコンパイル出来ました. 上位互換の意味がよくわかりました. 具体的な、コンパイルの手法については、「猫でもわかる・・・」の説明にに従いました. ところが、コンパイルの結果について、また頭をひねっています. ファイルの格納先としては、H:\C_PlusPlus\Source を指定し、 ファイル名は Ex_001.c としました. 私としては、コンパイルすれば、objとexeのファイルくらいが 追加されるだろうと、軽く考えていました. ところが膨大な数のファイルが出来上がりました. まず、H:\C_PlusPlus\Source に、Ex_01と言うフォルダが出来ました. その中に、debug と,Ex_001と言う二つのフォルダ、 Ex_001.ncb, Ex_001.sln, Ex_001.suo と言う三つのファイルが 出来ました. debugフォルダの中身は、Ex_001.exe, Ex_001.ilk, Ex_001.pdb の 三つのファイルです. Ex_001フォルダの中身は、debug と言うフォルダと、Ex_001.proj, Ex_001.projNEC・・・, Ex_001.c の三つのファイルです. さらに、debugフォルダには、次の8ケのファイルが入っています. BuildLog.htm, Ex\1.exe.embedded.manifest, Ex\1.exe.embedded.manifest.res, Ex_001.intermediate.manifest, mt.dep, Prog_001.obj, vc80.idb. vc80.pdb この莫大な数のファイルがいったい何であるのか、見当もつきません. 5,6冊ほど、C++の本を買って来ましたが、どういうわけか、どの本も、ビルドして、デバッグせよと言うだけで、それから先の説明が見つかりません. お手数かけて恐縮ですが、どなたかそのあたりについてご教示をお願いします. または、この辺について記述されている書籍をご紹介ください. よろしく、お願いします. 追伸 ずっと昔、コンパイルしてリンクしていたころのことを思い出して、 ソースとexeファイル以外は全部消して見ました. それでも結構、exeファイルは動きます. 問題ないようです. いったい、あの沢山のフォルダやファイルは、はたして、保管の必要があるのでしょうか? テストしたプログラムは、最簡単なものとして、次のとおりです #include "stdio.h" int main() { int num; printf (" My name is Bill \n"); scanf ("%d", &num); return 0; }
- 少数の表示
よろしくお願いいたします。 底辺:3cm 高さ:5cm の三角形の面積は 7.5平方cmです。 と表すプログラムを作成しています。 自分で以下のように作ってみましたが、 7.5平方cmです。と表したいところに 7.000000平方cmです。と出て来てしまいます。 どこを直せばよいか教えていただけますか? #include<stdio.h> main() { int teihen = 3; int takasa = 5; double menseki; menseki = (double)teihen*takasa/2 printf("底辺:%dcm\n",teihen); printf("高さ:%dcm\n",takasa); printf("の三角形の面積は\n"); printf("%f平方cmです。",menseki); }
- ベストアンサー
- C・C++・C#
- ichigo2007
- 回答数2
- VC++6.0からVC++.NET2005へ移植
VC++6.0で作成したプログラムをVC++.NET2005に移植しました。 ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。 ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。 どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。
- VC++6.0からVC++.NET2005へ移植
VC++6.0で作成したプログラムをVC++.NET2005に移植しました。 ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。 ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。 どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。
- EditViewクラス 文字色の変更とクリア
お世話になります。現在MFCでTCP/IPパケットを受信したものをCEdtiViewクラスのViewに表示するプログラムを作成しました。 そこで、わからない事が出てきたので、わかる方々にご教示していただきたく投稿いたしました。 わからない事は、Viewに表示される文字色が現在Black(default??)なのですが、その色を変えたいのですが、どのようにしたらいいのでしょうか? ちなみにViewへの表示はGetEditCtrl()という関数を使用していて、 CString Msg(_T("TEST")); int nLen = GetWindowTextLength(); GetEdtiCtrl().SetSel(nLen,nLen); GetEditCtrl().ReplaceSel(Msg); このような記述をしています。 このGetEditCtrlを使って文字色の変更は出来ないのでしょうか? あとタイトルにも記載したのですが、あるトリガーがあるとそのEditViewクラスの描画文字列をすべてクリアしたいと考えています。 トリガーは簡単にボタンが押されたときに~~~C***Viewの領域クリア このような時はどのようにしたらいいのでしょうか? 初心者ですが、宜しくお願いいたします。 ---------------------------開発環境-------------------------------- WinXP sp2 MFC SDI
- VC++6.0からVC++.NET2005へ移植
VC++6.0で作成したプログラムをVC++.NET2005に移植しました。 ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。 ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。 どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。
- マルチスレッド化。
今とても大きな配列を使用し、長時間処理をするプログラムを組んでいます。元々処理時間に1時間を要するプログラムを2分で処理を完了するまでに仕上げました。 しかし、探究心はおさまらずもう少し高速化に挑みたいと考えています。 過去に「猫でもわかる」のSDK第1章と2章を学び、マルチスレッドのプログラムをSDKで組んだことがあります。それを利用してマルチスレッド化を実現したいと考えています。 言語はCでVisualStudio2005を使用しています。 *疑問1 SDKの場合WinMain関数とプロシージャからの実行で_beginthread関数を記述すれば処理が開始されます。 Cでもmain関数内に記述すれば、SDKと同様に処理できるのでしょうか? *疑問2 _beginthread関数の引数に関してです。 第1引数にvoid型のスレッド関数、第2引数に0?、そして第3引数にはスレッド関数に渡すデータの引数を記述すると把握しているのですが、渡したいデータは複数あり、***型と**型、それに変数を数個とスレッド関数に渡したいデータだらけなのですが、どのように記述すればよいでしょう? *疑問3 2つのスレッドを作成しようと考えていますが、その2つのスレッドで1つの大きな配列を共有して処理したいと考えています。 そのため、スレッド間の同期が必要になるわけですが同期の種類にもクリティカルセクションやミューテックス、イベントと豊富でどれを使用すれば良いのか迷ってしまいます。厳密に同期を取り処理をするにはイベントが一番良いと考えています。 これらの疑問に答えられる方はアドバイスをよろしくお願いします。
- VC++6.0からVC++.NET2005へ移植
VC++6.0で作成したプログラムをVC++.NET2005に移植しました。 ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。 ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。 どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。
- 関数にポインタを渡して動的確保する時について
どうにも動的確保について間違っている気がするのでお尋ねいたします。 よくメモリを動的に確保する場合に私は次のようなプログラムを書きます ポインタを用意する(例えばint *p) mallocでメモリ確保 ポインタを関数に渡す(Func(p)) 関数側でreallocし、値を代入する(p=(int *)realloc(p,sizeof(int)*num)) 関数呼び出し側で、その値を使う しかし、この方法を使うとどうにも関数を呼び出した際のポインタ(p)と、reallocした後のポインタ(p)の値が違うことがあり、値が不定になることがあります。 (reallocのメモリの確保の仕方のせいでしょうか) この使い方は恐らくどこか間違っていると思うんですが、いまいち納得のいく解決策が思いつきません。 例えばポインタを引数ではなく戻り値として得ればできますが、2つ以上のポインタについてはできません。 何卒ご教授のほどをよろしくお願いいたします。
- 関数にポインタを渡して動的確保する時について
どうにも動的確保について間違っている気がするのでお尋ねいたします。 よくメモリを動的に確保する場合に私は次のようなプログラムを書きます ポインタを用意する(例えばint *p) mallocでメモリ確保 ポインタを関数に渡す(Func(p)) 関数側でreallocし、値を代入する(p=(int *)realloc(p,sizeof(int)*num)) 関数呼び出し側で、その値を使う しかし、この方法を使うとどうにも関数を呼び出した際のポインタ(p)と、reallocした後のポインタ(p)の値が違うことがあり、値が不定になることがあります。 (reallocのメモリの確保の仕方のせいでしょうか) この使い方は恐らくどこか間違っていると思うんですが、いまいち納得のいく解決策が思いつきません。 例えばポインタを引数ではなく戻り値として得ればできますが、2つ以上のポインタについてはできません。 何卒ご教授のほどをよろしくお願いいたします。
- 非同期通信のサーバプログラムについて
はじめまして。 今、C#で非同期通信の勉強をしています。 ためしにローカルネットワーク内で文字を やり取りするチャットソフトを作成したのですが このサーバプログラムについて改良を加えたいので ご協力をお願いいたします。 このサーバプログラムをインターネット上のサーバとする場合なのですが 実験環境ではルータを使用しインターネットに接続しています。 ルータのポート開放等は設定してあります。 プログラムでサーバ自身のローカルIPアドレスと ポートを作成したソケットにBindすることで ルータが外部からきた接続要求をアドレス変換し サーバに届けることはできるのでしょうか? うまく説明できなくてわかりにくいかと思いますが よろしくお願いいたします。