gpt4 book ai didi

c++ - 如何实现throw语句做一个整数值

转载 作者:行者123 更新时间:2023-11-28 07:19:14 26 4
gpt4 key购买 nike

我有一个问题对你们中的许多人来说可能非常简单,但是我还没有找到问题的答案。

下面的程序运行正常。此代码将数字转换为 float 和整数。

假设您输入了 5.4,程序将为您提供 double 5.4 和整数 5。

现在我需要在我的程序中添加一个 throw catch 语句,以防用户输入文本而不是数字(“如果转换失败,抛出异常并允许用户重新输入值。”)。

这是我需要做的伪代码。

try {
if(num ==character)
throw;
cout << "\n The number entered " << num << "invalid, please enter again";
}
catch
{
}

我实现了类似的东西,但是它没有用。我设置了“a”变量字符,认为用户必须输入文本才能获得该消息。然而,它没有工作并给出了一些错误。

try
{
char a;
if (num == a)
throw num;
}
catch(int e)
{
cout << "A number of " << a << " is invalid." << endl;
cout << "Please re-enter a number: ";
cin << num
}

我对“尝试、 throw 、接住”这个术语很陌生。如果你能帮助我解决这个问题,我会很高兴,谢谢。

#include <C:\\CSIS1600\MyCppUtils.cpp>
#include <iostream>
#include <string>
using namespace myNameSpace;
int main()
{
runner("is running");
cout << "Enter a number : ";
string num;
getline(cin, num);

cout<< "double " << getValidDouble(num) << endl;
cout<< "integer " << getValidInt(num) << endl;

system("pause");
return 0;
}

#include<iostream>
#include<string>
using namespace std;

namespace myNameSpace
{
string num;

void runner(string str)
{
cout <<"runner-3() is running.."<<endl;
}

int getValidInt(string n)
{

int valueint;
valueint=atoi(n.c_str());
return valueint;
}

double getValidDouble(string n )
{

double valuedouble;
valuedouble = atof(n.c_str());
return valuedouble;
}
}

最佳答案

您可以使用 Boost 进行词法转换。如果您有有效输入(例如 2.54),则不会抛出异常,但如果输入无效(例如 2???54),则抛出 bad_lexical 转换:

#include <boost/lexical_cast.hpp>

try
{
double x1 = boost::lexical_cast<double> ("2.54");
double x2 = boost::lexical_cast<double> ("2???54");
cout << x1 << x2 << endl;
}
catch(boost::bad_lexical_cast& e)
{
cout << "Exception caught - " << e.what() << endl;
}

关于c++ - 如何实现throw语句做一个整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19759111/

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