这是正确的还是有更好的方法?

时间:2015-03-17 07:23:57

标签: c

我正在尝试编写从stdin读取条形码(长度为10位)的ac程序,将条形码的前9位加起来,如果9位数之和的第二位数等于条形码中的第10位数字将条形码写入标准输出。

以下是我到目前为止的情况,有些人可以帮助我,或者告诉我我所得到的或者添加的内容有什么问题。是否可以将整个条形码放入一个字符数组并将前9位数相加并将其与bar [9]的值进行比较?我该怎么办? 感谢

#include <stdio.h>

int main(void){
  int sum = 0;
  char bar[10];
  int i;
  for(i = 0; i < 9; i++){
    scanf("%d", &bar[i]);
  }

  for(i = 0; i < 10; i++){
     sum += bar[i];
  }

  if(sum[1] == bar[10]){
      return 1;
  }
  return 0;
}

3 个答案:

答案 0 :(得分:0)

CORRECTIONS

  1. 将char bar [10]更改为int bar [10],因为您只是处理intergers
  2. 数组索引从0开始,以SIZEOFARRAY-1
  3. 结束
  4. intfloat变量这样的原语不能像你在sum[1] == bar[10]中那样使用索引来引用。这里sum只是一个int类型,其中bar是一个整数数组。
  5. 测试条形码的最后2位和第10位的逻辑

    int secondDigit = sum%100; // for 189 this resturns 89
    secondDigit = secondDigit/10 // for 89 this return 8
    
    if(secondDigit == bar[9]) // see SIZEOFARRAY which is 10 - 1 = 9 will be the last array element. 
    {
         // as you wanted display the barcode.
    }
    

答案 1 :(得分:0)

这里sum是一个整数而不是一个数组。

我正在考虑你的具体情况添加9位数。由于9位数之和不能超过81.第二位数字将是

  int secondDigit = sum /10 ;

如果您使用条形码[9]进行检查,您将得到答案。需要注意的是,数组中的第十个数字是数组[10-1],因为索引从零开始。

您需要从第0个索引求和到第8个索引,以计算9位数的总和

   for(i=0;i<9;i++) { 
       sum += bar[i];
     }

答案 2 :(得分:0)

1]你在代码中遇到三个错误,你需要用一个mod(%)来削减总和的第二个数字。

2]您没有从条形码阅读器中读取第10位数字

3] bar [10]不是第10位。其条形[9]作为指数从c开始为0

除此之外,还有一些建议

您可以通过合并前两个循环来优化代码。由于它是一个嵌入式系统,其重要性

我会通过在变量中保留返回状态来将返回次数限制为1。它使代码更具可读性。

我建议以下

#include <stdio.h>

int main(void)
{
    int sum = 0,i;
    char bar[10];

    for(i = 0; i < 9; i++)
    {
       scanf("%d", &bar[i]);
       sum += bar[i];
    }

   scanf("%d", &bar[i]);

   if( (sum % 10) == bar[9 ])
   {
      return 1;
   }

   return 0;

}