1

それは宿題の一部ですが、主要な部分ではありません

自分で手動でデータを変更してメイン機能を作成しましたが、ユーザー入力を正しく読み取る方法がわかりません。

入力は次のようになります。

3

1 2 9

6

1 1 3 4 4 6

0

したがって、基本的に最初の入力は次の入力の#のサイズです。したがって、3の場合、配列はサイズ3で[1,2,9]が要素であり、6の場合、配列サイズは6であり、[1,1,3,4,4,6]が要素です。

また、入力が0の場合、プログラムは終了します。

whileループを使用し、input [0] = '0'でブレークすると、プログラムを終了できると思いますが、他の入力をchar配列に取り込む方法がわかりません。

ご覧のとおり、スペースがあるため、scanfはすべての整数を異なる方法でchar配列に読み込みます。

charの入力を取得したら、atoiを使用して整数に戻すことができると思います...

だから、ユーザー入力を正しく取得するためにどのようにコーディングする必要があるかを教えてください...

多分これはあまりにも曖昧でした:これが私がちょっと欲しいバージョンです:

while(1)
{
    scanf("%d", &ui);

    if(ui == 0)
    {
        break;
    }
    else
    {   
        size = ui;
        int temp[size];

        for(c = 0; c < size; c++)
        {
            scanf("%d", &input);
            temp[c] = input;
        }
    }
}

出力は最初の配列には適していますが、その後はtemp [size]のため、奇妙な出力になります。これを修正する方法はありますか?配列のサイズをユーザーが希望するサイズにしたいと思います。(例えば、私が上で書いた入力の場合:3と6)

4

1 に答える 1

2

最初の数字を取得するのは簡単なはずです。スペースを読みたいと考えている「数字の文字列」については、scanf()の否定されたスキャンセットを使用するようなことを簡単に行うことができます。

char input[100];
scanf("%99[^\n]", input);

あるいは単にfgets()

char input[100];
fgets(input, sizeof input, stdin);

次に、ご想像のとおりwhile、最初の数値が0になるのを待つループに入れます。

> I believe I can use atoi to make it back to integers

それらがすべて1桁の場合(例のように)'0'、それらからの値を減算するだけで、値を取得できintます。

于 2013-02-26T12:32:33.147 に答える