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

C言語の書式なし入出力関数とは?getchar・gets・putchar・putsの使い方を解説

C言語には、printf() や scanf() のような書式指定子を使わずにデータをそのまま扱う「書式なし(アンフォーマット)入出力関数」が用意されています。これらの関数は、ユーザーが入力した単一のデータを読み取り、その値をコンソールに出力として表示するために使用されます。

書式なし入力関数

C言語でよく使われる書式なし入力関数には、以下の2つがあります。

getchar()

キーボードから1文字を読み取る関数です。

構文は次のとおりです。

変数名 = getchar();

使用例:

char a;
a = getchar();

getchar() を使ったサンプルプログラム

以下は、getchar() 関数を使用したCプログラムの例です。キーボードから入力された文字をファイルに書き込み、その後、ファイルから単語ごとに読み出して表示します。

#include<stdio.h>
int main(){
    char ch;
    FILE *fp;
    fp = fopen("file.txt", "w"); // ファイルを書き込みモードで開く
    printf("テキストを入力し、Ctrl+Z を押してください:\n");
    while((ch = getchar()) != EOF){
        putc(ch, fp);
    }
    fclose(fp);
    fp = fopen("file.txt", "r"); // ファイルを読み込みモードで開く
    if(fp){
        char word[100];
        printf("ファイル内のテキスト:\n");
        while(fscanf(fp, "%s", word) != EOF){ // ファイルから単語を読み込む
            printf("%s\n", word); // 各単語を別々の行に表示
        }
        fclose(fp); // ファイルを閉じる
    }else{
        printf("ファイルが存在しません"); // ファイルがないことをユーザーに通知
    }
    return 0;
}

このプログラムを実行すると、次のような結果が出力されます。

テキストを入力し、Ctrl+Z を押してください:
This is an example program on getchar()
^Z
ファイル内のテキスト:
This
is
an
example
program
on
getchar()

gets()

キーボードから文字列を1行読み取る関数です。

構文は次のとおりです。

gets(変数名);
注意: gets() は入力サイズをチェックしないためバッファオーバーフローの危険性があり、C11規格では標準ライブラリから削除されました。実際の開発では、安全な fgets() の使用が強く推奨されます。

gets() を使ったサンプルプログラム

#include<stdio.h>
#include<string.h>
int main(){
    char str[10];
    printf("名前を入力してください:\n");
    gets(str);
    printf("こんにちは %s さん、ようこそ!", str);
    return 0;
}

実行結果:

名前を入力してください:
Madhu
こんにちは Madhu さん、ようこそ!

書式なし出力関数

C言語でよく使われる書式なし出力関数には、以下の2つがあります。

putchar()

モニター(標準出力)に1文字を表示する関数です。

構文は次のとおりです。

putchar(変数名);

使用例:

putchar('a');

puts()

モニターに文字列を表示する関数です。表示の後に自動的に改行が行われる点が特徴です。

構文は次のとおりです。

puts(変数名);

使用例:

puts("tutorial");

putc・getc・putchar を組み合わせたサンプルプログラム

以下は、getc() と putc() でファイルに入出力し、putchar() で画面に表示するCプログラムの例です。

#include <stdio.h>
int main(){
    char ch;
    FILE *fp;
    fp = fopen("std1.txt", "w");
    printf("テキストを入力し、Ctrl+Z を押してください:\n");
    while((ch = getchar()) != EOF){
        putc(ch, fp);
    }
    fclose(fp);
    fp = fopen("std1.txt", "r");
    printf("ファイル内のテキスト:\n");
    while((ch = getc(fp)) != EOF){
        putchar(ch);
    }
    fclose(fp);
    return 0;
}

このプログラムを実行すると、次のような結果が出力されます。

テキストを入力し、Ctrl+Z を押してください:
This is an example program on putchar()
^Z
ファイル内のテキスト:
This is an example program on putchar()

まとめ

各関数の役割を整理すると、以下のようになります。

  • getchar():キーボードから1文字を読み取る
  • gets():キーボードから1行の文字列を読み取る(現在は非推奨)
  • putchar():画面に1文字を表示する
  • puts():画面に文字列を表示する(自動改行あり)

書式なし入出力関数を使いこなすことで、シンプルな文字単位・文字列単位のデータ処理を効率的に行えるようになります。

  1. C言語入門:モノリシックプログラミングとモジュラープログラミングの違いを徹底解説

    本記事では、C言語におけるモノリシックプログラミングとモジュラープログラミングの違いを、それぞれのメリット・デメリットとともに詳しく解説します。 モノリシックプログラミングとは プログラム全体を1つの関数、すなわちmain関数だけですべて記述する方式を「モノリシック(一枚岩)型プログラミング」と呼びます。しかし、すべてのロジックを単一の関数に詰め込むのは、良いプログラミングスタイルとは言えません。 デメリット モノリシックプログラミングには、以下のような欠点があります。 プログラムが非常に大きく、複雑になりやすい。 デバッグ、テスト、保守が非常に困難になる。 モジュラープログラミングとは

  2. C言語のループ制御文(for・while・do-while)を徹底解説!フローチャートとサンプルコード付き

    C言語におけるループ制御文は、同じ処理を何度も繰り返し実行したい場合に使われる重要な構文です。毎回コードを書き連ねる必要がなくなり、プログラムを簡潔かつ効率的に記述できます。 C言語で利用できるループ制御文は、主に以下の3種類です。 for文 while文 do-while文 本記事では、それぞれの構文の書き方、フローチャートによる動作の流れ、実際に動くサンプルプログラムと実行結果まで、初心者にもわかりやすく解説します。 for文とは?基本構文と使い方 for文は、「初期化」「条件式」「増減式」を1行にまとめて記述できる、最もよく使われるループ構文です。繰り返す回数があらかじめ決まっている