この記事では、C言語におけるgetchar関数
とscanf関数
の違いについて解説します。
また、入力の取得方法や扱い方、エラーハンドリングの違いについても詳しく説明します。
getchar関数とscanf関数の違い
C言語において、ユーザーからの入力を受け取るためには、getchar関数
とscanf関数
の2つの方法があります。
この記事では、getchar関数
とscanf関数
の違いについて詳しく説明します。
入力の取得方法の違い
getchar関数
は、1文字ずつ入力を受け取る関数です。
プログラムはユーザーがEnterキーを押すまで待機し、その後に入力された文字を1文字ずつ取得します。
この関数は、文字列ではなく単一の文字を取得するため、1文字ずつ処理する必要があります。
一方、scanf関数
は、指定したフォーマットに従って入力を受け取る関数です。
ユーザーがEnterキーを押すと、scanf関数
は入力を受け取り、指定した変数に値を格納します。
scanf関数
は、スペースや改行文字を区切りとして入力を受け取るため、複数の値を一度に受け取ることができます。
以下に、getchar関数
とscanf関数
の入力の取得方法の違いを示すサンプルコードを示します。
#include <stdio.h>
int main() {
char c;
int num;
printf("1文字入力してください:");
c = getchar();
printf("入力された文字:%c\n", c);
printf("整数を入力してください:");
scanf("%d", &num);
printf("入力された整数:%d\n", num);
return 0;
}
上記のコードでは、getchar関数
を使って1文字の入力を受け取り、scanf関数
を使って整数の入力を受け取っています。
入力の扱い方の違い
getchar関数
は、1文字ずつ入力を受け取るため、文字列を受け取る場合にはループを使用して1文字ずつ処理する必要があります。
一方、scanf関数
は指定したフォーマットに従って入力を受け取るため、文字列を受け取る場合でもループを使用せずに一度に受け取ることができます。
以下に、getchar関数
とscanf関数
の入力の扱い方の違いを示すサンプルコードを示します。
#include <stdio.h>
int main() {
char str[100];
printf("文字列を入力してください:");
int i = 0;
while ((str[i] = getchar()) != '\n') {
i++;
}
str[i] = '\0';
printf("入力された文字列:%s\n", str);
printf("文字列を入力してください:");
scanf("%s", str);
printf("入力された文字列:%s\n", str);
return 0;
}
上記のコードでは、getchar関数
を使って1文字ずつ入力を受け取り、文字列を作成しています。
一方、scanf関数
を使って文字列を受け取っています。
エラーハンドリングの違い
getchar関数
は、エラーハンドリングを行うための機能を提供していません。
入力が正常に行われなかった場合でも、プログラムはエラーメッセージを表示せずに続行します。
一方、scanf関数
は、入力のエラーハンドリングを行うための機能を提供しています。
入力が指定したフォーマットに合わない場合、scanf関数
はエラーメッセージを表示し、入力を再試行するかどうかをユーザーに尋ねることができます。
以下に、scanf関数
のエラーハンドリングの例を示します。
#include <stdio.h>
int main() {
int num;
printf("整数を入力してください:");
while (scanf("%d", &num) != 1) {
printf("正しい形式で入力してください:");
while (getchar() != '\n');
}
printf("入力された整数:%d\n", num);
return 0;
}
上記のコードでは、scanf関数
を使って整数の入力を受け取り、入力が正しい形式であるかどうかを確認しています。
もし入力が正しくない場合、エラーメッセージを表示し、入力を再試行するようにしています。
以上が、getchar関数
とscanf関数
の違いについての説明です。
getchar関数
は1文字ずつ入力を受け取るため、文字列の入力やエラーハンドリングには向いていませんが、scanf関数
は指定したフォーマットに従って入力を受け取るため、より柔軟な入力処理が可能です。
プログラムの要件に応じて、適切な関数を選択してください。