getc() – getchar() — 文字の読み取り
フォーマット
#include <stdio.h>
int getc(FILE *stream);
int getchar(void);
言語レベル
ANSI
スレッド・セーフ
いいえ
#undef getc または #undef getchar は、getc または getchar 関数のマクロ・バージョンの代わりに、これらの関数の呼び出しを許可します。
関数はスレッド・セーフです。
説明
getc() 関数は、現在の stream 位置から単一文字を読み取り、stream 位置を次の文字に進めます。 getchar() 関数は getc(stdin) と同じです。
getc() 関数と fgetc() 関数の違いは、getc() の場合、引数の評価が複数回にわたって行われるように実装可能なことです。 したがって、getc() に対する stream 引数は、副次作用のある式にはしないでください。
戻り値
getc() および getchar() 関数は、読み取られた文字を戻します。 EOF に戻り値がある場合は、エラーまたは EOF 条件を表します。 ferror() または feof() を使用すると、エラーまたは EOF 条件のいずれが発生したかを判別することができます。
errno の値は、次のいずれかに設定されます。
- 値
- 意味
- EBADF
- ファイル・ポインター、または記述子が有効ではありません。
- ECONVERT
- 変換エラーが発生しました。
- EGETANDPUT
- 書き込み操作後に、無許可の読み取り操作が発生しました。
- EIOERROR
- リカバリー不能な入出力エラーが発生しました。
- EIORECERR
- リカバリー可能な入出力エラーが発生しました。
getc() および getchar() 関数はレコード・モードではサポートされません。
例
この例では、入力データ行を stdin ストリームから取得しています。
getc(stdin) を getchar() の代わりに for ステートメントで使用して、stdin から入力データ行を取得できます。
#include <stdio.h>
#define LINE 80
int main(void)
{
char buffer[LINE+1];
int i;
int ch;
printf( "Please enter string¥n" );
/* Keep reading until either:
1. the length of LINE is exceeded or
2. the input character is EOF or
3. the input character is a new-line character
*/
for ( i = 0; ( i < LINE ) && (( ch = getchar()) != EOF) &&
( ch !='¥n' ); ++i )
buffer[i] = ch;
buffer[i] = '\0'; /* a string should always end with '\0' ! */
printf( "The string is %s¥n", buffer );
}