carriage return / 使用 do-while 循环移除换行符
carriage return / line feed removal with do-while loop
各位,
我使用了google和这个网站,但是找不到下面代码中一小部分的深入解释:
// Guess the letter game, 4th version.
class Guess4 {
public static void main(String args[])
throws java.io.IOException {
char ch, answer = 'K';
do {
System.out.println("I'm thinking of a letter between A and Z.");
System.out.print("Can you guess it: ");
// read a letter, but skip cr/lf
do {
ch = (char) System.in.read(); // get a char
} while(ch == '\n' | ch == '\r');
if(ch == answer) System.out.println("** Right **");
else {
System.out.print("...Sorry, you're ");
if(ch < answer) System.out.println("too low");
else System.out.println("too high");
System.out.println("Try again!\n");
}
} while(answer != ch);
}
}
所以我的问题是关于这部分的:
do {ch = (char) System.in.read();
} while(ch == '\n' | ch == '\r');
有人可以深入解释一下这是如何工作的吗?我知道它首先从键盘读取一个字符,因为 do-while 循环至少运行一次。 |意味着它们都必须为假才能让 do-while 循环停止。这按什么顺序工作?所以当我按下一个字母时,它首先得到一个回车符 return 和换行符,两者都是正确的,所以它再次运行 system.in.read,但随后它运行了两次并且它也已经有了我的字母,所以当 system.in.read 由于循环再次运行时,它会再次产生一个回车符 return 和换行符,或者不?所以在我看来它变成了一个无限循环,但事实并非如此。我尝试了 运行 没有这个的程序,当我按下一个字母时,它打印了两个问题,两次。为什么?我对这个循环和删除这个 cr/nl 的工作原理有点困惑。感谢您的帮助。
ch = (char)System.in.read();
在循环的每次迭代中将新的 char
读入 ch
。只要输入字符是换行符 (\n
) 或换行符 (\r
),循环就会继续。任何其他输入结束循环。
各位,
我使用了google和这个网站,但是找不到下面代码中一小部分的深入解释:
// Guess the letter game, 4th version.
class Guess4 {
public static void main(String args[])
throws java.io.IOException {
char ch, answer = 'K';
do {
System.out.println("I'm thinking of a letter between A and Z.");
System.out.print("Can you guess it: ");
// read a letter, but skip cr/lf
do {
ch = (char) System.in.read(); // get a char
} while(ch == '\n' | ch == '\r');
if(ch == answer) System.out.println("** Right **");
else {
System.out.print("...Sorry, you're ");
if(ch < answer) System.out.println("too low");
else System.out.println("too high");
System.out.println("Try again!\n");
}
} while(answer != ch);
}
}
所以我的问题是关于这部分的:
do {ch = (char) System.in.read();
} while(ch == '\n' | ch == '\r');
有人可以深入解释一下这是如何工作的吗?我知道它首先从键盘读取一个字符,因为 do-while 循环至少运行一次。 |意味着它们都必须为假才能让 do-while 循环停止。这按什么顺序工作?所以当我按下一个字母时,它首先得到一个回车符 return 和换行符,两者都是正确的,所以它再次运行 system.in.read,但随后它运行了两次并且它也已经有了我的字母,所以当 system.in.read 由于循环再次运行时,它会再次产生一个回车符 return 和换行符,或者不?所以在我看来它变成了一个无限循环,但事实并非如此。我尝试了 运行 没有这个的程序,当我按下一个字母时,它打印了两个问题,两次。为什么?我对这个循环和删除这个 cr/nl 的工作原理有点困惑。感谢您的帮助。
ch = (char)System.in.read();
在循环的每次迭代中将新的 char
读入 ch
。只要输入字符是换行符 (\n
) 或换行符 (\r
),循环就会继续。任何其他输入结束循环。