Вычисление двух чисел из командной строки c ++ - PullRequest
1 голос
/ 24 февраля 2011

Это мой код:

#include <iostream>
using namespace std;

int main (int argc, char* argv[])
{
  int frstNumb = atoi (argv[1]);
  int scndNumb = atoi (argv[2]);
  int sum = 0;
  sum = frstNumb + scndNumb;
}

Хорошо, теперь это работает для целых чисел. Что я должен сделать, чтобы я мог положить, например, «2.5 и 1.2» по моим параметрам? Эта программа не будет рассчитывать такие цифры. Помощь

Спасибо

Ответы [ 4 ]

5 голосов
/ 24 февраля 2011

Аргументы всегда передаются в виде строк.Прежде всего, измените объявление основной функции на

int main (int argc, char* argv[])

Обратите внимание, что возвращаемое значение main ДОЛЖНО быть int, в противном случае оно нестандартно.

Второе преобразование argv[1] и argv[2]к целым числам либо с atoi, что, на мой вкус, немного C-ish, хотя и самое простое, либо с boost::lexical_cast

например

int i1 = atoi(argv[1]); //#include <cstdlib>
int i1 = boost::lexical_cast<int>(argv[1]); //#include <boost/lexical_cast.hpp>
2 голосов
/ 24 февраля 2011

Да, вы хотите atoi().

int frstNumb = atoi(argv[1]);
int scndNumb = atoi(argv[2]);

Я бы предложил поискать в Google atoi(), чтобы посмотреть, как это работает, возможно, это поможет вам в будущем.

2 голосов
/ 24 февраля 2011

argv[1] и argv[2] являются строками.Когда вы делаете сумму, оберните их atoi() вызовами, чтобы они были проанализированы и преобразованы в целые числа.

Благодаря Mark Loeser иalkingTarget

Ваше объявление main() должно быть:

int main(int argc, char **argv)

или

int main(int argc, char *argv[])

main() должно всегда возвращать int, а argv должно всегда быть массивом строк.

1 голос
/ 24 февраля 2011

Как предлагается в других ответах, сначала нужно изменить объявление функции main - argc представляет общее количество переданных ей аргументов, а argv представляет собой сам массив аргументов (каждый аргумент является элементом в массиве ; первый элемент - argv[0] - это путь к исполняемому двоичному файлу! argv[1] фактически является первым аргументом из командной строки).

Как в C, так и в C ++ вы можете использовать функции atoi или sscanf, но в C ++ вы должны воспользоваться возможностями преобразования STL stringstream:

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

int main(int argc, char* argv[]) 
{ 
    if(argc != 3)
    {
        cerr << "Invalid number of operands" << endl;
        return 1;
    }

    int n1 = 0;
    int n2 = 0;

    stringstream ss; 
    ss << argv[1];      
    ss >> n1;   
    ss.clear();
    ss << argv[2];  
    ss >> n2;

    int sum = n1 + n2;  

    return 0;
}
...