do-while并没有先退出q'

时间:2014-12-26 23:43:06

标签: d do-while

因此,我正在研究D中一个简单的基于文本的小游戏,以获得使用该语言的一些经验。这是我目前正在努力解决的一个do-while循环:

do{
  writeln("a. Advance 1 year\tc. Advance 10 years\tq. Quit");
  writeln("b. Advance 5 years\td. Modify faction");

  input = chomp(stdin.readln());

  switch(input){
    ...
    default:
      break;
  }
  writeln(input[0]);
}while(input[0] != 'q');

现在我遇到的问题是,当我点击q并进入循环时,不会退出。它只是继续前进。但是在第一次输入q之后,另一个q将终止循环。 writeln在那里作为一个完整性检查,它打印出我输入的字符完全类型。我觉得自己很疯狂,但它可能只是一个简单的类型 - 或者你们会立即发现的东西。 switch语句中的任何内容都不会修改'输入'。

编辑:好的,有些人一直在要求查看所有代码。这是:http://pastebin.com/A7qM5nGW

当我在开关修改输入中没有说什么时,它隐藏了我还没有在开关中写任何东西的事实。在添加更复杂的东西之前,我一直试图让戒烟部分正常工作。另外,这是我运行它的示例文件:http://pastebin.com/4c2f4Z5N

1 个答案:

答案 0 :(得分:1)

好的,我的朋友找到了。它与while循环本身无关。我简单地忘了args [0]是程序的名称。所以它实际上只运行一次父循环,然后实际退出,然后运行适当的循环。通过使父循环像这样修复...

foreach(filename; args[1..$]){
    ...
    do{
        ...
    while(input[0] != 'q');
}

而不是:

foreach(filename; args){

等...