忍者ブログ
Profile
HN:gp-hss

職業:高校生

趣味:3DCG

言語:C全般

環境:VC++ 2008 EE

3DCG:Softimage Mod Tool

自己紹介:
ゲームプログラマー目指して勉強している者です。
現在 C++ 修得にむけて頑張っています。

Began study since 2009/8/21

Latest CM
[06/28 soulmorning]
Latest TB
18  17  16  15  14  13  12  11  10  9  8 
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

author : gp-hss ×

前々から言っていた類似関数の説明をしていきます。
具体的には、putc , putchar , puts , getc , getch , getchar , gets , fgets , scanf です。

・putc(プットシー)
    第一引数に指定した文字を第二引数で指定した出力ストリームに出力しま    す。

    putc('C', stdout);

    重要なのは出力ストリームを指定できるということです。
    基本的には fputc と同じです。

・putchar(プットチャー)
    第一引数に指定された文字を標準出力ストリームに出力します。

    putchar('C');

    重要なのは、出力は標準出力ストリームにされるということです。

・puts(プットエス)
    第一引数に指定された文字列へのポインタが指す文字列を標準出力ストリ    ームに出力する。

          puts("string");

          最後は改行されます。

・getc(ゲットシー)
    第一引数で指定された入力ストリームから文字を読み込みます。

    getc(stdin);

    これは入力ストリームを指定することができます。
    基本的には fgetc と同じです。

・getch(ゲットシーエイチ)
    標準入力ストリームからエコーなしで文字を読み込みます。
    つまり文字を入力するごとに ENTER を押す必要はありません。

    getch();

    ENTER を押さずに文字を読み込む。

・getchar(ゲットチャー)
    標準入力ストリームから文字を読み込みます。

    getchar();

    ENTER を押さないと読み込みが終了しません。

・gets(ゲットエス)
    第一引数で指定したオブジェクトに標準入力ストリームから1行分の文字列    を読み込み、格納します。

    char str[10];
    gets(str);

    ENTER を押して読み込みを終了したあと、改行文字を終端文字 \0 に変換    します。
    また、この関数はバッファオーバーランを防ぐことができません。
    fgets を用いることでバッファオーバーランの問題を防ぐことができる。

・fgets(エフゲットエス)
    第一引数で読み込んだ文字列を格納するオブジェクトを指定。
    第二引数で読み込める文字列のサイズを指定します。
    第三引数で入力ストリームを指定します。

    char str[20];

    fgets(str, 20, stdin);

    改行文字もサイズ内に含み、最後に終端文字 \0 を付与します。
    ですので格納される改行文字を考慮したサイズ数にしなければいけませ    ん。
    サイズ以上の文字列を入力した場合、例えば今回の場合は、
    20バイト以上文字列を入力した場合、それ以降に入力したものは入力ストリ    ームに残ってしまいます。
    20バイト以内なら入力ストリームには何も残りません。

・scanf(スキャンエフ)
    第一引数には変換指定を指定します(複数可)。
    第二引数には読み込んだものを格納するオブジェクトのアドレスを渡しま    す。

    scanf("%c", &ch1);

    入力ストリームには改行文字が残ってしまう。
    だが改行文字が残ってしまうことを回避する方法もある。
    変換指定に代入を抑止するが読み込みは行う * を記入することで実現す    る。

    scanf("%c%*c", &ch1);

    この場合一文字目は代入されるが、二文字目は読み込みは行われるが代    入はされない。
    よって、入力ストリームには改行文字は残らないのである。
    これを利用すれば、文字を読み込む場合でなくてもきちんと改行文字を消    費することができる。


なかなか長くなりましたが、今回は簡単に、かつ重要な部分をお届けできたかなと思います。
たまに入力待ちの状態にするために getchar() を呼び出したはいいものの、無視されたようになることがありますよね。
それは入力ストリームに改行文字が残ってしまっているためです。
改行文字が残らないようにするか、getchar()を2回呼んで1回目で改行文字を消費して2回目で入力待ちの状態を実現するという方法があります。
ちなみにまだまだ詳しい仕様がありますので、もっと知りたい方はご自分で調べてください。

ではまた今度。

拍手[0回]

PR
author : gp-hss ×

COMMENT

ADD YOUR COMMENT

NAME
TITLE
MAIL
URL
COMMENT
PASS

TRACKBACK

TRACKBACK URL
忍者ブログ | [PR]
 | PAGE TOP
write | reply | admin