1

ユーザーが「q」と入力するとプログラムを終了するコードがいくつかあります

//press 'q' to quit application
ConsoleKeyInfo info = Console.ReadKey(true); ;
while (info.KeyChar != 'q') {
    info = Console.ReadKey(true);
}

キャプチャされたキーが 'p' の場合に別の非終了動作が発生するように、この構造を変更するにはどうすればよいですか?

条件を次のように変更した場合:

(info.KeyChar != 'q') && (info.KeyChar != 'p')

次に、「p」もプログラムを終了します。「p」ケースを処理するためにwhileループ内にロジックを入れたとしても。

また:

ConsoleKeyInfo info = Console.ReadKey(true);
while (true) {
    info = Console.ReadKey(true);
    if (info.KeyChar == 'q') break;
    else if (info.KeyChar == 'p') {
        //other behavior
     }
}

なんらかの理由で、プログラムを終了するにはユーザーが 'q' を 2 回押す必要がありますが、意図した動作は、キーを 1 回押すだけでアクションがトリガーされることです。

4

7 に答える 7

3
var exitWhile = false;
while (!exitWhile) {
    ConsoleKeyInfo info = Console.ReadKey(true);
    switch (info.KeyChar) {
        case 'q':
            exitWhile = true;
            break;

        case 'p':
            //something else to do
    }
}
于 2016-08-03T01:30:33.043 に答える
1

ReadKey を 2 回呼び出したので、これを試してください。

while (true) {
    var info = Console.ReadKey(true);
    if (info.KeyChar == 'q') break;
    else if (info.KeyChar == 'p') {
        //other behavior
    }
}
于 2016-08-03T01:29:49.060 に答える
0
do {
   info = Console.ReadKey(true);
   if (info.KeyChar == 'q') break;
   else if (info.KeyChar == 'p') {
    //other behavior
   }
}while (true);
于 2016-08-03T01:34:09.003 に答える
0
while (true)
{
    ConsoleKeyInfo info = Console.ReadKey(true);
    {
        if (info.KeyChar == 'q')
            Environment.Exit(0);
        else if (info.KeyChar == 'p')
        {
            //other behavior
        }
    }
}
于 2016-08-03T01:35:03.380 に答える
0
ConsoleKeyInfo info = Console.ReadKey(true);
while (info.KeyChar != 'q') {
    if (info.KeyChar != 'p') {
        // handle p case
    }
    info = Console.ReadKey(true);
}
于 2016-08-03T01:37:10.483 に答える
0

個人的には、次のようなものを使用します。

ConsoleKeyInfo info;
bool done = false;
while (!done) {
    info = Console.ReadKey(true);
    switch(info.KeyChar) {
        case 'p':
            // do something
            break;
        case 'q':
            done = true;
            // do something else
            break;
    }
}
于 2016-08-03T01:31:49.277 に答える