gpt4 book ai didi

loops - loop{} 运行了两次?

转载 作者:行者123 更新时间:2023-11-29 07:54:21 31 4
gpt4 key购买 nike

我已经完整地编写了“The Rust Programming Language”在线书籍中的程序,chapter 2 .我还进一步开发了它:通过添加一个简单的问题/响应,用户可以通过输入“y”再次玩游戏。

但是,我的程序中遇到了一个小错误。当用户选择再次运行游戏时,文本输出“请输入(数字)猜测”重复两次。当然,这不会会影响程序的主要功能(重复后它仍然可以正常运行),但它看起来确实很奇怪,我宁愿现在就解决这个问题而不是离开它。

我已经进行了一些调试,这让我得出结论,它肯定发生在代码的 [图 3] 区域。要查看我是如何做到的,请转到下面的调试区域。

代码

extern crate rand;
#[macro_use]
extern crate text_io;

use rand::Rng;
use std::io;
use std::cmp::Ordering;

//Main code
fn main() {
// Generate random number, create premise
println!("Guess the number!");
let mut breaking_choice = false;
while !breaking_choice {
let secret_number = rand::thread_rng().gen_range(1, 101);
// **Problem area**
loop {
println!("Please input a (number) guess");
println!("1"); // [**REFERENCE 1**]
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");
println!("2"); // [**REFERENCE 2**]
let guess: u32 = match guess.trim().parse() { // [FIGURE 3]
Ok(num) => num, // [FIGURE 3]
Err(_) => continue, // [FIGURE 3]
};

// ...until correct
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small"),
Ordering::Greater => println!("Too big"),
Ordering::Equal => {
println!("Correct!");
break;
}
}
}

// **Possible problem area**
println!("Would you like to continue playing? Y or N");
let choice: String = read!();

if choice == "N" {
breaking_choice = true
} else if choice == "n" {
breaking_choice = true
} else if choice == "Y" {
continue;
} else if choice == "y" {
continue;
}
}
}

调试

我做的第一件事是在有问题的代码的主要处理区域放置一些简单的 println! 命令:[引用 1] 和 [引用 2]。这使我能够查看是否有任何命令是它们之间的问题,以便让我更好地了解正在发生的事情。我还将随机数生成器替换为一组数字 (let secret_number = 5;)

这是编译时发生的事情:

这是执行过程中发生的事情:

根据这些结果,我认为错误发生在 [图 3](主要输入验证)中,因为它似乎就此停止。

我将 println!("3"); 放在 //...until correct 之前,它不会在第一个循环中输出。因此,程序在 [图 3] 处出现问题。

最佳答案

我猜按 enter 会导致 CRLF (\r\n)(在 Windows 上;在 Linux 上它似乎工作正常),即两个空白字符。 read! 将只读取其中一个,下一个 read_line 调用将返回一个空行(仅包含 \n 的字符串( 0x0a)).

关于loops - loop{} 运行了两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47227956/

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