我正在尝试编写从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;
}
答案 0 :(得分:0)
CORRECTIONS
SIZEOFARRAY-1
int
,float
变量这样的原语不能像你在sum[1] == bar[10]
中那样使用索引来引用。这里sum只是一个int类型,其中bar是一个整数数组。 测试条形码的最后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;
}