我搜索了很多,但我找不到准确的答案。
为什么我的程序在读完回车后会发出一条额外的行(所以两条空行)?
当我在carriageReturn(13)之前完成while循环时,它会在“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(回车)之后,10(换行)之前的输出:
Type a letter and press Enter: ads
You typed: 97
a
You typed: 100
d
You typed: 115
s
You typed: 13
--------
13之前的输出(回车):
Type a letter and press Enter: ads
You typed: 97
a
You typed: 100
d
You typed: 115
s
--------
感谢您的帮助。
答案 0 :(得分:0)
观察这一行:
System.out.println((char) letter);
您正在使用ASCII代码13
打印该字母,代表"回车"。另外,您正在使用println
,在输入结束时打印一条额外的新行。因此,两个空行将打印到控制台。
更新
Enter
密钥a.k.a. Return
密钥将\r
或字符代码13
发送到控制台。因此,在while
循环条件下,进行此更改:
while((letter = System.in.read ()) != '\r') {
希望这有帮助!
答案 1 :(得分:0)
当您按Enter键时,在Windows上会返回两个字符:回车符(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);
}
答案 2 :(得分:0)
13是回车符,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}
......这就是你所看到的。