我要求的是C语言中fgets()
的等价物。
let line = ...;
println!("You entered: {}", line);
字符串
我读过How to read user input in Rust?,但它询问如何读取多行;我只想要一行。
我也读How do I read a single String from standard input?,但我不确定它的行为是否像fgets()
或sscanf("%s",...)
。
我要求的是C语言中fgets()
的等价物。
let line = ...;
println!("You entered: {}", line);
字符串
我读过How to read user input in Rust?,但它询问如何读取多行;我只想要一行。
我也读How do I read a single String from standard input?,但我不确定它的行为是否像fgets()
或sscanf("%s",...)
。
6条答案
按热度按时间wribegjk1#
在How to read user input in Rust?中,您可以看到如何在所有行上进行重命名:
字符串
你也可以手动编译没有for循环:
型
你不能写一行代码来做你想做的事情,但是下面的代码只读一行(和How do I read a single String from standard input?中的答案完全一样):
型
您也可以使用
text_io
crate进行超级简单的输入:型
o8x7eapl2#
如果你真的想要
fgets
的等价物,那么@Gerstmann是对的,你应该使用Stdin::read_line
。这个方法接受一个缓冲区,你可以更好地控制把字符串放入其中:字符串
不像C,你不会意外地溢出缓冲区;如果输入字符串太大,它会自动调整大小。
answer from @oli_obk - ker是你经常看到的惯用解决方案,它为你管理字符串,接口也干净得多。
4nkexdtk3#
从
stdin
读取一行:字符串
您可以使用
line.trim_end()
删除'\n'
读到下一页:
型
使用隐式同步:
型
使用显式同步:
型
如果你对字节数感兴趣,例如
n
,用途:let n = handle.read_line(&mut line)?;
个或
let n = io::stdin().read_line(&mut line)?;
个试试这个:
型
参见doc
qmelpv7a4#
从Rust 1.62开始,您可以使用
Stdin::lines()
来使用一行(代码)获取一行(输入):字符串
虽然
Stdin::lines()
可以用于单行,但它通常用于获取多行。它简化了这种用例,因此不再需要担心生存期和锁定:型
b4qexyjb5#
for
*-循环 *字符串
3pvhb19x6#
你可以使用自己的macro。
字符串