2012-08-02 45 views
2

我有一个计算多个数的阶乘的程序。这些量拟合选取在CMD作为参数传递这样:C#分离参数参数

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

您可以添加waittime ARG像开关一样/t:100所以只有当你看到/t你知道这是一个waittime

如果你知道你的ARGS总会有waittime,然后waittime

waittime = arg[args.Length-1] 

也许值得一试,以及

如果你不这样做想重新发明轮子

+0

这里我们有一个完整的答案=)+1 – 2012-08-02 07:12:33

0

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

factorial.exe 3 4 5 

会让你有

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

编辑

由于DD59,现在我明白你的问题。你可以有一个约定,最后一个参数总是等待时间,或者你可以使用一个语法,如-time(或/t:,正如他所说)。

factorial.exe 3 4 5 -1000 

问候

+0

我觉得OP的问题是他如何数参数和等待时间有所不同。 – Hinek 2012-08-02 07:09:48

+0

@Hinek无言,我已经编辑了答案,现在我明白了。 – 2012-08-02 07:10:52

1

我认为,你想要的是像getopt的类UNIX的机器在一个合理的方式来解析参数。看看here

0

您已经在foreach循环中分隔参数。字符串s是你得到的参数。我想你想查明wait_time值,当然不想计算它。你必须修复这个位置 - 最后一个参数是wait_time或第一个arugment是。如果没有确定位置,则很难确定。

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的答案。

+0

这是强制性的,由于某种原因,这是行不通的......如果我把时间作为第一个参数,它的工作速度比它应该快,如果它是最后它的工作更慢。 ..需要看看这个 – robertpas 2012-08-02 07:32:04

+0

上面的代码检查你在最后一个参数中的wait_time。所以把它放在第一位会导致你的最后一个数字被解释为wait_time ... – Hinek 2012-08-02 09:30:54