前言:
现时兄弟们对“c语言编程猜数游戏代码”大概比较关切,各位老铁们都想要学习一些“c语言编程猜数游戏代码”的相关文章。那么小编同时在网上网罗了一些对于“c语言编程猜数游戏代码””的相关知识,希望姐妹们能喜欢,姐妹们快快来学习一下吧!#挑战30天在头条写日记#
原始内容来源:
需要提前了解的内容
在阅读本文之前,请确认已经了解下面的知识:
什么是Rust?是什么是Cargo?怎么构建、运行Rust项目?使用Rust编写一个猜数字游戏
创建一个新项目:
cargo new guessing_gamecd guessing_game
编辑Cargo.toml文件
[package]name = "guessing_game"version = "0.1.0"edition = "2021"# See more keys and their definitions at [dependencies]package字段:当前项目的名称,版本号等信息dependencies字段:项目依赖,当前默认为空
编辑主要代码逻辑文件src/main.rs:
fn main() { println!("Hello, world!");}
运行项目:
cargo run
引入标准输入输出库:
use std::io;fn main() { println!("Guess the number!"); println!("Please input your guess."); let mut guess = String::new(); io::stdin() .read_line(&mut guess) .expect("Failed to read line"); println!("You guessed: {guess}");}
生成随机数,需要添加依赖:
[dependencies]rand = "0.8.5"
use std::io;use rand::Rng;fn main() { println!("Guess the number!"); let secret_number = rand::thread_rng().gen_range(1..=100); println!("The secret number is: {secret_number}"); println!("Please input your guess."); let mu guess = String::new(); id::stdin() .read_line(&mut guess) .expect("Failed to read line"); println!("You guessed: {guess}");}
比较猜测数字是否正确:
use std::io;use rand::Rng;fn main() { println!("Guess the number!"); let secret_number = rand::thread_rng().gen_range(1..=100); println!("The secret number is: {secret_number}"); println!("Please input your guess."); let mu guess = String::new(); id::stdin() .read_line(&mut guess) .expect("Failed to read line"); println!("You guessed: {guess}"); match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => println!("You win!"), }}
`guess.cmp`这段代码会因为类型和函数签名不一致报错:
$ cargo build Compiling libc v0.2.86 Compiling getrandom v0.2.2 Compiling cfg-if v1.0.0 Compiling ppv-lite86 v0.2.10 Compiling rand_core v0.6.2 Compiling rand_chacha v0.3.0 Compiling rand v0.8.5 Compiling guessing_game v0.1.0 ()error[E0308]: mismatched types --> src/main.rs:22:21 |22 | match guess.cmp(&secret_number) { | --- ^^^^^^^^^^^^^^ expected struct `String`, found integer | | | arguments to this function are incorrect | = note: expected reference `&String` found reference `&{integer}`note: associated function defined here --> /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/core/src/cmp.rs:783:8For more information about this error, try `rustc --explain E0308`.error: could not compile `guessing_game` due to previous error
需要修改成下面的代码:
use std::io;use std::cmp::Ordering;use rand::Rng;fn main() { println!("Guess the number!"); let secret_number = rand::thread_rng().gen_range(1..=100); println!("The secret number is: {secret_number}"); println!("Please input your guess."); let mut guess = String::new(); io::stdin() .read_line(&mut guess) .expect("Failed to read line"); let guess: u32 = guess.trim().parse().expect("Please try a number"); println!("You guessed: {guess}"); match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => println!("You win!"), }}
通过循环允许多次输入:
use std::io;use std::cmp::Ordering;use rand::Rng;fn main() { println!("Guess the number!"); let secret_number = rand::thread_rng().gen_range(1..=100); println!("The secret number is: {secret_number}"); loop { println!("Please input your guess."); let mut guess = String::new(); io::stdin() .read_line(&mut guess) .expect("Failed to read line"); let guess: u32 = guess.trim().parse().expect("Please try a number"); println!("You guessed: {guess}"); match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => println!("You win!"), } }}
上面的代码运行后需要通过强制退出(例如mac下按`control+c`键)。
添加正常的退出逻辑:
use std::io;use std::cmp::Ordering;use rand::Rng;fn main() { println!("Guess the number!"); let secret_number = rand::thread_rng().gen_range(1..=100); println!("The secret number is: {secret_number}"); loop { println!("Please input your guess."); let mut guess = String::new(); io::stdin() .read_line(&mut guess) .expect("Failed to read line"); let guess: u32 = guess.trim().parse().expect("Please try a number"); println!("You guessed: {guess}"); match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => { println!("You win!"); break; } } }}
上面这段代码还有个问题,假如用户输入的不是数字,会导致整个程序直接崩溃。
use std::io;use std::cmp::Ordering;use rand::Rng;fn main() { println!("Guess the number!"); let secret_number = rand::thread_rng().gen_range(1..=100); println!("The secret number is: {secret_number}"); loop { println!("Please input your guess."); let mut guess = String::new(); io::stdin() .read_line(&mut guess) .expect("Failed to read line"); let guess: u32 = match guess.trim().parse() { Ok(num) => num, Err(_) => continue, }; println!("You guessed: {guess}"); match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => { println!("You win!"); break; } } }}
这样即使用户输入不是数字,也不会导致程序直接崩溃了。
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言编程猜数游戏代码