【问题标题】:How to convert a command line argument to an int?如何将命令行参数转换为 int?
【发布时间】:2020-06-27 09:52:03
【问题描述】:

我正在尝试使用 atoi 函数将命令行参数(*argv[])转换为整数

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,我不确定为什么。谢谢你

【问题讨论】:

  • 你是如何运行程序的?你能把内部的x重命名为别的吗?
  • 你真的向程序传递了任何参数吗?请尝试对那个循环做一些rubber duck debugging。它不会做你认为它会做的事情。另外请不要在不同的范围内为不同的事物使用相同的变量名,这会使代码更难阅读和理解。
  • argv[1]->argv[x]??
  • 请注意,atoi 返回 0,当参数无法转换为整数时,您可能会解析一些根本不是数字的字符串。使用调试器来确保。
  • @Someprogrammerdude 我正在使用 Visual Studio,所以我不确定如何使用它传递参数。我知道的菜鸟

标签: c++ type-conversion atoi


【解决方案1】:

很难说有你传递给你的程序的参数,但这里很少有问题。

  1. 你的循环从 0 到 argc,但在你的循环内部你总是使用argv[1],如果你没有传递任何参数,你就会越界,因为argv[0] 总是通往你的可执行文件。
  2. atoi 是 C 中的一个函数,当它无法将其参数解析为 int 时,它返回 0,将其替换为 std::stoi,如果转换失败,您将得到并执行。您可以使用 try/catch 捕获此异常,然后检查您尝试转换为 int 的字符串。

【讨论】:

    【解决方案2】:

    嗯,这个

    #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 的路径

    希望对我有所帮助,如果我在某些方面有误,请告诉我在哪里,我会通过编辑答案来纠正自己

    【讨论】:

      猜你喜欢
      • 2014-11-07
      • 2012-08-27
      • 2014-08-10
      • 2023-03-25
      • 2019-06-02
      • 1970-01-01
      • 2015-06-04
      相关资源
      最近更新 更多