課題6

まず、ここの説明を読んで、異なる型のを一つの配列に格納できるコードを書けるようになってください。

次に、以下の条件を満たすプログラムを作ってください。


まず、最初にあなたの学籍番号と名前を表示します。

次にint, double, char, 文字列の何れかを入力するかたずねます。例えば、

何を入力しますか: 1. 整数  2. 実数  3. 文字  4. 文字列  5. 終了

ここで、選択肢以外の入力があった場合、入力が正しくないとこを知らせるメッセージを表示して再び何を入力するかたずねます。

選択肢が正しく入力された場合、次にその値を入力するメッセージを表示して入力してもらいます。例えば、

整数を入力してください:

ただし、値の入力のチェックはあるほうが望ましいですが無くてもかまいません。文字列は文字制限があってもかまいません。(例えば長さ100など)

何回か入力を繰り返して、終了が選択された場合入力されたデータを表示して終了します。表示はすぐに消えてしまわないように工夫してください。

プログラムはGUIでもコンソールアプリでもいいです。


下の図はあくまでも、一例です。

提出方法

ソリューションを提出してください。

ユーザ名-ex6

ヒント

入力は何個になるか分からないのでvectorなどの可変長の配列を使うのがいいでしょう。ここでは積極的にSTLを使いましょう。

scanfを使ってデータを入力する場合、STLのstringは使わないでchar t[100];などとして文字列は文字制限を付けたほうが簡単かもしれません。

更にヒント

  

vectorを使って配列を宣言するにはたとえばこのように記述します。

std::vector<Object*> os;

配列に動的に要素を追加するには以下のようにします。

Int i = 1;
os.push_back(&i); //オブジェクトのアドレスを渡す

更にヒント

#include <stdio.h>
#include <vector>

//ここにObject, Int, Real, Char, Textの定義を挿入

//---------------------------------------------------------------------------
int main()
{
    std::vector<Object*> os;
    int input = 0, intput2;
    Int* i;
    Char* c;
    Real* r;
    Text* t;

    while(input != 5)
    {
        printf("何を入力しますか: 1. 整数 2. 実数 3. 文字 4. 文字列 5. 終了\n");
        input = getc(stdin);
        switch(input)
        {
        case 1:
            printf("整数を入力してください。\n");
            input2 = getc(stdin);
            i = new Int;
            i->i = input2;
            os.push_back(i);//配列に追加 。iはポインタ

            break;
        case 2:
        //実数について
            break;
        case 3:
        //文字について
            break;
        case 4:
        //文字列について
            break;
        case 5:
        //5が押されたら何もしない
             break;
        default:
            printf("入力が間違っています\n");
        }
    }

    //結果表示
    for(int t = 0; t < os.size(); t++)
    {
        os[t]->print();
    }

     getc(stdin);
     getc(stdin);

    return 0;
}