2011-12-03 9 views
-1

ここで特定の文字列で文字やフラグを見つける私が書いたbinary_to_decimalコンバータのv1.0のです。私は仕様を改善し続けながらいくつかの変更を加えたいと思います。クラスとポインタも将来追加されます。私は新鮮でよく練習しています。誤り訂正ループは、悪い入力

さて、エラー修正ループを実装して、0または1以外の文字にフラグを立てて、入力を再度要求したいと考えています。

私は、アレイと協力し、このコードブロックのラインに沿って何かをしようとしています。 途方もないかもしれないが、私はそれを微調整できると思う。

#include <iostream> 
#include <cmath> 
#include <string> 
using namespace std; 
const int MAX = 100; 

int conv(int z[MAX], int l[MAX], int a); 

int main() 
{ 
    int zelda[MAX]; 
    int link[MAX]; 
    string strint; 
    int am; 

    cout << "Enter a binary number: \n"; 
    (cin >> strint).get(); //add error-correction to only read 0s and 1s. 
    am = strint.size(); 
    cout << am << " digits entered." << endl; 

    int i = 0; 
    int p = 0; 
    while (i < am) 
    { 
     zelda[i] = strint[p] - '0';  //copies the string array elements into the int array; essentially STRING TO INT (the minus FORCES a conversion because it is arithmetic) <---- EXTREMELY CLEVER! 
     ++i; 
     ++p; 
    } 

    cout << conv(zelda, link, am); 

    cin.get(); 
    return 0; 
} 


int conv(int zelda[MAX], int link[MAX], int length) 
{ 
    int sum = 0; 
    for (int t = 0; t < length; t++) 
    { 
     long int h, i; 
     for (int h = length - 1, i = 0; h >= 0; --h, ++i) 
      if (zelda[t] == 1) 
       link[h] = pow(2.0, i); 
      else 
       link[h] = 0; 
      sum += link[t]; 
    } 
    return sum; 
} 

みんなありがとう:ここ

while ((cin >> strint).get()) 
     { 
      cin.clear(); //reset the input 
      while (cin.get() != '\n') //clear all the way to the newline char 
       continue; // 
      cout << "Enter zeroes and/or ones only! \n"; 
     } 

は誤り訂正ループせずに最終的なコードです:私はまだ、私はこのような何かを追加したい0_0

を学んでいます。

+4

私は質問が何であるかわからないんだけど、答えはより意味のある識別子を使用することが考えられます。 – Johnsyweb

答えて

2

あなたがしようとしていることを完全にはわかっていませんが、私はと考えています。あなたが望むものはstring::find_first_not_ofです。そのリンクには例があります。 myString.find_first_not_of("01"); 戻り値がstring::nposの場合、1または0以外の文字列には文字がないため、有効です。戻り値が他のものであれば、有効な入力を再度促し、入力が有効になるまでループを続けます。

+0

私は正しい入力を求めてプログラムを取得しようとしています。 「1211111」と入力します。これにより、プログラムは停止し、ゼロと1だけを持つ入力を待つ必要があります。 (バイナリ)。正当な例は、0000000、1111111、00011、11011などです。 –

+0

@ Duknov007:わかりました。その行を 'string'に読み込み、上記の行があなたが望むことをしなければなりません。 – AusCBloke

+0

ありがとうございます。これは私が探していたものかもしれません。 –

関連する問題