为什么输入错误值后的输出是消息的三行而不是一行?

时间:2014-08-08 20:02:35

标签: java

输入的代码是:

import java.io.IOException;

public class A {

    public void fn() throws IOException
    {
    char ch;
    do
    {
        System.out.println("Press C or c to continue.");
        ch = (char) System.in.read();
    }
    while (ch != 'C' && ch != 'c');
    }

    public static void main(String[] args) throws IOException 
    {
        A a =new A();
        a.fn();
    }

}

,我得到的输出是:

Press C or c to continue.
m // i entered value "m" here...
Press C or c to continue.
Press C or c to continue.
Press C or c to continue.

为什么输入错误值后的输出是消息的三行而不是一行?

1 个答案:

答案 0 :(得分:10)

您对read()的号码会读取一个字符。当您输入m并按下ENTER时,实际发送的内容是三个字符:

m 
carriage-return
linefeed

你的程序循环两次以消耗两个额外的输入字符。

您应该使用以下两种方法之一:

  1. 使用Scanner。我并不赞成这种方法,因为如果输入发生变化,它会有点脆弱。
  2. System.in中换行BufferedReader并使用readLine()获取整行而不行终止符,并提取所需的数据。
  3. 任何一种方法都可以为您处理不同操作系统上的不同行结尾。