Программа выдает нежелательное значение при первой попытке, то есть если она не поймала какое-либо исключение, но когда исключение обнаружено и она повторяет попытку, программа выдает правильный и правильный вывод. Как мне исправить вывод для ввода, который он получает в первый раз (т.е. первый ввод без исключения ...). Программа предназначена для преобразования двоичного числа в десятичное.
#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;
}
Вывод со значением нежелательной почты и правильным вводом вначалеИсключение обнаружено, и при повторной попытке вывод правильный
Да. это то, что он показал, я действительно не знаю, что это значит.
Имя и версия отладчика: GNU gdb (GDB) 7.5 PID дочернего процесса: 1112 [Нижний 1 (процесс 1112) завершился нормально] Отладчик завершил работу со статусом 0
Я бы посоветовал поискать в Google "учебник по gdb" и проработать его. Никогда не рано научиться пользоваться отладчиком.
Я сделаю это, спасибо. :)
В вашей программе есть 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. Большое спасибо.
Вы использовали отладчик для расследования?