きのうのプログラムを修正しようとした
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は存在しませんでした」の文が入るように調整したところ解決しました。