• 締切済み

困ってます!

Zipコード(郵便番号)を入れてバーコードに変換するプログラムなんですがよく分かりません。0を::...1を...::2は..:.:3は..::.4は.:..:5は.:.:.6は.::..7は:...:8は:..:.そして9は:.:..です。例によるとZipコード94542は::.:...:..:.:.:..:..:..:.::になるそうです。でもこれは全部の合計が27です。それだとプログラム自体は完成ではなく、10の倍数でなければならずバーコードの最初と最後に:が必要なんです。でその94542の正しいバーコードというのは::.:...:..:.:.:..:..:..:.:.::..:になるそうです。これだと合計が32になり10の倍数にもなってます。そしてその後に追加プログラムとして、94542なら10で割って10-4と計算して、余りが6になるというものを作らなければなりません。途中まで書いたんですが、バーコードの最初と最後にどうやったら:を追加できるのかが分かりません。これを追加すれば自動的に10の倍数になりますか?もしならないようならその書き方も教えてください。そして追加のプログラムも良く分かりません…どうすればいいか分かりますか?どなたか詳しい方教えてください!困ってます。よろしくお願いします! ちなみに自分が書いたものを貼っておきたいんですが文字数の関係で貼る事ができません。私が書いたものではZipコードを入力するとバーコードがでます。しかし常に10の倍数にはなりません。そこの部分が聞きたいのでよろしくお願いします。

みんなの回答

回答No.2

ANo.1です。 すいません、10で割ったあまりが0の時はチェックデジットを0にしないといけませんね。。 strcat(s2,code[(check%10==0)?0:10-check%10]); /* 追加のチェックデジット */

回答No.1

各数字を足して、10で割った余りを計算して、10から引いたものをバーコードに追加すればいいと思います。 こんな感じですかね。 #include <stdio.h> #include <string.h> char *code[]={"::...","...::","..:.:","..::.",".:..:",".:.:.",".::..",":...:",":..:.",":.:.."}; /* 番号s1を入力してバーコード文字列s2に変換する。s2のサイズは、(s1の文字数+1)*5+3 以上必要 */ void zipcode(const char *s1, char *s2) {  int num,check=0;  *s2='\0';  strcat(s2,":"); /* 最初の文字: */  while (*s1!='\0'){ /* 本体の文字 */   num= *s1-'0'; /* 数値に変換して */   strcat(s2,code[num]); /* 該当コードをくっつける *   check+=num; s1++; /* 各桁の数値を足して、次の数字へ */  }  strcat(s2,code[10-check%10]); /* 追加のチェックデジット */  strcat(s2,":"); /* 最後の文字: */ } int main(void) {  char barcode[33];  zipcode("94542",barcode); printf("%s\n",barcode);  return 0; }

関連するQ&A