Я пишу очень простое приложение командной строки C++, которое принимает аргументы при выполнении.Преобразование символьного массива в float?
Я только начал C++ сегодня, и кажется очевидным, что вы можете использовать только char**
в качестве типа данных для аргументов. Я хочу взять два float
s в качестве параметров (чтобы добавить их позже), но я не могу отличить массивы символов от поплавков.
Я пробовал 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;
}
ARGV [0] будет название вашей программы. Используйте argv [1] для первого аргумента, argv [2] для второго и т. Д. Но в любое время, когда вы используете argv [1 ... n], вы должны сделать проверку, что argc достаточно велик. Он всегда имеет значение не менее 1 (имя программы всегда находится в argv [0]) и увеличивается на 1 для каждого аргумента в командной строке. Таким образом, ваш чек должен быть, если в отношении argc == 1 или 3, а не 0 и 2. Ваш чек также представляется неверным. ! = с a или. – Scooter