Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. C言語辞典
  3. putchar() / getchar() / puts() / gets_s()

putchar() / getchar() / puts() / gets_s()

1文字・1行単位で標準入出力を行う関数です。いずれも『<stdio.h>』に定義されており、printf()/scanf() よりシンプルな入出力に適しています。

構文
// 1文字を標準出力に書き込みます(fputc(c, stdout) と同等)。
// 戻り値: 成功時は書き込んだ文字、エラー時は EOF。
int putchar(int c);

// 標準入力から1文字読み込みます(fgetc(stdin) と同等)。
// 戻り値: 読み込んだ文字(int 型)、EOF またはエラー時は EOF。
int getchar(void);

// 文字列を標準出力に書き込み、末尾に改行を自動付加します。
// 戻り値: 成功時は非負の値、エラー時は EOF。
int puts(const char *str);

// 標準入力から最大 n-1 文字を読み込みます(C11以降、gets() の安全な代替)。
// 戻り値: 成功時は str、失敗時は NULL。
char *gets_s(char *str, rsize_t n);
関数一覧
関数方向概要
putchar()出力1文字を標準出力に書き込みます。文字を int 型で受け取ります。
getchar()入力標準入力から1文字読み込みます。戻り値は int 型で、EOF と区別できます。
puts()出力文字列を標準出力に書き込み、末尾に改行文字('\n')を自動的に付加します。
gets_s()入力標準入力から1行読み込みます。バッファサイズを指定して安全に使用できます(C11以降)。
サンプルコード
#include <stdio.h>

int main(void) {
    // puts で文字列を出力します(末尾に改行が自動付加されます)。
    puts("Hello, World!");   // 『Hello, World!』と出力され、改行されます。
    puts("C言語の勉強中!"); // 続けて出力されます。

    // putchar で1文字ずつ出力します。
    putchar('A'); // 『A』と出力されます。
    putchar('B');
    putchar('C');
    putchar('\n'); // 改行します。

    // getchar で1文字ずつ読み込み、putchar で1文字ずつ出力します。
    // (標準入力から文字を読み込んで、大文字か確認する例)
    printf("1文字入力してください: ");
    int ch = getchar(); // 入力待ちになります。
    if (ch >= 'a' && ch <= 'z') {
        printf("小文字です: %c\n", ch);
    } else if (ch >= 'A' && ch <= 'Z') {
        printf("大文字です: %c\n", ch);
    } else {
        printf("英字以外です: %c\n", ch);
    }

    return 0;
}
概要

『puts()』は末尾に自動的に改行('\n')を付加します。printf() で同じことをするには改行文字を明示する必要がありますが、『puts()』はその手間が省けます。ただし、改行が不要な場合には向きません。

『getchar()』の戻り値は必ず『int』型で受け取ってください。char 型で受け取ると、char が符号付きの環境では EOF(-1)が 255 と混同され、入力ループが正しく終了しないことがあります。

gets() は廃止された危険な関数です。C11 で標準から削除されました。バッファサイズを指定できないためバッファオーバーフローが発生します。代わりに『gets_s()』(C11以降)または『fgets()』を使用してください。

ファイルへの読み書きには『fgets() / fputs() / fgetc() / fputc()』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。