2013-12-16 5 views
2

Я пишу очень простое приложение командной строки 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; 
} 
+0

ARGV [0] будет название вашей программы. Используйте argv [1] для первого аргумента, argv [2] для второго и т. Д. Но в любое время, когда вы используете argv [1 ... n], вы должны сделать проверку, что argc достаточно велик. Он всегда имеет значение не менее 1 (имя программы всегда находится в argv [0]) и увеличивается на 1 для каждого аргумента в командной строке. Таким образом, ваш чек должен быть, если в отношении argc == 1 или 3, а не 0 и 2. Ваш чек также представляется неверным. ! = с a или. – Scooter

ответ

2

Используя эту функцию, чтобы преобразовать ваш вклад плавать номер,

double f1, f2; 
if (argc == 2) 
{ 
    f1 = atof (argv[0]); 
    f2 = atof (argv[1]); 
} 
+0

Компилятор дает мне горе для этого. Как и раньше, 'atof' не определен в области. – 2mac

+1

Вам необходимо ** # включить ** – David

+2

Если это C++, ** не ** использовать stdlib.h. Вместо этого используйте 'cstdlib'. – Sinkingpoint

1

А на C++ char** только что, указатель на указатель на символ, таким образом, не конвертируемая в float (или любое числовое значение для этого вещества) непосредственно Таким образом, ваш первый пример не удастся. Вы можете использовать промежуточные функции atof или strtof (примечание str tof, not stof, почему ваш второй пример не удается) для преобразования этих значений, если вы уверены, что они действительно находятся в форме float.

+0

Хорошо. Я изменил код, чтобы использовать 'strtof' вместо этого, но я все еще получаю' error: 'strtof' не был объявлен в сообщении этой области' при компиляции. – 2mac

1

Вы просто преобразуете переменную char * в float по типу. Это будет значение типа указателя для float, а не строка для float.

Для преобразования строки в float вам необходимо использовать такие функции, как atof, strtof. Или вы можете написать свою собственную функцию для преобразования строки в float.

Смежные вопросы