2016-04-18 6 views
0

私はコンピュータサイエンスのための入門コースにいるよ、とC++を使用しました。C++のバイナリバーコードの割り当て

バイナリ、コード39、コード48の異なる「バーコードスキャナ」を作成します。これはバイナリ部分のコードで、バーコードは黒と白の別のストライプで構成されています。または狭い。広いバーは、割り当てのためのガイドラインである0

として1として解釈され、狭いバーである:

  • コード(奇数の整数1≤bにおけるバーの数を示す数bを読む≤ 21)
  • 読むbの文字は、1
  • 時に各文字が広いため、WまたはN狭い
  • ワイドバーのいずれかになります1、細いバーが0
  • されているにバーコードを変換するにその等価n umberを表示して番号を表示する

私のコードは大丈夫だと感じましたが、6桁以上は返されません。私が7と21の間に何かをbと入力すると、それでも多くの整数が求められますが、そのうちの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; 
} 
+0

配列のサイズよりも、それ以上を印刷する方法を知ることができない* 1 *桁、与えられたあなたは、次のものがある任意の数字を出力した後、 '破ること。 'ループを終了します。 –

+0

これは、あなたが抱えている問題(偶然でない限り)とは関係ありませんが、2番目のループは上限を 'i'としています。最初のループ 'i'が' b'と同じですが、実際には 'b'を使うべきです。また、排他的なもの( 'k

+0

あなたの出力はバイナリになります。これは実際にあなたがしなければならないことですか、バイナリの0と1を整数のビットとして扱い、その整数を10進数で出力することになっていますか? –

答えて

2

main()の最初の2行は、すでに警告が多発しているはずです。要は、C++の配列は静的にサイズが決められています。ここでは、初期化されていないbの値からサイズを決定する配列を作成します。天国はコンパイラがこれをどのようにしているかを知っています。これをstd::vectorまたはstd::stringに置き換えてください。

0

あなたが"int b;"後に配列を宣言しなければなりません。

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 = new char[b]; //barcode as w's and n's 
int *arrayint = new int[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; 
} 

それ以外の場合、変数bの値はわかりません。

あなたは、私はそれが今までどのように管理するか分からない

+1

'char arraychars [b];'は標準ではありません。演算子は 'std :: vector'を使うか、' std :: unique_ptr <> 'を使うべきです。 – NathanOliver

+1

** ** VLAのを使用しない理由の一つ@NathanOliver - VLAのを使用して(http://stackoverflow.com/questions/36678841/iterative-mergesortを[ベクトルによって検出することができたバグを隠す]ことを示すためにこの質問を見てください-in-c#comment60948939_36678841) – PaulMcKenzie