επιστημη(@episteme) の回答履歴
- コマンド分岐処理 単体テスト
C言語勉強中です。Sub関数の単体テストを行いたいのですが、どうすれば良いのか分かりません。疑似mainを作ってそこに実行された関数の戻り値を返す?というのはなんとなく分かります・・。どういう風に書けばよいのか良いのですか?? #include<stdio.h> int sub_command(int icmd,LINE **stt_pnt,LINE **cur_pnt,LINE **help_pnt,char *afname) { static char *adress=NULL; static int iupdate=0; int ret; int pret; switch(icmd){ case 1: *cur_pnt=(*cur_pnt)->next; Sub_current(*stt_pnt,*cur_pnt); } break; case 2: Sub_apend(stt_pnt,cur_pnt); iupdate==1; break; case 3: Sub_delete(stt_pnt,cur_pnt); iupdate==1; Sub_current; break; case 4: Sub_past(cur_pnt,adress); iupdate==1; break; case 5: ret=Sub_save(*stt_pnt,iupdate,afname); if(ret==0){ iupdate==0; } break; case 6: adress=Sub_copy(*cur_pnt,adress); break; case 7: Sub_help(help_pnt); break; case -1: pret=Sub_quit(iupdate); break; } return pret; }
- 教えてほしいのですが
またまた質問したいのですがVisual Stdio C++では1つのプロジェクトで1つのプログラムしか作れないっぽいのでjavaでしようしているeclipseにC言語を導入できるということでそちらでやろうと思っています。 Eclipse C/C++ Development Tooling - CDT、日本語化、コンパイラとしてMinGWをインストールするまではできたのですが、いざデバッグしようとしてビルドすると **** プロジェクト C言語 の構成 Debug の ビルド **** **** 内部ビルダーがビルドに使用されます **** gcc -O0 -g3 -Wall -c -fmessage-length=0 -osample.o ..\sample.c ar -r libC言語.a sample.o プロジェクト C言語 のビルド完了 Time consumed: 429 ms. と表示され、そのままデバッグしようとすると 起動に失敗しました。バイナリーが見つかりません と出てきてしまいます。 一応MinGWの設定方法を調べて設定したのですがおそらくPATH設定でミスがあると思っています。 現在PATHの環境変数はC:\Program Files\Java\jdk1.6.0_13\bin となっています。 調べると C:\MinGW(ここにインストールしました)\binを追加してくださいと書いてあったので 環境変数→新規→PATH:C:\MinGW\bin としたところeclipseじたいが起動しなくなりました。 どうすればいいですか? うまくeclipseでCが実行できるように教えていただきたいです。 質問がだらだらと長くなってしまってすみません。
- ベストアンサー
- C・C++・C#
- takoppachi
- 回答数4
- 単体テストの方法が分からない・・。
表示開始行から終了行までの内容を表示させるSub関数です。iは行カウンタ、sttは先頭エリアポインタ、isttlineは表示開始行、iendlineは表示終了行です。 開始行から終了行まで内容を表示できるか確認したいです。 iとisttlineとiendlineに適当な数を入れて疑似mainにprint文で表示?させればよいのでしょうか・・? どう書けばよいのかいまいち分かりません。 どなたか教えてください。 #include<stdio.h> int Sub_disp(LINE *stt_pnt,int isttline, int iendline) { int i=1; while(i!=isttline){ stt_pnt=stt_pnt->next; } while(i!=iendline){ printf("%d:" "%s", i, stt_pnt->buf); i++; stt_pnt=stt_pnt->next; } return 0; }
- ライブラリのコンストラクタについて。
はじめまして。 C++のライブラリ(静的、動的問わず)について いくつか教えてください。 たとえば、1つのクラスで定義した以下のようなライブラリ (まずは、静的 or 動的は問いません)があるとします。 class library { library(); ~library(); public GetX(); private int a; } さらに、実行プログラムMain.exeが存在し、このMain.exeは、 上記ライブラリをリンクしているものとします。 このとき、Main.exe内では、libraryをnewすることもなく、 library::GetX();と呼べるわけですが、 (1)コンストラクタはいつ呼ばれているのでしょうか? (2)(1)に関係しそうですが、Main.exeがマルチスレッドの場合に、 Main threadとsub threadから呼ぶときに、ライブラリのコンテキスト?インスタンス?は 同じなのでしょうか?それともスレッドごとに作られるのでしょうか? ご存知のかたいらっしゃいましたら教えてください。 説明不足があればご指摘ください。宜しくお願いいたします。
- ベストアンサー
- C・C++・C#
- tamiya4512
- 回答数4
- C言語の勉強法について
私は、以前専門学校でC言語を習っていました。 あれから10年位がたち、ここ半年位なんとなく勉強しなおしているのですが、自分がどこまでできるかわかりません。 というか、かなり忘れてて勉強どうしたらいいのだろうと悩みます。 ちなみに本は山ほどあります。 C言語を極め、最終的に出来ればゲームが作れるようになればいいなと思ってます。
- Cでの数当てプログラム
現在、Cで数当てプログラムを作っておりますが、C初心者で、何が何だか分からない状態です。 <プログラムの内容> ・0から2の数値から1つ選択して入力してもらう。 ・コンピュータが選んだ値と一致したら"あたり"、不一致なら"はずれ"を出力。 ・10回繰り返したら、1回目から入力された数値と、コンピュータが選んだ数値を表示。 ・最終的に、当たった確立を%で表示。 <条件> 1.以下の構造体を使う。 typedef struct{ int m_inputNumber; int m_selectNumber; char m_result[7]; }NUMBERDATA; 2.以下の関数を作る。 ・数値入力関数:int inputNumber(); ・選択された数値と入力された数値を比較して当たり、はずれ出力し、それを構造体に格納する関数: void judge(int i_inputnumber,NUMBERDATA* o_numberdata); ・結果表示関数:void outputData(NUMBERDATA* i_numberdata); 3.乱数発生プログラムの埋め込み。 #include <stdlib.h> #include <time.h> int selectnumber; time_t seed; time(&seed); srand(seed); selectnumber = rand() % 3; 4.strcpy,strcmp関数を使う。 5.main関数を以下のように設定。 int main(){ NUMBERDATA I_data[10]; int i; for(i = 0; i < 10; i++){ judge(inputNumber(),&I_data[i]); } outputData(I_data); return 0; } <サンプル画面> 0から2の数値から値を1つ入力してください > 1 結果 = あたり 0から2の数値から値を1つ入力してください > 0 結果 = はずれ ……(10回繰り返し) =結果= 1回目 入力値:1 コンピュータが選択した値:1 (あたり) 2回目 入力値:0 コンピュータが選択した値:1 (はずれ) ……(10回分出力) 確立 = **% と、こんな感じなのですが、理解力不足で完成には程遠くなっています。 Cに詳しい方が居ましたら、書き方、図々しいですが、ソースなんかあれば非常に助かります。 色々と無茶な事言ってますが、ご回答の方お願い致します。
- C言語・ゲーム作成で挫折気味の対処方法
こんばんは。ゲーム作成に関わらず、C言語で挫折気味の時、みなさんはどのように対処してきましたか? 以下、私の現在の状況を説明致します。 C言語でゲームを作成するという目的でC言語を勉強し、ゲーム作成の勉強をしていました。 C言語の書籍を一通り行い、DXライブラリを使用して、それに関するサイト(ゲームプログラミングの館等)を参考にしながらゲーム作成の勉強をしていました。 しかし、除々に分からなくなり、手がつけられなくなってしまいました。 ゲームを早く作成してみたいという気持ちが先走り、C言語の知恵が足りない(勉強期間:1ヶ月程度)のに ゲーム作成に取り掛かろうとしたことがが原因のひとつだと思い、もう一度、C言語を勉強し直そうと考えています。 しかし、数ある書籍やサイトの中でどれがゲームプログラミングを学ぶのに適しているの分かりません。 みなさんがゲームプログラミングをするにあたって利用した書籍やサイトはどのようなものでしょうか? また、同じようにC言語でゲームを作成している方にお聞きしたいのですが、C言語をどの程度勉強されてからゲーム作成に取り掛かったのでしょうか? みなさんの意見を参考にして、勉強していきたいので、よろしければアドバイスをお願い致します。
- C#のオブジェクトを他のFormから参照
たとえば、 Form1.cs static void MessageView(String message) { label1.Text = message; } というコードがあるとします。 Form1.csの中では MessageView("hoge"); で実行されます。 それをForm2.csから呼び出すにはどうすればいいのでしょうか。
- ベストアンサー
- C・C++・C#
- noname#95826
- 回答数1
- C言語である関数への同時アクセスについて
たとえば int function() { int value = rand(); //ランダムな数を取得 for ( int i = 0; i < 100000; i++ ) //数百ミリ秒くらい待機 ; return value; } こんな関数を作成します。 これをマルチスレッドで同時に動かすとします。 例えばAというスレッドとBという2つのスレッドで同時に function()を呼び出すとします。 この場合Aというスレッドを呼び出してvalueに100が代入されたとして、 その後forループで待機している間に スレッドBからもfunction()が呼び出されvalueに200が代入されたとしたら、 スレッドAもスレッドBもfunctionの返す値はどっちも200になってしまうのでしょうか? 環境はWindowsXPでコンパイラはVisual Studio2005または2008を想定していますが、 一般的なCやC++の仕様ではこの場合の挙動はどうなるのでしょう?
- トークンで分けた文字列をさらにトークンで分ける
初心者です。よろしければご教授下さい。 temp.c:12: warning: useless keyword or type name in empty declaration というような文字列がg_str02[0]に格納されている時に、まずは「 」(半角スペース)を区切り文字としてトークンごとに分け最初の2つのトークンをmretsu1[0]とmretsu1[1]の中に格納し、さらにmretsu1[0](上記で言う「temp.c:12:」)を「:」を区切り文字としてトークンごとに分けmretsu2[0]とmretsu2[1]に格納するような関数を作りたいのですが、コンパイルは成功するのですが、できた実行ファイルを実行するとエラーが起きて強制終了されてしまいます。 現在ソースは以下のようになっています。 ////////// char mretsu1[255][255]; char mretsu2[2][255]; char *token1 = " "; char *token2 = ":"; strcpy(mretsu1[0], strtok(g_str02[0], token1)); strcpy(mretsu1[1], strtok(NULL, token1)); strcpy(mretsu2[0], strtok(mretsu1[0], token2)); strcpy(mretsu2[1], strtok(NULL, token2)); ////////// デバッグをしてみた所、どうもmretsu1[0]をさらに分解しているところにエラーがあるようです。 よろしくお願いします。
- 締切済み
- C・C++・C#
- jovancampa
- 回答数4
- トークンで分けた文字列をさらにトークンで分ける
初心者です。よろしければご教授下さい。 temp.c:12: warning: useless keyword or type name in empty declaration というような文字列がg_str02[0]に格納されている時に、まずは「 」(半角スペース)を区切り文字としてトークンごとに分け最初の2つのトークンをmretsu1[0]とmretsu1[1]の中に格納し、さらにmretsu1[0](上記で言う「temp.c:12:」)を「:」を区切り文字としてトークンごとに分けmretsu2[0]とmretsu2[1]に格納するような関数を作りたいのですが、コンパイルは成功するのですが、できた実行ファイルを実行するとエラーが起きて強制終了されてしまいます。 現在ソースは以下のようになっています。 ////////// char mretsu1[255][255]; char mretsu2[2][255]; char *token1 = " "; char *token2 = ":"; strcpy(mretsu1[0], strtok(g_str02[0], token1)); strcpy(mretsu1[1], strtok(NULL, token1)); strcpy(mretsu2[0], strtok(mretsu1[0], token2)); strcpy(mretsu2[1], strtok(NULL, token2)); ////////// デバッグをしてみた所、どうもmretsu1[0]をさらに分解しているところにエラーがあるようです。 よろしくお願いします。
- 締切済み
- C・C++・C#
- jovancampa
- 回答数4
- strcat関数を自作したいです
失礼します。 私はC言語を勉強し始めて3週間の超初心者なのですが、今関数の勉強をしており、例題でstrcat関数を自作してみようと思っています。 が、作り方が分からず、他のサイト、書物、質問なども参考にしてみましたが説明を読んでも理解できませんでした。 どなたかstrcat関数を初心者にも分かりやすいように自作例を作っていただけると大変幸いです。できるだけ簡単で分かりやすいコードなら助かります。 宜しくお願いいたします。
- ベストアンサー
- C・C++・C#
- elkmarchan
- 回答数8
- 【VC++2005(CLR)】読み込んだcsvファイルの一部を書き換えたい
いつも大変お世話になっております。 VC++初心者です。 現在、VC++2005 Express Edition CLRでプロジェクトを作成しています。 表題の件なのですが、今まで以下のようにコーディングしていましたが、 読み取りはできるものの、書き込みができません。 何か良い方法はありませんでしょうか。 希望としては、ファイルの一箇所のみを書き換えたいので、 書き込み専用のファイルを用意して、読み込みファイルを 一行、一行コピーしたくないです。 すみませんが、よろしくお願い致します。 ***(表示を考慮するため、行の先頭に全角スペースを入れています。)*** String^ strDelimiter = ","; //","で分割する array<Char>^ delimiter = strDelimiter->ToCharArray(); array<String^>^ strData; //分割後の文字の入れ物 String^ strLine; //1行分のデータ System::IO::FileStream^ fs = gcnew System::IO::FileStream (path, System::IO::FileMode::Open, System::IO::FileAccess::ReadWrite, System::IO::FileShare::ReadWrite); System::IO::StreamReader^ sr = gcnew System::IO::StreamReader(fs,System::Text::Encoding::Default); while(sr->Peek() >= 0){ //csvデータ分繰り返し strLine = sr->ReadLine(); //1行読み込み strData = strLine->Split(delimiter); //「,」で区切って、配列に分解 if (iWorkNum == int::Parse(strData[0])){ strData[2] = strWorkTime;//書き換えたい箇所はここだけ //※ここからの処理方法を教えて下さい。 } } } sr->Close(); fs->Close();
- 2分探索木、挿入
行き詰まりました。 2分探索木の要素挿入です。 何がいけないのでしょうか?? 思うように動作しません。 ルートはどうやら設定されるようですが、 その他のデータがうまく挿入されません。 たぶんポインタの使い方がなってないようなのですが、 どこをどうしていいか分からないのでどなたか教えてください。 (インデントくずれました・・・見にくくてすみません) データ構造は以下の通りです。 node{ key //item template ですがint とみなしてください。 node *left //左の子へのポインタ node *right //右の子へのポインタ } root{ node *root //ルートへのポインタ } //ここからソース(多少省略してます。) insert(const K & newKey) { node<K> *temp; if(empty()){//ルートの設定。 temp = new node<K>(newKey, NULL,NULL); root = temp; }else{//木が既存する場合 insertItem(root, newKey); } } insertItem(node<K> *fact, const K & newKey) { node<K> *temp,test; if(fact == NULL){//要素挿入 temp = new node<K>(newKey,NULL,NULL); fact = temp; test = *fact; }else{//挿入場所探索 test=*fact; if(test.key == newKey){ cout<<"same key"; }else if(test.key > newKey){ insertItem(test.left, newKey); }else{ insertItem(test.right, newKey); } } }
- BMサーチというアルゴリズム
昔、CマガジンでBMサーチという文字列を早く検索するアルゴリズムがあったのですが、その本がなく、詳しいソースや解説をしているサイトや本を探しています。 moto = "....."; if ( strcmp(moto, "AA") == 0 ) { }else if ( strcmp(moto, "AB") == 0 ) { ... } と、BMサーチではどちらが早いのでしょうか? Cライブラリになっているので、中でBMサーチみたいなことはしているのでしょうか?
- C#からC++/CLIにサンプルソースを書き換えたい。
VC++/CLIは、過去のソースをそのまま利用できる(マネージ・アンマネージ混在可能)?ので、C++/CLIで作成したく、 以下のURLにC#のサンプルソースはあるので、 http://www.geocities.jp/hatanero/socket1.html これからVC++/CLIに書き換えたいのですが、ここは全然違うというものがありましたら、教えて下さい。 C#からVC++/CLIに変換できるツールはあるのでしょうか?
- C#からC++/CLIにサンプルソースを書き換えたい。
VC++/CLIは、過去のソースをそのまま利用できる(マネージ・アンマネージ混在可能)?ので、C++/CLIで作成したく、 以下のURLにC#のサンプルソースはあるので、 http://www.geocities.jp/hatanero/socket1.html これからVC++/CLIに書き換えたいのですが、ここは全然違うというものがありましたら、教えて下さい。 C#からVC++/CLIに変換できるツールはあるのでしょうか?
- 【VC++2005(CLR)】ラベルやテキストボックスの背景色を変化させたい
VC++初心者です。 現在、VC++2005 express edition、CLRプロジェクトで コーディングしております。 ラベルやテキストボックスの背景色を変えるには どうしたら宜しいでしょうか。 以下のようにコーディングしたのですが、色が変わってくれません。 他に何か設定が必要なのでしょうか。 label->ResetBackColor(); label->BackColor.Red;