在庫管理のプログラミング

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ちょこ

在庫管理のプログラミング

#1

投稿記事 by ちょこ » 14年前

在庫を登録したファイル "zaiko.txt" と当日商品別に入庫を記録したファイル "nyuko.txt" の2つのファイルを入力し、新たな在庫ファイル "zaiko_new.txt" を出力するプログラムを作りたいのですが上手くいきません。調べてみて、同じような質問もありましたが出来ませんでした。よろしくお願いします。
zaiko.txt
0001 19
0023 4
0050 6
0079 66
0221 1
0245 3

%more nyuko.txt
0023 5
0079 2
0221 23
0623 56

コード:

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char argv[]){
   FILE *fp_z;
   FILE *fp_n;
   FILE *fp_zn;
   int kosu1,kosu2,kosu3;
   int code1,code2,code3;

   if((fp_z = fopen("zaiko.txt","r"))==NULL){
      printf("エラー:ファイル%sを読み込めません\n",argv[1]);
      exit(1);
   }
   if((fp_n = fopen("nyuko.txt","r"))==NULL){
      printf("エラー:ファイル%sを読み込めません\n",argv[2]);
      exit(1);
   }
   if((fp_zn = fopen("zaiko_new.txt","a"))==NULL){
      printf("エラー:ファイル%sを読み込めません\n",fp_zn);
      exit(1);
   }
   
   while(fscanf(fp_z,"%d %d",&code1,&kosu1) == 2){
      while(fscanf(fp_n,"%d %d",&code2,&kosu2) == 2){
         if(code1 == code2){
            code3 = code1;
            kosu3 = kosu1 + kosu2;
            fprintf(fp_zn,"%d %d\n",code3,kosu3);
         }
         else{
            code3 = code2;
            kosu3 = kosu2;
            fprintf(fp_zn,"%d %d\n",code3,kosu3);
         }
      }
   }


   fclose(fp_z);
   fclose(fp_n);
   fclose(fp_zn);
}

jay
記事: 314
登録日時: 15年前
住所: 大阪市
連絡を取る:

Re: 在庫管理のプログラミング

#2

投稿記事 by jay » 14年前

ちょこ さんが書きました:在庫を登録したファイル "zaiko.txt" と当日商品別に入庫を記録したファイル "nyuko.txt" の2つのファイルを入力し、新たな在庫ファイル "zaiko_new.txt" を出力するプログラムを作りたいのですが上手くいきません
その"zaiko_new.txt" というものの仕様がよくわかりませんね。
ただ単に"zaiko.txt" と"nyuko.txt"から読み込んだものをそのまま書きだすだけなのか
然るべき処理をした後に書きだすのか。 もしそうなら具体的にどのような処理をすればいいのか
その辺りの情報が全くないので具体的にアドバイスをするのはかなり難しいですね・・・。
できればその辺りの情報をもう少し詳しくお願いします。

とりあえず、何故だかfscanf関数とfprintf関数が同じループ処理の中に組み込まれているみたいですが
特に理由がないのなら処理は一つ一つ分けて書いて行った方がいいですよ

その方が大体コードも読みやすくなりますし、不具合が起きても原因の解明が楽になりますしね。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

box
記事: 2002
登録日時: 15年前

Re: 在庫管理のプログラミング

#3

投稿記事 by box » 14年前

ちょこ さんが書きました:上手くいきません。
これまで、いろんなところで言い尽くされているようなことではありますが、
単に「うまくいきません」と書いてあるだけでは、事実上「何も言っていない」のと同じです。
何がどううまくいかないかを、「具体的に」書いてください。
ちょこ さんが書きました:

コード:

int main(int argc,char argv[]){
第2引数の書き方は、本当に正しいですか?
ちょこ さんが書きました:

コード:

   if((fp_z = fopen("zaiko.txt","r"))==NULL){
      printf("エラー:ファイル%sを読み込めません\n",argv[1]);
argv[1]と"zaiko.txt"との関係は、どうなっていますか?
ちょこ さんが書きました:

コード:

   if((fp_n = fopen("nyuko.txt","r"))==NULL){
      printf("エラー:ファイル%sを読み込めません\n",argv[2]);
argv[2]と"nyuko.txt"との関係は、どうなっていますか?
ちょこ さんが書きました:

コード:

   if((fp_zn = fopen("zaiko_new.txt","a"))==NULL){
      printf("エラー:ファイル%sを読み込めません\n",fp_zn);
fp_znを"%s"で出力することに、どのような意味がありますか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

non
記事: 1097
登録日時: 15年前

Re: 在庫管理のプログラミング

#4

投稿記事 by non » 14年前

マッチング処理かトランザクション処理で検索すると参考になるものが出ると思います。

ヒントとして
キー(code)として、最大の数をMAX_VALUEとして定義し、読むデータがなくなった時にcodeにMAX_VALUEを入れる。
whileは1つにする。ループ条件は、code1<MAX_VALUE || code2<MAX_VALUE
non

ちょこ

Re: 在庫管理のプログラミング

#5

投稿記事 by ちょこ » 14年前

説明不足ですいません。
"zaiko_new.txt"は"zaiko.txt"と"nyuko.txt"の商品コード(4桁)と数量を書き込み、もし商品コードが同じものがあれば、数量を合計したものを書き込みます。
box さんが書きました:これまで、いろんなところで言い尽くされているようなことではありますが、
単に「うまくいきません」と書いてあるだけでは、事実上「何も言っていない」のと同じです。
何がどううまくいかないかを、「具体的に」書いてください。
上記のプログラムでは"zaiko_new.txt"に"nyuko.txt"のデータしか入りませんでした。
box さんが書きました:argv[1]と"zaiko.txt"との関係は、どうなっていますか?
コンパイル時に./~.out zaiko.txt nyuko.txtと書くのでargv[1]は"zaiko.txt"をargv[2]は"nyuko.txt"を指しています。

その他、もう一度見直してみます。

閉鎖

“C言語何でも質問掲示板” へ戻る