这是一个D练习:
import std.stdio;
void main()
{
int[] narray;
while(true) {
writeln("Enter your numbers: ");
int tmp;
readf(" %s", &tmp);
if(tmp == -1) {
writeln("It's -1, finish reading numbers.");
break;
}
else {
writeln("Storing ", tmp, " to array.");
narray ~= tmp;
printArray(narray);
}
}
int[] narrayOdd;
int[] narrayEven;
int counter = 0;
while(counter < narray.length) {
if((counter % 2) == 0) {
narrayEven ~= narray[counter];
}
else {
narrayOdd ~= narray[counter];
}
}
narrayOdd.sort;
narrayEven.sort;
writeln("Your numbers in odd positions sorted: ");
printArray(narrayOdd);
writeln("Your numbers in even positions sorted: ");
printArray(narrayEven);
}
void printArray(int[] x) {
int counter;
while(counter < x.length) {
write(x[counter], " ");
counter++;
}
write("\n");
}
我打算在用户输入-1时突破while循环,但它拒绝这样做。怎么了?
我尝试了dmd和ldc2。
答案 0 :(得分:4)
在输入-1时突破while循环,然后继续陷入下一个while循环。您正在检查while(counter < narray.length)
但从不递增计数器。
尝试:
while(counter < narray.length) {
if((counter % 2) == 0) {
narrayEven ~= narray[counter++];
}
else {
narrayOdd ~= narray[counter++];
}
}
或:
foreach(counter , value ; narray) {
if((counter % 2) == 0) {
narrayEven ~= value;
}
else {
narrayOdd ~= value;
}
}
在第二种形式中,foreach
循环创建两个临时变量。 counter
引用每个元素的索引并自动递增,value
引用该索引处的值。
如果您不熟悉foreach
,请查看here。 foreach
通常优于while
来迭代集合,除非您有充分的理由不这样做。