在 Rust 中使用 for 循环通过输入字符串初始化向量
Initialize vector through input string using for loop in Rust
let mut input_player = String::new();
let mut player_name = Vec::new();
println!("Enter names of the player: ");
for a in 1..(player_number+1){
println!("Enter names of the player # {}: ", a);
io::stdin()
.read_line(&mut input_player)
.expect("failed to read from stdin");
player_name.push(input_player);
}
我在 for 循环 通过 输入字符串 初始化 Vector 时遇到问题
您在这里有 2 个误解。
首先,您尝试读入字符串而不先清除它。
假设第一个名字是 Foo
,第二个名字是 Bar
。
在第一个 read_line
之后,input_player
的值确实是 Foo
。但是第二个 read_line
不会覆盖,它会追加。所以现在该值将是 FooBar
,这可能不是您想要的。
第二个也是更重要的一点是,您在第一次循环迭代中将字符串交给了 vec
。但是您正在尝试在第二次迭代中使用它。这涉及所有权领域,您可以阅读有关 here.
的更多信息
您需要的是为循环的每次迭代创建一个新字符串。所以在循环里面定义一个新的input_player
.
let mut input_player = String::new();
let mut player_name = Vec::new();
println!("Enter names of the player: ");
for a in 1..(player_number+1){
println!("Enter names of the player # {}: ", a);
io::stdin()
.read_line(&mut input_player)
.expect("failed to read from stdin");
player_name.push(input_player);
}
我在 for 循环 通过 输入字符串 初始化 Vector 时遇到问题
您在这里有 2 个误解。 首先,您尝试读入字符串而不先清除它。
假设第一个名字是 Foo
,第二个名字是 Bar
。
在第一个 read_line
之后,input_player
的值确实是 Foo
。但是第二个 read_line
不会覆盖,它会追加。所以现在该值将是 FooBar
,这可能不是您想要的。
第二个也是更重要的一点是,您在第一次循环迭代中将字符串交给了 vec
。但是您正在尝试在第二次迭代中使用它。这涉及所有权领域,您可以阅读有关 here.
您需要的是为循环的每次迭代创建一个新字符串。所以在循环里面定义一个新的input_player
.