System.in.read() - 为什么 Carriage Return 后有两个空行?

System.in.read() - why two empty lines after Carriage Return?

我搜索了很多,但没有找到准确的答案。

为什么我的程序在读出我的回车后多出一行(所以是两行空行)Return?

当我在回车前完成 while 循环时Return (13) 它会在 "c".

之后直接打印“------”

这是我的程序:

import java.io.*;
class IOIntro {
public static void main(String args[]) throws IOException {
     int letter = 0;
    System.out.print("Type a letter and press Enter: ");

   while((letter = System.in.read ()) !=10) { //loops throw whole inputStream until there is a new Line Feed
       System.out.println("You typed: " + letter);
       System.out.println((char) letter);
    }
   System.out.print("--------");
   }
 }

13 之后(回车 Return)、10 之前(换行)输出:

Type a letter and press Enter: ads
You typed: 97
a
You typed: 100
d
You typed: 115
s
You typed: 13


--------

13之前的输出(回车Return):

Type a letter and press Enter: ads
You typed: 97
a
You typed: 100
d
You typed: 115
s
--------

感谢您的帮助。

观察这一行:

System.out.println((char) letter);

您正在使用代表 "carriage return" 的 ASCII 代码 13 打印字母。另外,您正在使用 println 在其输入末尾打印一个额外的新行。所以两个空行被打印到控制台。

Update:

Enter键a.k.a。 Return 键向控制台发送 \r 或字符代码 13。因此,在您的 while 循环条件中,进行以下更改:

while((letter = System.in.read ()) != '\r') { 

希望对您有所帮助!

当您按 Enter 键时,在 Windows 上您会返回两个字符:一个回车符 return (13) 和一个换行符 (10)。

代码 13 有点令人困惑,因为在某些平台上(例如 OSX)它表示 换行

您的 IDE 可能是为了安全起见,并将其解释为换行符。如果您使用的是 Eclipse,请参阅 bug 76936

\r (13) 应将光标移动到行首,但 停留在该行.

如果您 运行 在真正的控制台中使用您的应用程序,您应该只会看到一个换行符。

>java -cp . IOIntro
Type a letter and press Enter:
You typed: 13

--------
>

如果您想在 Enter 时静默退出,请将您的测试从 10 更改为 13:

   while((letter = System.in.read ()) !=13) {
       System.out.println("You typed: " + letter);
       System.out.println((char) letter);
    }

13是回车return,println()写换行

所以:

 System.out.println("You typed: " + letter);
 System.out.println((char) letter);

对于 'a',打印:

 Your typed: 100{newline}a{newline}

对于“{newline}”,输出:

 You typed: 13{newline}{cr}{newline}

...这就是你所看到的。