2

我有一个计算多个数字的阶乘的程序。这些 nuber 在 cmd 中作为参数传递,如下所示:

factorial.exe 3 4 5

这将分别计算 3、4 和 5 的阶乘。该程序的早期版本有一个百分比来显示堆栈的完整度。我现在想把它带回来,但我也将等待时间作为 cmd 中的参数传递,如下所示:

factorial.exe 3 4 5 wait_time1

或者

factorial.exe 3 4 5 1000

要读取我使用这个 args 解析器的数字:

static string the_time;
    public static void Main(string[] args)
    {

        foreach (string s in args)
        {

            extra = int.Parse(s);

            Calculate(extra);
        }
     }

我怎样才能分开论点?提前致谢。

4

6 回答 6

4

waittime您可以像开关一样添加arg,/t:100因此只有当您看到它时才/t知道它是waittime.

如果您知道您的 args 将始终具有waittime,那么waittime

waittime = arg[args.Length-1]

可能也值得一看

如果您不想重新发明轮子

于 2012-08-02T07:06:14.647 回答
1

我认为,您想要的是类似于 UNIX 机器上的 getopt 以合理的方式解析参数。看看这里

于 2012-08-02T07:07:54.870 回答
0

数组中的每个元素都是来自命令行的字符串,以空格分隔。这样,对于

factorial.exe 3 4 5

你会有吗

args[0] //3
args[1] //4
args[2] //5

编辑

感谢 DD59,现在我明白了你的问题。您可以约定最后一个参数始终是等待时间,或者您可以使用语法,例如-time(或/t:,如他所说)。

factorial.exe 3 4 5 -1000

问候

于 2012-08-02T07:05:20.787 回答
0

您已经在 foreach 循环中分离了参数。字符串 s 是您作为参数得到的。我想您想确定 wait_time 值,当然不想计算它。你必须像这样固定位置 - 最后一个参数是 wait_time 或第一个参数是。如果不固定位置,将很难确定。

于 2012-08-02T07:09:15.063 回答
0

wait_time 是强制性参数吗?它总是站在最后吗?然后你可以这样做:

the_time = args[args.Length - 1];
for (int i=0; i<args.length - 1; i++){ 
    extra = int.Parse(args[i]); 
    Calculate(extra); 
} 

如果 wait_time 是可选的,您应该选择 DD59 的答案。

于 2012-08-02T07:14:27.197 回答
0

解析命令行是一个相当复杂的部分。也许你应该看看一个可用的库(一些例子):

于 2012-08-02T07:19:40.560 回答