Как я могу принять конкретные пользовательские данные в массиве? - PullRequest
0 голосов
/ 02 июня 2019

Я кодирую программу, которая преобразует двоичное число в десятичное число путем удвоения ( ссылка на статью вики-шоу ).

Если пользовательский ввод отличается от 1 или 0, тоэто не двоичное число, в этом случае я хочу, чтобы цикл «сломался» и произнес что-то вроде:

«Упс! Двоичные числа имеют только 1 или 0».

Если не «тогда», цикл должен продолжаться.

То есть я хочу закодировать что-то вроде

for(int digits = 0; digits != digitsINbinNum; ++digits){
      if(a condition that checks if user input is anything else than 1 or 0){
         coût << ""Oops! Binary numbers have only 1 or 0" << endl; 
         break;
          }else{
        cin >> binArray[digits];/*<-----------Here's the part where I am trying to do that*/
      }
    }


Обратитесь к приведенному ниже коду для получения дополнительной информации:

#include <iostream>
#include <iterator>

using namespace std;

int main(){
    int digitsINbinNum;
    cout << "If you don't mind. Please enter the number of digits in your binary number: ";
    cin >> digitsINbinNum;
    int binArray[digitsINbinNum];

    cout << "Enter the binary number: ";
    for(int digits = 0; digits != digitsINbinNum; ++digits){
        cin >> binArray[digits];/*<-----------Here's the part where I am trying to do that*/
    }

/*using the doubling method as found in wikihow.com*/
    int total = 0;
    for(int posiOFdigit = 0; posiOFdigit != sizeof(binNum[noOFdigits]); posiOFdigit++){
        total = total * 2 + binNum[posiOFdigit];
    }

    /*Printing the number*/
    cout << "Decimal form of ";
    for(int n = 0; n != noOFdigits; n++){
        cout << binNum[n];
    }
    cout << " is " << total;
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

Вам не нужен массив для этого. Вот простое решение:

#include <iostream>

int main(){
    int digitsINbinNum;
    std::cout << "If you don't mind. Please enter the number of digits in your binary number: ";
    std::cin >> digitsINbinNum;

    std::cout << "Enter the binary number: ";
    int ret = 0;
    for(int digits = 0; digits != digitsINbinNum; ++digits) {
        int bin;
        std::cin >> bin;
        if (bin == 1 || bin == 0) {
            ret = 2 * ret + bin;
        } else {
            std::cout << "Oops! Binary numbers have only 1 or 0" << std::endl;
            return -1;
        }
    }
    std::cout << ret << std::endl;

    return 0;
}
0 голосов
/ 02 июня 2019

Логика преобразования двоичного числа в десятичное число методом удвоения может быть указана по данной ссылке в вопросе.

Изменение данного кода для сохранения его как можно ближе квозможно к справочному коду вопроса.

Примечание: поскольку ISO C ++ запрещает массив переменной длины, я меняю int binArray[digits] на int *binArray = (int *)malloc(sizeof(int) * digitsINbinNum);.Эта модификация делает его целочисленным указателем и получает память требуемого размера, выделенную во время выполнения.

#include <iostream>

using namespace std;

int main(){
    int digitsINbinNum,
        /* variable to keep decimal conversion of given binary */
        decimal_val = 0;
    bool is_binary = true;
    cout << "If you don't mind. Please enter the number of digits in your binary number: ";
    cin >> digitsINbinNum;
    /*
     ISO C++ forbids variable length array,
     making it int pointer and allocating dynamic memory
    */
    int *binArray = (int *)malloc(sizeof(int) * digitsINbinNum);
    if (binArray == NULL)
    {
        cout << "Memory allocation failure" << endl;
        exit -1;
    }
    cout << "Enter the binary number: ";
    for(int digits = 0; digits != digitsINbinNum; ++digits){
        cin >> binArray[digits];
        /*<-----------Here's the part where I am trying to do that*/
        /* doubling method logic for conversion of given binary to decimal */
        if ((binArray[digits] == 0) ||
            (binArray[digits] == 1))
        {
            decimal_val = (decimal_val * 2) + binArray[digits];
        }
        else /* not a binary number */
        {
            is_binary = false;
            cout << "Oops! Binary numbers have only 1 or 0" << endl;
            break;
        }
    }

    /* if conversion is successful: print result */
    if (is_binary)
    {   
        cout << "Decimal Value for given binary is: " << decimal_val << endl;
    }
    if (binArray)
    {
        free(binArray);
    }
    return 0;
}
...