我开始学习D.我写了几个基本程序(你好世界......添加2个麻木)我正在进行第三个.它应该采用一组数字并将它们加在一起.我有以下代码:
import std.stdio;
import std.algorithm;
import std.string;
import std.conv;
int main(string[] argv)
{
int sum;
foreach (int i, string s; argv)
{
writefln("argv[%d] = '%s'", i, s);
if (isNumeric(s)){
sum += to!int(s);
} else {
writeln("Please only input numbers. ex:\n\t", argv[0], " [number] [number] [number]");
return 1;
}
}
writeln(sum);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题argv[0]是脚本名称.
为什么?
我怎么告诉它跳过第一个?我可以告诉它跳过所有非数字输入,但是如果索引大于0,我可能想要错误输出?
argv[0]始终是调用程序的名称,它是D继承的C标准的一部分.如果你有一个程序可以在命令行上通过多个名称调用它很有用 - 它可以帮助你知道用户想要什么,因为一个程序可能是几个命令(参见C程序busybox的一个很好的例子,一个程序包含几个常见的unix命令).您也可以像使用它一样将它用于帮助屏幕.
它是args的一部分的原因是命令行是这样的:program foo bar- 程序名是该行上给出的第一个东西,所以它也是args中的第一件事.
但要跳过它,你可以在循环之前将其切掉:
foreach (int i, string s; argv)
Run Code Online (Sandbox Code Playgroud)
可以变成
foreach (int i, string s; argv[1 .. $])
Run Code Online (Sandbox Code Playgroud)
虽然,然后我也会偏移 - 当argv == 1时i == 0,所以你可能只想if(i == 0) continue;在循环中说出来跳过它.