【发布时间】:2016-04-18 20:12:41
【问题描述】:
我正在学习计算机科学入门课程,并使用 C++。
我们的任务是创建不同的“条形码扫描仪” - 二进制、代码 39 和代码 48。这是二进制部分的代码,其中条形码由交替的黑白条纹组成,其中每个条纹要么宽,要么狭窄的。宽条被解释为 1,窄条被解释为 0。
作业的指导方针是:
- 读取一个数字 b 表示代码中的条数(奇数 1 ≤ b ≤ 21 )
- 读取 b 个字符,一次一个
- 每个字符都是 w 表示宽或 n 表示窄
- 宽条为 1,窄条为 0
- 将条码转换为等效数字并显示数字
我觉得我的代码没问题,但它不会返回超过 6 位数的任何内容。如果我输入 b 为 7 到 21 之间的任何值,它仍然要求输入那么多整数,但只打印其中的 6 个。
感谢您的帮助!
#include <iostream>
using namespace std;
int main(){
int b; //number of bars
int i = 0; //loop variables
int k = 0;
int l = 0;
cout << "Number of bars in code (between 1 and 21): " ;
cin >> b;
char arraychars[b]; //barcode as w's and n's
int arrayint[b]; //whole barcode as ints
while (b <= 21 && b >= 1) //b is in range
{
for (i=0; i<b; i++)
{
cout << "Enter character (w for wide, n for narrow): " << endl;
cin >> arraychars[i];
}
for (k=0; k<b; k++)
{
if (arraychars[k] == 'w')
arrayint[k] = 1;
else if (arraychars[k] == 'n')
arrayint[k] = 0;
else
break;
}
for (l=0; l<b; l++) //prints
cout << arrayint[l] ;
break; //exits loop
}
return 0;
}
【问题讨论】:
-
我不知道它是如何打印出多于 一个 数字的,因为在输出任何数字之后你要做的下一件事是
break;退出循环。 -
这与您遇到的问题无关(除非巧合),但您的第二个循环使用
i作为其上限。碰巧在第一个循环之后i等于b,但你真的应该使用b。此外,当你肯定想要一个独占的上限(k<i,或者更确切地说是k<b)时,你有一个包容的上限(k<=i):你明白为什么吗? -
您的输出将是二进制的。这实际上是您被要求做的,还是应该将二进制 0 和 1 视为整数的位并以十进制输出该整数?
-
它应该是二进制的,如 010101。
break;是一个错误,包含范围也是如此。我会改变它。感谢您指出:)