サイトマップ / C言語講座出入り口総目次目次:入出力(2)>キーボードから1行入力

青い直線

キーボードから1行入力

青い直線

[getchar( )とputchar( )]←このソース→[gets( )とscanf( )の問題点の解決]

/* gets( ) */

/* 今回は gets( ) について、少し詳しく説明します。

    #include <stdio.h>
    char *gets(char *s);

    例:gets(s);

gets( )は stdio.h をインクルードすれば使えるようになります。gets( )は標準入力(キーボード)から1行読み込み、s にしまいます。改行文字(\n)にあうと、s に NULL文字(\0)を追加して戻ります。 改行文字は捨てられます。

gets( )の使用例として、ソースプログラムでは文字列をしまう場所として、name[51] を宣言しています。追加される NULL 文字の分を含めて、英数字で51字を越えた場合、動作に異常が出る可能性があります。プログラムを実行させて、英数字で50字以上を入力してみて下さい。メモリー上で、他の変数の使っている領域にデータを上書きするかも知れません。最悪の場合バスエラーとなり暴走してしまいます。バスエラーは実行中のプログラムが、正常でないデータを参照した時などに起こることがあります。リセット以外に回復させる方法はありません。

重要:入力を抑制する方法がないので、gets( )の使用は慎重に。

ソースプログラムの説明

今日のソースプログラムは、キーボードから名前と年齢体重を入力し、それを表示します。名前の入力にはgets( )を使います。ソースプログラムの終わりに近い部分に、printf( )が並んでいます。

    printf("あなたの名前は%sです。\n", name);
    printf("あなたの年齢は%3d才です。\n", age);
    printf("あなたの体重は%4.1lf kg です。\n", weight);

'%'は次に書式指定子が来ることを示します。's'は書式指定子です。文字列を画面に出力します。'3d'は符号を含めて3桁の整数を表示します。'4.1lf'は少し複雑です。'lf'は浮動小数点数の形式で出力するという意味です。'4.1'は符号と小数点を含めて4文字の数を小数点以下1桁の精度で出力せよということです。

書式指定子については、ここより少し後の”書式付き入力と書式指定子”と”書式付き出力と書式指定子”で詳しく解説します。 */

/* ここからソースプログラム */

#include <stdio.h>

void main(void);

void main(void)
{
    char name[51];      /* 英数字で50 字分の文字列 */
    int age;            /* int 型の整数 */
    double weight;      /* double 型の浮動小数点数 */

    printf("名前を入力して下さい\t");
    gets(name);

    printf("年齢を入力して下さい\t");
    scanf("%d", &age);        /* & を付ける */

    printf("体重 ( kg ) を入力して下さい\t");
    scanf("%lf", &weight);    /* & を付ける */


    printf("\n\n");           /* 2行改行 */

    printf("あなたの名前は%sです。\n", name);
    printf("あなたの年齢は%3d才です。\n", age);
    printf("あなたの体重は%4.1lf kg です。\n", weight);
}

/* ここまでソースプログラム */

/* もし、年齢を入力する際に、'18.5'のように浮動少数点数を入力したらどうなるでしょうか。ageは int型なので'18'がageに代入されます。そうすると標準入力に'.5'が残ります。'.5'は次の scanf( )でweightに代入されます。このため動作がおかしくなります。 */

[getchar( )とputchar( )]←このソース→[gets( )とscanf( )の問題点の解決]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:入出力(2)>キーボードから1行入力