目次から探す
scanf関数の注意点とトラブルシューティング
scanf関数
は便利な入力関数ですが、使い方によっては注意が必要な場合があります。
また、予期しないエラーが発生することもあります。
ここでは、scanf関数
の注意点とトラブルシューティングについて解説します。
入力バッファのクリア
scanf関数
を使って入力を受け取る際、入力バッファに残っている改行文字や空白文字などが次の入力に影響を与えることがあります。
これを防ぐために、scanf関数
の前に fflush(stdin)
を呼び出すことがあります。
#include <stdio.h>
int main() {
int num;
char ch;
printf("整数を入力してください:");
fflush(stdin); // 入力バッファのクリア
scanf("%d", &num);
printf("文字を入力してください:");
fflush(stdin); // 入力バッファのクリア
scanf("%c", &ch);
printf("入力された整数:%d\n", num);
printf("入力された文字:%c\n", ch);
return 0;
}
上記の例では、 fflush(stdin)
を使って入力バッファをクリアしています。
これにより、前の入力が次の入力に影響を与えることがなくなります。
入力エラーの処理
scanf関数
は、入力の形式が期待通りでない場合にエラーを返します。
このエラーを適切に処理することが重要です。
#include <stdio.h>
int main() {
int num;
printf("整数を入力してください:");
if (scanf("%d", &num) != 1) {
printf("入力エラーが発生しました。\n");
return 1;
}
printf("入力された整数:%d\n", num);
return 0;
}
上記の例では、scanf関数
の戻り値をチェックしています。
戻り値が1でない場合、つまり入力エラーが発生した場合にエラーメッセージを表示しています。
文字列の入力時の注意点
scanf関数
を使って文字列を入力する場合、文字列の長さに制限がないため、バッファオーバーフローの危険性があります。
これを防ぐためには、文字列の入力時には%s
ではなく%Ns
という形式を使うことが推奨されています。
ただし、N
はバッファのサイズを表す数字です。
#include <stdio.h>
int main() {
char name[20];
printf("名前を入力してください(最大19文字):");
scanf("%19s", name);
printf("入力された名前:%s\n", name);
return 0;
}
上記の例では、%19s
というフォーマット指定子を使って、最大19文字までの文字列を入力するようにしています。
これにより、バッファオーバーフローを防ぐことができます。
以上がscanf関数
の注意点とトラブルシューティングの解説です。
これらのポイントを押さえて、正しくscanf関数
を使いましょう。