C++ 如何将邮政编码转换为条形码?

C++ 如何将邮政编码转换为条形码?,c++,zipcode,C++,Zipcode,大家早上好,我正在尝试完成我的代码,将邮政编码转换为条形码。我需要输入如何正确地创建最后一个数字,这是一个检查数字。对于校验位,您必须将邮政编码的每个值相加,然后添加一个校验位,使该值成为10的倍数。例如,90210是9+0+2+1+0=12,因此检查数字将是8,以使值为20。这段代码的功能非常好,只是它不正确地计算了校验位,我在这里遗漏了什么?我完全被困在这里,任何建议都会很好 代码 #包括 #包括 整数误差; 字符a[]=“::| |;”; 字符b[]=“:::;:;”; 字符c[]=“::

大家早上好,我正在尝试完成我的代码,将邮政编码转换为条形码。我需要输入如何正确地创建最后一个数字,这是一个检查数字。对于校验位,您必须将邮政编码的每个值相加,然后添加一个校验位,使该值成为10的倍数。例如,90210是9+0+2+1+0=12,因此检查数字将是8,以使值为20。这段代码的功能非常好,只是它不正确地计算了校验位,我在这里遗漏了什么?我完全被困在这里,任何建议都会很好

代码

#包括
#包括
整数误差;
字符a[]=“::| |;”;
字符b[]=“:::;:;”;
字符c[]=“::|;:”;
字符d[]=“:::::;”;
字符e[]=“:|:|::”;
字符f[]=“:| |::”;
字符g[]=“|::|”;
字符h[]=“|::|:”;
字符i[]=“|:|::”;
char j[]=“| |::”;
int-digit1=0;
int-digit2=0;
int-digit3=0;
int-digit4=0;
int-digit5=0;
int-digit6=0;
int temp1=0;
int main()
{
\
标准:温度>温度;
//初始if语句确定输入的数字是否超过5位,并决定使用哪个过程
如果(温度/10000>9){
temp1=temp;
//将每个数字设置为单独的变量
如果(温度%10>0){
做{
(temp1=temp1/10);
}
而(temp1/10>0);
}
digit1=temp1;
temp1=temp;
如果(温度%10>0){
做{
(temp1=temp1/10);
}
而(temp1/10>10);
}
数字2=temp1-(数字1*10);
temp1=temp;
如果(温度%10>0){
做{
(temp1=temp1/10);
}
而(temp1/10>100);
}
digit3=temp1-((digit1*100)+(digit2*10));
temp1=temp;
如果(温度%10>0){
做{
(temp1=temp1/10);
}
而(temp1/10>1000);
}
数字4=temp1-((数字1*1000)+(数字2*100)+(数字3*10));
temp1=temp;
如果(温度%10>0){
做{
(temp1=temp1/10);
}
而(temp1/10>10000);
}
数字5=temp1-((数字1*10000)+(数字2*1000)+(数字3*100)+(数字4*10));
}否则{
数字5=温度%10;
温度=温度/10;
数字4=温度%10;
温度=温度/10;
数字3=温度%10;
温度=温度/10;
数字2=温度%10;
温度=温度/10;
digit1=临时%10;}
//这部分检查是否有超过五位的数字,并相应地将布尔值放入错误
如果((温度/10)>0)错误=1;
else误差=0;

std::cout首先尝试尽可能少地保存代码,例如所有那些

撇开std::cout样式注释不谈,你会想要这样的东西,检查数字和数字之和之间有一个简单的数学关系:

        if (error == 0){
            int digitSum = (digit1 + digit2 + digit3 + digit4 + digit5) % 10;
            digit6 = 10 - digitSum;
            digit6 %= 10;
        }

请研究查找表。转换时,查找表是一件好事,尤其是简单的数组结构

static const char barcodes[] =
{
  /* a */ ":::||",
  /* b */ "::|:|",
  /* c */ "::||:",
  /* d */ ":|::|",
  /* e */ ":|:|:",
  /* f */ ":||::",
  /* g */ "|:::|",
  /* h */ "|::|:",
  /* i */ "|:|::",
  /* j */ "||:::",
};
要获取信件的条形码,请执行以下操作:

char letter;
std::string barcode_string;

//...
if ((letter >= 'a') && (letter <= 'j'))
{
  unsigned int table_index = letter - 'a';
  barcode_string = barcodes[table_index];
}
如果你想处理整数

  • 使用
    /10
    将数字向右移动
  • 使用
    %10
    获取最右边数字的值
放入for
循环中以处理多个数字:

int number;
//...
while (number > 0)
{
  int digit = number % 10;
  std::string digit_barcode_text = digit_barcodes[digit];
  std::cout << digit_barcode_text "\n";
  // Shift number right
  number = number / 10;
}
整数;
//...
而(数量>0)
{
整数位数=数字%10;
std::字符串数字\条形码\文本=数字\条形码[数字];

std::cout请学习如何正确使用数组、条件和循环。简化版本(添加循环,任何其他错误等未更正):不,你不能用这种方式摆脱整个
std::cout
,这并不能回答问题。@deviantfan你说不能是什么意思?
int number;
//...
while (number > 0)
{
  int digit = number % 10;
  std::string digit_barcode_text = digit_barcodes[digit];
  std::cout << digit_barcode_text "\n";
  // Shift number right
  number = number / 10;
}