gpt4 book ai didi

C++ 程序在第一次尝试时给出垃圾,但如果它捕获异常并重试则给出正确的值

转载 作者:行者123 更新时间:2023-11-28 04:41:22 24 4
gpt4 key购买 nike

程序在第一次尝试时给出了垃圾值(value),即如果它没有捕获到任何异常,但是当发现异常并重试时,程序会给出正确和正确的输出。我如何更正它第一次获得的输入的输出(即第一个输入无一异常(exception)......)。该程序是将二进制转换为十进制。

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

Output with junk value and proper input at first Exception is caught and on retrying output is proper

最佳答案

您的程序中有 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

您永远不会在 check() 函数中初始化 len 变量,因此它包含随机垃圾。此外,即使您正在初始化它,您的 check() 函数也没有 return 语句,因此无论它计算什么都会丢失,并且随机垃圾会返回给调用者.

编译器会为您提供有关如何解决 len 问题的建议。您可能希望从 check() 返回 sum

关于C++ 程序在第一次尝试时给出垃圾,但如果它捕获异常并重试则给出正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50126554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com