• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【至急!】C++について)

【至急!】C++で「お客さん(Custooor)」の「名前(name)」が途中で消えてしまいます

このQ&Aのポイント
  • C++プログラム実行時に、ユーザーからの入力「お客さん(Custooor)」の「名前(name)」が途中で消える問題です。
  • プログラムは練習用でcharを使用しています。
  • 問題の解決策を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • neko1963
  • ベストアンサー率49% (127/258)
回答No.5

こんな感じですが、修正点がおわかりになりますでしょうか? ◎ソース #include <stdio.h> #include <cstring> #include <cstdlib> #include <ctime> /*_________________________ Customer _____________________________*/ class Customer { char name[200]; int gankodo; public: // ';" を追加?------ //Customer(void){} Customer(void){}; void Whats_Your_Name(void) { printf("あなたの名前を入力:"); scanf("%s",name); } void How_Your_Gankodo(void) { printf("あなたの頑固度(0~100)を入力:"); scanf("%d",&gankodo); if (!(gankodo >= 0 && gankodo <= 100)) { printf("値が間違っているようです。\n"); How_Your_Gankodo(); } for(char c;(int)c!=10 && c!=EOF;c=getchar());//getchar(); /////////////////////////////// /*Customer instan1; instan1.Whats_Your_Name(); instan1.How_Your_Gankodo(); instan1.Kakunin(); *//*┐ printf("\n確認しました。\n"); printf("名前:%s\n", instan1.Whats_Your_Name()); printf("頑固度:%d\n", instan1.How_Your_Gankodo());*/ } void Kakunin(void) { printf("\n確認しました。\n"); printf("名前:%s\n", name); printf("頑固度:%d\n", gankodo); printf("[Enter]\n"); } void Serif(void) { printf("\nむかしむかしある所に、%sが家から飛び出してきました。\n", name);} void Serif2(void) { printf("%s:「頼む一生のお願いだ・・・!\"エアコンの風を自由に操るシステム\"を作ってくれ!」\n", name);} void Serif3(void) { printf("%s:「そんなことはどうでもいいっ!」\n", name);} void Serif4(void) { printf("%s:「いま言ったぞ!聞いていなかったのかっ?!」\n", name);} void Serif5(void) { printf("%s:「・・・」\n", name);} char *output_customer_name(void) { return name;} int output_customer_gankodo(void) { return gankodo;} }; /*_______________________ Sales_staff ___________________________*/ class Sales_staff { char name[200]; public: Sales_staff(void){ strcpy(name, "見波さん");} void Serif(void) { printf("営業者:「はじめまして。私は%sです。」\n",name);} void Serif2(void) { printf("営業者:「何かご注文ですか?」\n");} void Serif3(void) { printf("営業者:「はっはっはっはっはっは」\n"); for(char c;(int)c!=10 && c!=EOF;c=getchar()); printf("    「ご冗談を。」\n");} }; /*_________________________ House ___________________________*/ class House { char name[200]; public: House(void){ strcpy(name, "家");} // 引数を変更------ //void story(void) { void story(Customer &okyaku) { printf("■ここは\"%s\"です\n",name); // 削除------ //Customer okyaku; okyaku.Whats_Your_Name(); okyaku.How_Your_Gankodo(); okyaku.Kakunin(); getchar(); okyaku.Serif(); getchar(); printf("会社につくなり汗だくになりながらこう叫びました。\n"); getchar(); okyaku.Serif2(); //for(char c;(int)c!=10 && c!=EOF;c=getchar()); getchar(); printf("どうやらエアコンの設置場所が悪く、涼しい風が全くこない様子でした。\n"); } }; /*___________________ SystemConsultant_Com ___________________*/ class SystemConsultant_Com { char name[200]; public: SystemConsultant_Com(void){ strcpy(name, "システムコンサルティング会社");} // 引数を変更------ //void story(void) { void story(Customer &okyaku) { getchar(); printf("■ここは\"%s\"です\n",name); Sales_staff eigyoman; // 削除------ //Customer okyaku; getchar(); eigyoman.Serif(); getchar(); okyaku.Serif3(); getchar(); eigyoman.Serif2(); getchar(); okyaku.Serif4(); getchar(); eigyoman.Serif3(); getchar(); okyaku.Serif5(); printf("・・・そういうわけでお客からもらった案件を\n営業者の営業マンは、経営者のヒデアキ社長に伝えました。"); } }; /*********************************************************************/ // intMain /*********************************************************************/ int main(void) { // 追加------ Customer okyaku; House instant1; // 引数を追加------ //instant1.story(); instant1.story(okyaku); SystemConsultant_Com instant2; // 引数を追加------ //instant2.story(); instant2.story(okyaku); // 追加------ return 0; } ◎実行結果(例) ※Visual C++ でビルドして実行した結果です ■ここは"家"です あなたの名前を入力:山田花子 あなたの頑固度(0~100)を入力:95 確認しました。 名前:山田花子 頑固度:95 [Enter] むかしむかしある所に、山田花子が家から飛び出してきました。 会社につくなり汗だくになりながらこう叫びました。 山田花子:「頼む一生のお願いだ・・・!"エアコンの風を自由に操るシステム"を作って くれ!」 どうやらエアコンの設置場所が悪く、涼しい風が全くこない様子でした。 ■ここは"システムコンサルティング会社"です 営業者:「はじめまして。私は見波さんです。」 山田花子:「そんなことはどうでもいいっ!」 営業者:「何かご注文ですか?」 山田花子:「いま言ったぞ!聞いていなかったのかっ?!」 営業者:「はっはっはっはっはっは」     「ご冗談を。」 山田花子:「・・・」 ・・・そういうわけでお客からもらった案件を 営業者の営業マンは、経営者のヒデアキ社長に伝えました。

rivalknockout
質問者

お礼

参照を使うんですね!!!! わかりやすく添削していただいてとても助かりました。 ありがとうございました。 またみかけたときはお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • neko1963
  • ベストアンサー率49% (127/258)
回答No.4

Customer okyaku;; を main() の中に移動して、okyakuオブジェクトへの参照(ポインタでも同様の事ができますが)をinstant1.story()、instant2.story() の引数として渡すのはいかがでしょうか? これならCustomer okyakuオブジェクトの実体は1つだけになり、そのオブジェクトへの参照(またはポインタ)を通じてinstant1.story()、instant2.story() の中でCustomer okyakuオブジェクトの実体を操作する事になると思いますが。

rivalknockout
質問者

お礼

なるほどですね。ありがとうございます

rivalknockout
質問者

補足

なるほどですね。 初心者なのでお願いしたいのですが、 具体的にはどういった記述になりますでしょうか。

すると、全ての回答が全文表示されます。
  • pyonmae
  • ベストアンサー率64% (40/62)
回答No.3

こんにちは。 面白そうだったので、一生懸命やってしまいました。 HouseとSystemConsultant_Comのそれぞれのstory()の中で、それぞれにCustomerクラスを生成しているからです。 相関図を紙にでもちゃんと書いて、まじめに考えてからコーディングした方がいいですよ。

rivalknockout
質問者

お礼

こんにちは。 回答ありがとうございました。 もうひとつ質問なのですが、よければお付き合い下さい。 一度入力させたデータをprivateで扱いながらふたつのクラス内で生成したインスタンスの中で使うにはどうしたらいいでしょうか?

すると、全ての回答が全文表示されます。
  • neko1963
  • ベストアンサー率49% (127/258)
回答No.2

Customerクラスのオブジェクトのライフサイクルは意図した通りなのでしょうか? Houseクラス中での「Customer okyaku」と、SystemConsultant_Com クラス中の「Customer okyaku」は異なる実体になりますよね。それは意図した通りなのでしょうか?

rivalknockout
質問者

お礼

なるほど。 異なる実体になるのですね。 これですっきりしました。 では、一度入力させたnameを Houseクラス中の「Customer okyaku」とSystemConsultant_Com クラス中の「Customer okyaku」の両方でも 継続して用いるにはどうしたらよいでしょう?

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

もっと単純なプログラムにしてください. 現在出ている問題と, おそらく関係ない部分が多すぎます. また, 「途中で消える」というのは ・どのような入力に対して ・どのようになっている のですか? どうして「途中で消える」のか, デバッガなどでたどって調べたのですか? あと, あなたの使っているシステムはなんですか?

rivalknockout
質問者

お礼

ありがとうございました。

rivalknockout
質問者

補足

はぁー

すると、全ての回答が全文表示されます。

関連するQ&A