#include <stdio.h>
#include <string.h>
#define SIZE 100 //商品名の長さの上限。
/*
gcc 3.4.5
・tsvの読み込み、切り分け
・tsv。タブ区切りテキスト。csvのお仲間
・構造体の配列
・構造体の配列の内の一つを関数に渡して計算させる方法(fuckin' arrow)
*/
typedef struct
{
char namae[SIZE]; // namae を入れる
int kosu;
int tanka;
int uriage;
} syohin ;
void keisan(syohin *x) // (syohin x) ではダメ。仮のモンになるから実物(アドレス)を渡せ
{
//<商品xの売り上げの計算>
//x.uriage = x.kosu * x.tanka ; // fuck. (syohin x) では仮のものとなる。
//printf("%s: %d\n", x.namae, x.uriage);//check 計算は合うが、ここだけのものになる。
x->uriage = x->kosu * x->tanka ; // fukin7 great special arrows.
}
int main(int argc, char *argv[])
{
// argv[1] の有無チェック
char fname[64] ;
strcpy(fname,argv[1]) ;
printf ("tsv name: %s\n",fname) ;
FILE *fp;
char s[SIZE];
int n1, n2;
int ret; // fscanfの戻り値の受け取り用
syohin shina[10] ; // 商品が100位あってもok。
int sc = 0 ; // syohin counter
// fairu yomikomi
fp = fopen( fname, "r" ); // tsv open
if( fp == NULL ){
printf( "%s: ファイルが開けません\n", fname );
return -1;
}
while( ( ret = fscanf( fp, "%s%d%d", s, &n1, &n2 ) ) != EOF ){
// tsv は csv と違い、そのまま密着させてOK。
// \tを挟むと、却って正常に動作しなくなる。読み込みが終わらなくなる。
//printf( "record: %s %d %d\n", s, n1, n2 );
//<商品別の個数と単価の代入>
strcpy(shina[sc].namae,s) ;
shina[sc].kosu = n1 ;
shina[sc].tanka = n2 ;
keisan(&shina[sc]) ; // (shina[sc]) ではダメ。アドレス(実物)を渡せks
sc++;
}
fclose( fp );
// hyouji
int max = sc ;
for (sc = 0; sc<max; sc++){
printf( "%sの売り上げは%d円 \n", shina[sc].namae, shina[sc].uriage );
}
return 0;
}