Как преобразовать аргумент командной строки в int? - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь преобразовать аргумент командной строки (* argv []) в целое число, используя функцию atoi

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

Это моя попытка

#include <iostream>
#include <sstream>
#include <string>
#include <cstdlib>
#include <conio.h>

using namespace std;

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


int x = 0;
for ( x=0; x < argc; x++ )
{
int x = atoi(argv[1]);
        cout << x;
}
return 0;
}

Однако это возвращает 0 и я не уверен почему. Thankyou

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Ну, это

#include <iostream>
#include <sstream>
#include <string>
#include <cstdlib>
#include <conio.h>

using namespace std;

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


    int x = 0;
    for (x = 0; x < argc; x++)
    {
        cout << argv[x];
    }
    return 0;
}

просто печатает путь к .exe, путь является строкой, он не имеет чисел. И как я понял из моего «исследования» об аргументах командной строки, вам нужно использовать вашу программу через командную строку, терминал, чтобы инициализировать аргумент argv.

Ссылка: https://www.tutorialspoint.com/cprogramming/c_command_line_arguments.htm

Кроме того, как я понял, по крайней мере, argv[0] - это всегда путь .exe

. Надеюсь, что я вам помогу, если я в чем-то ошибаюсь, пожалуйста, скажи мне где и я исправлю себя, отредактировав ответ

0 голосов
/ 16 марта 2020

Трудно сказать, что аргументы передаются в вашу программу, но здесь есть несколько проблем.

  1. Ваш l oop изменяется от 0 до argc, но ваш внутри вашего l oop вы всегда используете argv[1], если вы не передали никаких аргументов, вы выходите за пределы, потому что argv[0] - это всегда путь к вашему исполняемому файлу.
  2. atoi - это функция из C, и когда он не может проанализировать свой аргумент как int, он возвращает 0, замените его на std::stoi, и вы получите и выполнение, если преобразование не удалось. Вы можете перехватить это исключение с помощью try/catch, а затем проверить строку, которую вы пытались преобразовать в int.
...