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

【C言語】getc()・getchar()・getch()・getche()関数の違いを徹底解説


C言語には、キーボードやファイルから1文字を読み取るための入力関数が複数用意されています。getc()、getchar()、getch()、getche()はいずれも入力から1文字を取得する関数ですが、読み取り元やバッファの扱い、画面への表示(エコー)の有無など、動作に重要な違いがあります。また、これらの関数はすべて読み取った文字を整数型(int)として返します。

以下に、それぞれの関数の特徴と違いを詳しく解説します。

getc()

getc()は、任意のストリーム(ファイルポインタや標準入力stdinなど)から1文字を読み取れる汎用的な関数です。読み取りに失敗した場合やストリームの終端に達した場合はEOFを返します。

構文

int getc(FILE *stream);

getchar()

getchar()は、標準入力(stdin)からのみ文字を読み取る関数です。内部的にはgetc(stdin)と同等の動作をします。入力はバッファリングされるため、Enterキーが押されるまで読み取りは完了しません。

構文

int getchar();

getch()

getch()は、標準入力から1文字を読み取りますが、バッファを使用しません。そのため、Enterキーが押されるのを待たずに、キーが押された瞬間に即座に処理を返します。また、入力された文字は画面に表示されません(ノンエコー)。パスワード入力などの用途に適しています。なお、この関数は<conio.h>で定義されており、主にWindows環境で利用できる非標準関数です。

構文

int getch();

getche()

getche()はgetch()とほぼ同じ動作をします。標準入力からバッファを使わずに文字を読み取り、Enterキーを待たずに即座に返ります。唯一の違いは、入力された文字を画面にエコー表示する点です。こちらも<conio.h>が必要な非標準関数です。

構文

int getche();

4つの関数の比較一覧

関数読み取り元バッファエコー表示ヘッダーファイル
getc()任意のストリームありあり<stdio.h>
getchar()標準入力のみありあり<stdio.h>
getch()標準入力なしなし<conio.h>
getche()標準入力なしあり<conio.h>

サンプルコード

#include <stdio.h>
#include <conio.h>

int main() {
    printf("%c", getc(stdin));
    printf("%c", getchar());
    printf("%c", getch());
    printf("%c", getche());
    return 0;
}

実行結果

A
B
C
D
EE

このプログラムでは、getc()・getchar()・getch()で入力した文字がそれぞれ1回ずつ出力されます。最後のgetche()では、入力文字が画面にエコー表示され、さらにprintf()によっても出力されるため、同じ文字が2つ続けて表示されます。一方、getch()はエコー表示を行わないため、printf()による出力のみが1回だけ表示されます。

なお、getc()とgetchar()はISO C規格で定義された標準関数のため移植性が高い一方、getch()とgetche()は環境依存の非標準関数であり、主にWindows(DOS系)環境でのみ使用できます。クロスプラットフォームな開発では注意が必要です。


  1. 【C言語】getc()・getchar()・getch()・getche()関数の違いを徹底解説

    C言語には、キーボードやファイルから1文字を読み取るための入力関数が複数用意されています。getc()、getchar()、getch()、getche()はいずれも入力から1文字を取得する関数ですが、読み取り元やバッファの扱い、画面への表示(エコー)の有無など、動作に重要な違いがあります。また、これらの関数はすべて読み取った文字を整数型(int)として返します。以下に、それぞれの関数の特徴と違いを詳しく解説します。getc()getc()は、任意のストリーム(ファイルポインタや標準入力stdinなど)から1文字を読み取れる汎用的な関数です。読み取りに失敗した場合やストリームの終端に達した場合

  2. Pythonのraw_input()とinput()の違いとは?わかりやすく解説

    Python 2では、ユーザーからのキーボード入力を受け取るために「raw_input()」と「input()」という2つの組み込み関数が用意されていました。名前は似ていますが、この2つには動作面で重要な違いがあります。 raw_input()関数の基本的な使い方 raw_input()は、引数として渡した文字列をプロンプト(入力を促すメッセージ)として画面に表示し、ユーザーが入力した内容を取得します。そして、入力されたデータは必ず文字列(str型)として返されるのが特徴です。 name = raw_input(What is your name? ) print Hello, %s. %