Программа C ++ выдает нежелательную информацию с первой попытки, но выдает правильное значение, если она перехватывает исключение и повторяет - PullRequest
0 голосов
/ 02 мая 2018

Программа выдает нежелательное значение при первой попытке, то есть если она не обнаружила никаких исключений, но когда исключение найдено и оно повторяется, программа выдает правильный и правильный вывод. Как мне исправить вывод для ввода, который он получает в первый раз (т.е. первый ввод без исключения ...). Программа предназначена для преобразования двоичного числа в десятичное.

#include <iostream>
#include <math.h>
using namespace std;

int check() {
    long int bin;
    cout<<"Enter the binary number : ";
    cin>>bin;
    long int temp=bin;int len,t,sum=0;
    while(temp!=0) {
        temp=temp/10;
        len++;
    }
    temp=bin;
    for(int i=0;i<len;i++) {
        if(temp%10==0 || temp%10==1)
            temp=temp/10;
        else
            throw(0);
    }
    temp=bin;
    for(int i=0;i<len;i++) {
        t=temp%10;
        sum+=t*pow(2,i);
        temp=temp/10;
    }
    cout<<"The decimal equivalent is "<<sum<<"."<<endl;
}

int main()
{
    string a[10];int cont;
    a[0]="<--Invalid Input. Please enter proper binary number(0s & 1s).-- 
    >\n";
    try {
        check();
    }
    catch(int e_c) {
        cout<<a[e_c];
        cout<<"To try again press 1 else 0."<<endl;
        cin>>cont;
        if(cont==1) {
            try {
                check();
            }
            catch(int e_c) {
                cout<<"Wrong input!!!\n\nX_Terminating Program._X\n";
            }
        }
    }
    return 0;
}

Выход со значением барахла и правильным вводом вначале Обнаружено исключение, и при повторных попытках вывод правильный

1 Ответ

0 голосов
/ 02 мая 2018

В вашей программе 2 основных ошибки. Когда вы компилируете свою программу, вы должны обязательно включить ошибки и предупреждения, и она укажет на эти проблемы, прежде чем вы запустите первый раз.

Когда я компилирую вашу программу, я получаю следующий результат от компилятора:

main.cpp: 35: 1: ошибка: элемент управления может достичь конца недействительной функции [-Werror, -Wreturn-type]

}
^

main.cpp: 19: 9: предупреждение: переменная 'len' неинициализируется при использовании здесь [-Wuninitialized]

    len++;
    ^~~

main.cpp: 16: 30: note: инициализировать переменную 'len', чтобы отключить это предупреждение

long int temp=bin;int len,t,sum=0;
                         ^
                          = 0

Вы никогда не инициализируете переменную len в функции check(), поэтому она содержит случайный мусор. Более того, даже если вы инициализировали его, ваша функция check() не имеет оператора return, поэтому все, что она вычисляет, теряется, и случайный мусор возвращается вызывающей стороне.

Компилятор предлагает вам, как решить проблему len. Вы, вероятно, хотите вернуть sum из check().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...