C言語のgetchar関数とscanf関数の違いをわかりやすく詳しく解説

この記事では、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関数は指定したフォーマットに従って入力を受け取るため、より柔軟な入力処理が可能です。

プログラムの要件に応じて、適切な関数を選択してください。

目次から探す