1

我遇到了一个奇怪的问题。我创建了一个对象(在该对象内我调用 readline..)然后程序退出,尽管我最后调用了 ReadLine()。

为什么停不下来?如何让它停下来?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Funkcjonalnosc {

    class MainClass {
        static void Main(string[] args) {
            new MainMenu();         
            Console.ReadLine();
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Funkcjonalnosc {
   public class MainMenu {
        int selection;
        public MainMenu() {
            showMenu();
            selection = getSelection();
            Console.WriteLine("Wybrano "+ selection);
            switch (selection) {
                case 1: break; //strojenie
                case 2: break; //pobieranie stroju
            }
        }
        void showMenu() {
            String menu = "1. Nastrój\n2. Dodaj strój";
            Console.WriteLine(menu);
        }

        int getSelection() {//pobiera wybrana opcje z menu{
            try {
                return Console.Read();
            } catch (Exception e) { Console.WriteLine("Zly wybor"); getSelection(); }
            return -1;
        }
    }
}
4

1 回答 1

2

从 MSDN 上Console.Read

当您键入输入字符时,Read 方法会阻止其返回;当您按下 Enter 键时它会终止

因此,如果我输入,比如说,1它不会做任何事情——直到我输入enter. 当我这样做时,Console.Read返回1,但enter仍然缓冲。当您使用Console.ReadLine时,它会获取此缓冲enter,因此会立即退出。您可以通过键入123enter-Read获取1- 并ReadLine获取剩余的 来查看这一点23

为了避免这种缓冲行为,您可能想尝试一下Console.ReadKey

于 2012-11-13T13:41:11.853 回答