gpt4 book ai didi

windows - 如何终止标准输入?

转载 作者:行者123 更新时间:2023-11-29 08:21:38 24 4
gpt4 key购买 nike

在 C++ 中,我可以像这样从标准输入中读取:

while (std::getline(std::cin, line))
process(line);

当我输入 Ctrl+Z (Windows) 时,它终止标准输入,循环结束。我可以用其他语言做类似的事情。

我试图将这个成语翻译成 Rust,然后我想到了这个:

use std::io;

fn main() {
loop {
match io::stdin().read_line() {
Ok(line) => process(line),
Err(_) => break,
}
}
}

fn process(x: String) {
println!("{:?}", x.as_bytes());
}

但是,当我在运行此代码时执行 Ctrl+Z 时,它不会转到 Err 情况。它只是将该行处理为正常。给出一个包含 3 个字符的字符串,SUB 字符 (0x1A),后跟 CRLF ("\r\n")。

那么,如何终止标准输入并导致 read_line 失败?或者更确切地说,我如何检测终止标准输入的请求?我可以检查 SUB 字符,但它不可移植,因为它在其他系统上会是不同的字符(例如 EOT)。

编辑

github repo 上有一个 Unresolved 问题。 Issue #19914

最佳答案

我没有方便的 Windows 虚拟机来测试它,但它可以在 OS X 上运行(使用 Ctrl-D)。这对你的情况有用吗:

use std::io::stdin;

fn process(a: &str) {}

fn main() {
for line in stdin().lock().lines() {
match line {
Ok(line) => process(&*line),
Err(e) => panic!("{}", e),
}
}
}

关于windows - 如何终止标准输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27990213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com