【问题标题】:How to get unsigned int as console argument?如何将 unsigned int 作为控制台参数?
【发布时间】:2012-10-31 08:55:16
【问题描述】:


我试图通过控制台参数将一个无符号整数值传递给我的程序。

我还尝试过什么:
首先:检查argc是否为2,否则出错

如果有第二个值,我尝试将这个值转换为:

strtoul(argv[1], NULL, 0)

所以当我通过“100”时,我得到“1”
我做错了什么?

br
萨吉



€: 向我的函数传递了错误的参数,找到了错误,谢谢大家

【问题讨论】:

  • 是的,通过检查if ( iArgCount != 2 )
  • 谢谢,将错误的 arg 传递给我的函数

标签: c++


【解决方案1】:

如果没有看到实际代码,这有点难以判断,但您可以将其用作基线:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]) {
    char *pCh;
    unsigned long unlong = 42;

    // Check enough arguments.

    if (argc != 2) {
        puts ("Not enough arguments");
        return 1;
    }

    // Convert to ulong WITH CHECKING!

    unlong = strtoul (argv[1], &pCh, 10);

    // Ensure argument was okay.

    if ((pCh == argv[1]) || (*pCh != '\0')) {
        puts ("Invalid number");
        return 1;
    }

    // Output converted argument and exit.

    printf ("Argument was %ld\n", unlong);
    return 0;
}

成绩单如下:

pax> ./testprog 314159
Argument was 314159

如果这还不够帮助,我建议你发布最短的完整程序来显示问题,然后我们可以详细地告诉你它有什么问题:-)

【讨论】:

  • 谢谢,我可以看到我在我的代码中做同样的事情...if (argc != 2) 之后uiValue = strtoul (argv[1], NULL, 0);
  • @Sagi,然后在问题中发布您的完整代码。只有这样我们才能确定。或者,输入我的代码完全(复制'n'paste)以检查它是否适用于您的环境。
  • 复制了你的代码并且成功了!还发现我的错误是一切都是自己的功能并传递了错误的参数:/
  • @Sagi,如果您将原始代码放入问题中,该问题仍然对后代更有用。否则,它可能会被删除,因为问题缺少足够有用的信息。
【解决方案2】:

你的方法应该有效。或者,您可以使用字符串流:

std::string str(argv[1]);

unsigned long ul;

std::stringstream(str)>>ul;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2013-02-02
    • 1970-01-01
    相关资源
    最近更新 更多