Программа на C++ выдает мусор при первой попытке, но дает правильное значение, если обнаруживает исключение и повторяет попытку

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

#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;
}

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

Вы использовали отладчик для расследования?

Stephen Newell 02.05.2018 05:09

Да. это то, что он показал, я действительно не знаю, что это значит.

Sudhansu Maharana 02.05.2018 05:16

Имя и версия отладчика: GNU gdb (GDB) 7.5 PID дочернего процесса: 1112 [Нижний 1 (процесс 1112) завершился нормально] Отладчик завершил работу со статусом 0

Sudhansu Maharana 02.05.2018 05:16

Я бы посоветовал поискать в Google "учебник по gdb" и проработать его. Никогда не рано научиться пользоваться отладчиком.

Stephen Newell 02.05.2018 05:18

Я сделаю это, спасибо. :)

Sudhansu Maharana 02.05.2018 05:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

main.cpp:35:1: error: control may reach end of non-void function [-Werror,-Wreturn-type]

}
^

main.cpp:19:9: warning: variable 'len' is uninitialized when used here [-Wuninitialized]

    len++;
    ^~~

main.cpp:16:30: note: initialize the variable 'len' to silence this warning

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

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

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

Да, это сработало. Это была глупая ошибка. Я сделал функцию void вместо int. Большое спасибо.

Sudhansu Maharana 02.05.2018 05:22

Другие вопросы по теме