0

ユーザーからの無効なバイナリ入力のチェックに問題があります。これがプログラムです。誰かがこれにアプローチする方法を教えてもらえますか?

これらは私が得ているエラーです

  1. エラー C2660: 'binToDec': 関数は引数を 1 つ取りません
  2. 警告 C4018: '<': 符号付き/符号なしの不一致
  3. エラー C2082: 仮パラメーター 'bin' の再定義
  4. エラー C2275: 'std::string': この型を式として不正に使用しています。「std::string」の宣言を参照してください
  5. エラー C2082: 仮パラメーター 'bin' の再定義

    #include<iostream>
    #include<string>
    #include<math.h>
    
    using namespace std;
    
    void intro();
    bool isBinary(string);
    void decToBin();
    string getBin();
    void binToDec();
    char getChoice();
    char getContinue();
    
    int main()
    {
        char choice, cont;
        string bin;
    
        intro();
    
        do{
            choice = getChoice();
                if(choice == 'b' || choice == 'B')
                {
                    bin = getBin();
                    bool binIsBinary = isBinary(bin);
                    if(binIsBinary)
                        binToDec(bin);
                    else
                    {
                        cout<<"Error!!! Your Number is Not Binary"<<endl;
                        cout<<endl;
                    }
                }
    
                if(choice == 'd' || choice == 'B')
                    decToBin();
            cont = getContinue();
          }
        while(cont == 'y' || cont == 'Y');
    }
    
    
    
    void intro()
    { 
        cout << "This program coverts decimal numbers to binary and vice versa.
                 << endl;
    }
    
    bool isBinary( string bin )
    {
       int i=0;
       bool binIsBinary = true;
    
       while (i < bin.length())
       {
          if( bin.at(i) != '1' && bin.at(i) != '0' )
              {
              binIsBinary = false;
              }
              i++;
       }
    
       return binIsBinary;
    }
    
    void decToBin()
    {
       int dec;
       string bin;
    
       cout << endl << "Please enter a decimal number:"; 
       cin  >>  dec;
       bin = "";
    
       while (dec != 0)
       {
          if (dec % 2 == 0)
             bin.insert(0, "0");
          else
             bin.insert(0, "1");
          dec = dec / 2;
       }
       cout << "The equivalent binary number is: " << bin << endl << endl;
    
    }
    
    string getBin(string bin)
    {   
        string bin;
    
        cout << endl << "Enter a binary number: ";
        cin  >>  bin;
    
        return string;
    }
    
    void binToDec(string bin)
    {
        double deci;
        string bin;
        double len;
    
       len = bin.length();
    
       deci = 0;
       for (int i=0; i<len; i++)
           if (bin.at(i) == '1')
               deci = deci + pow(2, len-i-1);
    
       cout << "The equivalent decimal number is: " << deci << endl    
            << endl;
    }
    
    char getChoice()
    {
        char choice;
    
        cout << endl << "If you would like to convert a binary to a decimal then enter b."<<endl; 
        cout << "If you would like to convert a decimal to a binary then enter d. ";
        cin >> choice;
    
        return choice;
    }
    
    char getContinue()
    {
        char cont;
    
        cout << "Would you like to convert another number(Y/N)? ";
    
        cin >> cont;
    
        return cont;
    }
    
4

1 に答える 1

0

あなたのコードの問題を修正しましたが、10 進数から 2 進数へ、および 2 進数から 10 進数への変換が正しいかどうかは確認しませんでした。問題の主な原因は、間違った関数定義と、関数で間違って渡されたパラメーターです。変更されたコードは次のとおりです。

#include<iostream>
#include<string>
#include<math.h>

using namespace std;

void intro();
bool isBinary(string);
void decToBin();
string getBin();
void binToDec(string);
char getChoice();
char getContinue();

int main()
{
    char choice, cont;
    string bin;

    intro();

    do{
        choice = getChoice();
            if(choice == 'b' || choice == 'B')
            {
                bin = getBin();
                bool binIsBinary = isBinary(bin);
                if(binIsBinary)
                    binToDec(bin);
                else
                {
                    cout<<"Error!!! Your Number is Not Binary"<<endl;
                    cout<<endl;
                }
            }

            if(choice == 'd' || choice == 'B')
                decToBin();
        cont = getContinue();
      }
    while(cont == 'y' || cont == 'Y');
}



void intro()
{ 
    cout << "This program coverts decimal numbers to binary and vice versa." << endl;
}

bool isBinary( string bin )
{
   int i=0;
   bool binIsBinary = true;

   while (i < bin.length())
   {
      if( bin.at(i) != '1' && bin.at(i) != '0' )
          {
          binIsBinary = false;
          }
          i++;
   }

   return binIsBinary;
}

void decToBin()
{
   int dec;
   string bin;

   cout << endl << "Please enter a decimal number:"; 
   cin  >>  dec;
   bin = "";

   while (dec != 0)
   {
      if (dec % 2 == 0)
         bin.insert(0, "0");
      else
         bin.insert(0, "1");
      dec = dec / 2;
   }
   cout << "The equivalent binary number is: " << bin << endl << endl;

}

string getBin()
{   
    string bin;

    cout << endl << "Enter a binary number: ";
    cin  >>  bin;

    return bin;
}

void binToDec(string bin)
{
    double deci;
    double len;

   len = bin.length();

   deci = 0;
   for (int i=0; i<len; i++)
       if (bin.at(i) == '1')
           deci = deci + pow(2, len-i-1);

   cout << "The equivalent decimal number is: " << deci << endl    
        << endl;
}

char getChoice()
{
    char choice;

    cout << endl << "If you would like to convert a binary to a decimal then enter b."<<endl; 
    cout << "If you would like to convert a decimal to a binary then enter d. ";
    cin >> choice;

    return choice;
}

char getContinue()
{
    char cont;

    cout << "Would you like to convert another number(Y/N)? ";

    cin >> cont;

    return cont;
}
于 2012-11-16T10:38:07.413 に答える