c++ - 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;
}
解决方案
您的程序中有 2 个主要错误。当你编译你的程序时,你应该确保打开错误和警告,它会在你第一次运行之前指出这些问题。
当我编译你的程序时,我从编译器得到以下结果:
main.cpp:35:1:错误:控制可能到达非空函数的结尾 [-Werror,-Wreturn-type]
} ^
main.cpp:19:9: 警告:变量 'len' 在此处使用时未初始化 [-Wuninitialized]
len++; ^~~
main.cpp:16:30:注意:初始化变量 'len' 以消除此警告
long int temp=bin;int len,t,sum=0; ^ = 0
您永远不会len
在函数中初始化变量check()
,因此它包含随机垃圾。此外,即使您正在初始化它,您的check()
函数也没有return
语句,因此无论它计算什么都会丢失,并且随机垃圾会返回给调用者。
编译器会为您提供如何解决len
问题的建议。您可能想sum
从check()
.
推荐阅读
- sql-server - SSIS - 如何从 SSIS 中的文件中传递良好的记录,而不是由于记录不良而使包失败
- javascript - 尝试为测试呈现反应组件时出错
- javascript - React 中的 reducer 有问题
- php - Laravel apis 无法在 https 上运行并给出错误 NET::ERR_CERT_COMMON_NAME_INVALID
- apache-spark - 如何在 Spark 中两两匹配行?
- c - 汇编中的 C while 循环
- firebase - Flutter Web:未捕获(承诺)错误:[cloud_firestore/unknown] NoSuchMethodError:null 上的无效成员:'includeMetadataChanges'
- google-apps-script - google App Script:如何在发送电子邮件时设置条件规则?
- c - 编辑字符串而不更改非字母字符
- python - 在 python 中快速将产品解析为单项式?