puts関数とfgets関数

 getchar関数とputchar関数は、1文字ずつ入出力するための関数です。1文字ずつではなく、文字列のようにまとまった文字で扱いたい場合は、入力にfgets関数、出力にputs関数を用います。

 以下のプログラムを書いて実行してみて下さい。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    char input[30];
    
    printf("文字を入力して下さい。\n");
    
    fgets(input, sizeof(input), stdin);
    puts(input);
    
    return 0;
}

 実行すると、以下のような内容が出力され、処理が一時ストップします。

文字を入力して下さい。

 ここで半角のabcを入力し、エンターを押します。すると、

文字を入力して下さい。
abc
abc

 このように表示されます。ほとんどputchar関数・getchar関数と同じですが、入力した文字列を格納する変数がint型ではなくchar型の配列にすることと、「input = fgets();」ではない点に注意して下さい。

 Tips:参考書やサイトによっては「gets関数」という関数を紹介されているかと思います。しかし、最近の開発環境(Xcode等のソフトウェア)では、gets関数を用いると「Warning」という文字と「この命令は安全ではない」という旨の英語の警告が出る場合があります。セキュリティ上の問題が発覚したためのもので、命令自体は利用できますが、毎回のように警告が出ます。今回のような学習の際に利用するのは構いませんが、システム開発などの仕事上でC言語を用いる場合は、gets関数の利用は控えた方が良いかと思います。今回の記事でも、gets関数の代用として推奨されているfgets関数を利用しています。元々はファイル入出力に関する関数でして、詳細は今後の記事でご紹介しますので、現時点では引数については気にしないで下さい。

 さて、puts関数・fgets関数でも、ループを使った応用的な使い方をご紹介します。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    char input[30];
    
    printf("文字を入力して下さい。\n");
    
    while (fgets(input, sizeof(input), stdin) != NULL) {
        puts(input);
    }
    
    printf("プログラム終了。\n");
    
    return 0;
}

 fgets関数に「NULL」が送られたときにループを抜けます。入力の際にNULLを送る方法は、EOFの場合と同じでWindowsの場合「Ctrl + z」、Macの場合は「Control + d」です。getchar関数の場合はEOF、fgets関数の場合はNULLであると覚えておいて下さい。

■スポンサーリンク

このページの先頭へ