我正在编写一个非常基本的命令行C ++应用程序,它在执行时接受参数。
我今天刚刚开始使用C ++,而且很明显你只能将char**
作为参数的数据类型。我想把两个float
作为参数(稍后将它们加在一起),但我似乎无法将字符数组转换为浮点数。
我已尝试static_cast<float>(argv[0])
和stof(argv[0])
来转换值,并且两者都给出了编译器错误(无法分别转换和未在作用域中定义)。
如果回答任何问题,我正在使用Code::Blocks IDE
。
我的代码:
#include <iostream>
#include <string>
/**
* author: 2mac
*
*/
using namespace std;
void derp();
float getSum(float num1, float num2);
int main(int argc, char** argv)
{
float num1 = static_cast<float>(argv[0]);
float num2 = static_cast<float>(argv[1]);
if (argc != 0 || argc != 2)
cout << "Usage: hello-world [args]\nargs: none OR <num1> <num2> to be added together" << endl;
else
{
switch (argc)
{
case 0:
derp();
break;
case 2:
derp();
cout << num1 << " + " << num2 << " equals " << getSum(num1,num2) << endl;
break;
}
}
return 0;
}
void derp()
{
cout << "Hello, world!\n";
cout << "It's time to lern some C++!" << endl;
}
float getSum(float num1, float num2)
{
return num1 + num2;
}
答案 0 :(得分:3)
使用它将输入转换为浮点数,
double f1, f2;
if (argc == 2)
{
f1 = atof (argv[0]);
f2 = atof (argv[1]);
}
答案 1 :(得分:1)
C ++中的char**
只是一个指向字符指针的指针,因此无法直接转换为float
(或任何数值)因此您的第一个示例将失败。您可以使用中间函数atof或strtof(注意str
tof,而不是stof,为什么第二个示例失败)转换这些值,假设您确定它们实际上在{{ 1}}形式。
答案 2 :(得分:1)
您只是通过类型转换将char *
变量转换为float
。它会将指针的值转换为float,而不是要浮动的字符串。
您需要使用atof
,strtof
等函数将字符串转换为float。或者你可以编写自己的函数来将字符串转换为float。