プログラミング

C言語超入門⑥ 配列と文字列を使おう

複数の値をまとめる配列、添字、文字列、fgets、strlenの基本を短いコードで学びます。

第6回では、複数の値をまとめて扱う配列と、C言語での文字列の扱い方を学びます。

この回でできるようになること

  • 配列を作って値を取り出す
  • 繰り返しですべての要素を処理する
  • charの配列で文字列を扱う
  • fgetsで1行の入力を受け取る

配列を作る

同じ型の値を順番に並べたものが配列です。

int scores[5] = {72, 88, 95, 64, 81};

角かっこの5は、保存できる値の数です。配列の各場所には、0から始まる番号が付いています。この番号を添字と呼びます。

printf("最初の点数: %d\n", scores[0]);
printf("3番目の点数: %d\n", scores[2]);

5個の配列で使える添字は0から4までです。範囲の外へアクセスすると、正しく動かない原因になります。

for文で配列を読む

int scores[5] = {72, 88, 95, 64, 81};
int total = 0;

for (int i = 0; i < 5; i++) {
    total += scores[i];
}

printf("合計: %d\n", total);
printf("平均: %.1f\n", total / 5.0);

total += scores[i]は、total = total + scores[i]を短く書いたものです。5.0で割ることで、小数の平均を求めています。

C言語の文字列

C言語に文字列専用の型はありません。文字を保存するcharの配列を使います。

char name[] = "Sora";

printf("%sさん、こんにちは\n", name);

%sは文字列を表示する書式指定子です。文字列の最後には、終わりを示す特殊な文字\0が自動で入ります。

fgetsで1行を入力する

#include <stdio.h>

int main(void) {
    char name[50];

    printf("名前を入力してください: ");
    fgets(name, sizeof(name), stdin);

    printf("こんにちは、%s", name);
    return 0;
}

sizeof(name)は、nameへ入れられる大きさを調べています。fgetsは空白を含む1行を受け取れます。

入力の最後にある改行もnameへ入るため、この例のprintfには\nを付けていません。

文字列の長さを調べる

string.hを読み込むと、strlen関数を使えます。

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

int main(void) {
    char word[] = "code";
    printf("文字数: %zu\n", strlen(word));
    return 0;
}

練習してみよう

5個の整数を配列へ入れ、最大の値をfor文で探してみましょう。

模範解答

#include <stdio.h>

int main(void) {
    int numbers[5] = {12, 7, 24, 9, 18};
    int maximum = numbers[0];

    for (int i = 1; i < 5; i++) {
        if (numbers[i] > maximum) {
            maximum = numbers[i];
        }
    }

    printf("最大値は%dです。\n", maximum);
    return 0;
}

解説

最初の値を仮の最大値にして、2番目以降と順番に比べます。より大きい値が見つかったときだけmaximumを更新します。maximumを0から始めると、すべて負の数の配列で正しく判定できないため、最初の要素を使っています。

この回のまとめ

  • 配列には同じ型の値を複数保存できる
  • 配列の添字は0から始まる
  • C言語の文字列はcharの配列
  • fgetsは空白を含む1行を受け取れる

前の回 / 次の回:ポインタ

← 記事一覧へ戻る