ほぷしぃ

納得C言語!

[第12回]演習問題III 第2問の解答

演習問題III 第2問の解答


2 複数文字列の格納

解答プログラム

#include <stdio.h>
#include <string.h>

int main()
{
    //2次元配列strの宣言
    //配列の数は余裕を持って宣言しています
    char str[256][256];
    int i=0;

    printf("何か入力してよね!\n");

    //無限ループ
    while(1){
        //i番目の配列に文字列を格納
        scanf("%s",str[i]);
        //入力された文字列が"END"の場合
        //無限ループから抜ける
        if(strcmp(str[i],"END")==0){
            //"END"を表示させないため
            //iを減らす
            i--;
            break;
        }
        i++;
    }
    //このときiには入力された
    //文字列の数が入っている

    //iがに0なるまでiを減らす
    for(i;i>=0;i--){
        printf("%s\n",str[i]);
    }
    return 0;
}

解説

文字列を複数格納するために、2次元配列を用意します。
このとき、格納される文字列は不定になるため、多めに用意しておきましょう。
次に、入力された文字列を格納していきます。
格納する文字列の数が不定なため、whileで無限ループを作るといいですね。
scanfでstr[i]となっているのは、i番目の配列に文字列を格納するということです。
このときも格納するのは文字列なので先頭に&は必要ありませんね。
ENDが入力されたら終了なので、文字列比較のstrcmp関数を使って入力されたら終了とします。
このとき、ENDは表示させたくないので、iを1引いておきます。
そうすれば、iには格納された文字列の数が入っていますね。
表示させるにはiが0になるまで1減らしていき、表示させます。


ヒント ページのトップ 第3問