scanf で構造体にデータを入力

scanf で構造体のメンバー変数にデータを入力します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. ソースプログラムです。
    ファイル名 説明
    Scanf.cpp 構造体にデータを入力
  2. scanf() で構造体のメンバー変数にコンソールからデータを入力して格納します。
    コンソールからデータを入力する最も簡単な方法は scanf() 関数を使うことでしょう。
    ただし、scanf() には使用上注意しなければならないことがあります。
  3. 成績レコードの定義です。
    名前と3教科の成績と平均点を構造体として定義しました。
    平均点は割り切れるとは限らないので、浮動小数点(float)で定義しています。
    名前と3教科の成績をコンソールから入力して、平均点を計算して表示します。
    // 成績レコードの定義
    typedef struct
    {
        char    m_name[24];
        int     m_ten1;
        int     m_ten2;
        int     m_ten3;
        float   m_ave;
    }   TSeiseki;
    
    TSeiseki    seiseki;
    
  4. いきなりプログラムが入力待ちの状態で止まったのでは、ハングアップしたかと思います。
    scanf() 関数を実行する前に適当なメッセージを表示して下さい。
    タイプ入力するデータはホワイト・スペース(空白,タブ,改行)で区切ります。
    姓と名を分けるときは全角空白をタイプして下さい。
        printf("\n名前を入力して下さい(姓と名を分けるときは全角空白)\n");
        scanf("%s",&seiseki.m_name);
    
  5. 続いて3教科の成績を入力します。
    タイプ入力するデータはホワイト・スペースで区切ります。
        printf("\n3教科の点数入力して下さい\n");
        scanf("%d %d %d",&seiseki.m_ten1,&seiseki.m_ten2,&seiseki.m_ten3);
    
  6. 後は平均点を計算して表示するだけです。
        seiseki.m_ave= (seiseki.m_ten1+seiseki.m_ten2+seiseki.m_ten3)/3.0f;
        printf("\n名前=%s 点数1=%3d  点数2=%3d  点数3=%3d  平均=%f\n",
                seiseki.m_name,seiseki.m_ten1,seiseki.m_ten2,
                seiseki.m_ten3,seiseki.m_ave);
    

【NOTE】

  1. 数値や文字列の入力と、一文字入力を組み合わせるときは注意が必要です。
    数値の入力では、ホワイト・スペースはデータの区切りとして読み捨てられますが、一文字入力ではホワイト・スペースもデータとみなされます。
    数値入力が終わった時点では入力バッファ(キーボードバッファ)には、まだホワイト・スペースが残っています。
    数値に続いて一文字入力するとこれが入力されます。
    その恐れがあるときは次の関数でキーボードバッファを空にして下さい。
    rewind(stdin);
  2. 入力ストリームから「>>」で入力する方法は iostream でデータをタイプ入力 を参照して下さい。
  3. scanf() を使うと警告が発せられます。
    セキュリティを強化した方法は scanf_s() で文字列を入力 を参照して下さい。

超初心者のプログラム入門(C/C++)