auの日記

プログラミング初心者の日記。(auはハンドルネームです)

きのうのプログラムを修正しようとした

auです。
今回はきのうのプログラムを修正して該当のidがなかった場合に「該当するidは存在しませんでした」と表記するプログラムを組んでみました。

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

int main(void) {
    int student_id = 0;
    int student_id_t[] = {1, 2, 3, 4, 5};
    char student_name[50] = "";
    char student_name_t[][10] = {"Sato", "Suzuki", "Tanaka", "Goto", "Takahashi"};

    printf("学生id: ");
    scanf("%d", &student_id);
    for (int i = 0; i < 100; i++) {
        if (student_id == i) {
            strcpy(student_name, student_name_t[i - 1]);
            break;
        } else if (student_id != i) {
            strcpy(student_name, "該当するidは存在しませんでした");
        }
    }
    printf("%s\n", student_name);

    return 0;
}

// 実行結果
学生id: 9
存在しませんでした

// 実行結果2
学生id: 5
Takahashi

ifで該当するidが存在した場合はbreakでループを抜け出すようにし、該当するidがなかった場合はelifに処理が移り「該当するidは存在しませんでした」の文をコピーするようにしました。
最初の方は

*** stack smashing detected ***: ./a.out terminated
Aborted (core dumped)

と表記がでていてなんだこれ?と思い調べたところ、charの範囲が超過していると書いてあったため、student_nameを「該当するidは存在しませんでした」の文が入るように調整したところ解決しました。