/* Part7 演習問題2 */
/* 1ヵ月間の支出合計 */
#include <stdio.h>

int main(void)
{
  struct exp {
    int date ;       /* 日付 */
    int pay  ;       /* 支出金額 */
    char item[20] ;  /* 支出項目名 */
  } ;

  struct exp book ;
  int sum ;

  printf("日付 支出金額 支出項目名(20文字以内)を入力してください(EOFで終了)。\n") ;

  sum=0 ;
  while(1) {
    if(scanf("%d %d %s",&book.date,&book.pay,&book.item[0])==EOF) break ;
    if((book.date<1)||(book.date>31)||(book.pay<1)) {
      printf("入力データに誤りがあります。入力し直してください。\n") ;
    }
    else {
      /*      printf("%d %d %s\n",book.date,book.pay,book.item) ; */
      sum = sum + book.pay ;
    }
  }

  printf("1ヵ月間の支出合計は %d 円です。\n",sum) ;
  return(0) ;
}


% gcc -Wall part7-2.c
% kinput2 &
% ./a.out
日付 支出金額 支出項目名(20文字以内)を入力してください(EOFで終了)。
1 150 烏龍茶
2 450 昼食
5 3000 コンパ
8 2100 フリース
12 120 ジュース
15 735 ラーメン
20 525 昼食
23 420 雑誌
27 2950 CD
30 210 コーヒー
1ヵ月間の支出合計は 10660 円です。

  1. 支出項目名に日本語を入力したいので,プログラムの実行前にkinput2コマンドを入力している.
  2. 日本語(全角文字)1文字は,char型1次元配列の要素2を占有する.よって,日本語の文字数は9文字以内である.本プログラムでは,入力文字数を確認していない.