Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のgetchar()、fgetc()、getc()関数の戻り値の型と使い方を解説

Cプログラミングにおける文字入力関数 getchar()fgetc()getc() は、いずれも読み取った1文字を int 型として返します。ファイルの終端に達した場合やエラーが発生した場合には EOF を返す点も共通しています。本記事では、それぞれの関数の特徴と具体的な使用例をサンプルコード付きで詳しく解説します。

getchar() 関数とは

getchar() は標準入力(stdin)から1文字を読み取る関数です。読み取った文字は整数値(int 型)として返され、エラー発生時やファイル終端に達した場合は EOF を返します。

サンプルプログラム

#include <stdio.h>

int main (){
    int i;

    printf("Enter a character: ");
    i = getchar();

    printf("\nThe character entered is: ");
    putchar(i);

    return(0);
}

実行結果

Enter a character: G
The character entered is: G

プログラムの解説

このプログラムでは、getchar() で取得した値を整数型変数 i に格納しています。その後、putchar() を使って文字として画面に表示します。該当するコード部分は以下の通りです。

int i;

printf("Enter a character: ");
i = getchar();

printf("\nThe character entered is: ");
putchar(i);

fgetc() 関数とは

fgetc() は、FILE オブジェクトへのポインタで指定されたファイルストリームから1文字を読み取る関数です。読み取った文字を int 型で返し、エラー時やファイル終端では EOF を返します。標準入力だけでなく、任意のファイルを扱える点が特徴です。

サンプルプログラム

#include <stdio.h>

int main (){
    FILE *fp;
    fp = fopen("file.txt", "w");
    fprintf(fp, "Apple");
    fclose(fp);

    int i;

    fp = fopen("file.txt","r");
    
    if(fp == NULL){
        perror("Error in opening file");
        return(-1);
    }

    while((i=fgetc(fp))!=EOF){
        printf("%c",i);
    }

    fclose(fp);
    return(0);
}

実行結果

Apple

プログラムの解説

まず、書き込みモードでファイルを作成し、「Apple」というデータを書き込んだ後、ファイルをクローズします。該当するコードは以下の通りです。

FILE *fp;
fp = fopen("file.txt", "w");
fprintf(fp, "Apple");
fclose(fp);

次に、同じファイルを読み込みモードで再度開きます。fp が NULL の場合はエラーメッセージを表示して終了し、そうでなければ fgetc() を使ってファイルの内容を1文字ずつ読み出して表示します。

fp = fopen("file.txt","r");

if(fp == NULL){
    perror("Error in opening file");
    return(-1);
}

while((i=fgetc(fp))!=EOF){
    printf("%c",i);
}

fclose(fp);

getc() 関数とは

getc() は、引数で指定されたストリームから1文字を読み取る関数です。戻り値は fgetc() と同様に int 型で、エラー時やファイル終端では EOF を返します。多くの実装では getc() はマクロとして定義されており、関数呼び出しのオーバーヘッドがない分、わずかに高速な場合があります。ただし、マクロであるため引数に副作用を含む式を渡すのは避けるべきです。

サンプルプログラム

#include <stdio.h>

int main (){
    int i;

    printf("Enter a character: ");
    i = getc(stdin);

    printf("\nThe character entered is: ");
    putchar(i);

    return(0);
}

実行結果

Enter a character: K
The character entered is: K

プログラムの解説

このプログラムでは、指定されたストリーム stdin から getc() を使って1文字を読み取り、その値を整数型変数 i に格納しています。その後、putchar() で文字として表示します。

int i;

printf("Enter a character: ");
i = getc(stdin);

printf("\nThe character entered is: ");
putchar(i);

まとめ:3つの関数の違い

  • getchar():常に標準入力(stdin)から1文字を読み取る。
  • fgetc():任意の FILE ストリームから1文字を読み取る関数。
  • getc()fgetc() と同等だが、多くの環境でマクロとして実装されているため高速な場合がある。

いずれの関数も戻り値は int 型であり、EOF との比較を正しく行うために char 型ではなく int 型の変数で受け取ることが重要です。

  1. C言語のfgets()・fputs()関数によるファイル文字列入出力の解説

    ファイルとは、レコードの集合体であり、データを恒久的に保存しておくためのハードディスク上の場所のことです。C言語では、これらのファイルに対してさまざまな入出力操作を行うことができます。ファイルに対する主な操作C言語でファイルに対して行える基本的な操作には、以下のようなものがあります。ファイルの命名ファイルのオープンファイルからの読み込みファイルへの書き込みファイルのクローズ基本の書式まず、ファイルポインタを宣言する構文は以下のとおりです。FILE *ファイルポインタ;宣言例:FILE *fptr;続いて、ファイル名を指定してファイルを開く構文は以下のとおりです。ファイルポインタ = fopen

  2. 【C言語】putc関数とgetc関数を使ってファイルに1文字ずつ書き込み・読み込みする方法

    ファイルとは ファイル(File)とは、レコードの集まりを指し、ハードディスク上にデータを恒久的に保存しておくための場所のことです。プログラムが終了してもデータが失われないよう、永続的な保存が必要な場合にファイルが利用されます。 ファイルに対する主な操作 C言語におけるファイル操作は、基本的に以下の手順で行います。 ファイル名を指定する ファイルを開く ファイルから読み込む ファイルへ書き込む ファイルを閉じる 基本構文 まず、ファイルを扱うためのファイルポインタを宣言します。 FILE *ファイルポインタ; 宣言の例: FILE *fptr; 次に、fopen関数を使ってファイルを開きま