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}
...这就是你所看到的。
我搜索了很多,但没有找到准确的答案。
为什么我的程序在读出我的回车后多出一行(所以是两行空行)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}
...这就是你所看到的。