# rust编写猜数字游戏

# 需求描述

我们会实现一个经典的新手编程问题:猜数字游戏。这是它的工作原理:程序会随机生成一个1到 100 之间的整数。接着它会提示玩家猜一个数并输入,然后指出猜测是大了还是小了。如果猜对了,它会打印祝贺信息并退出。

# 需求设计

  • 打印输出提示信息
  • 使用变量存储值
  • 接受用户的输入
  • 占位符打印

# 01)打印输出提示信息

  1. 引入io 输入/输出库。io来自标准库。标准 库也被称为 std :
use std::io;
1
注意

默认情况下,Rust会将少量标准库中定义的程序项(item)引⼊到每个程序的作⽤ 域中。这些项称作 prelude,可以在标准库⽂档中了解到关于它的所有知识。

如果需要的类型不在 prelude 中,你必须使⽤ use 语句显式地将其引⼊作⽤域。 std::io 库提供很多有⽤的功能,包括接收⽤⼾输⼊的功能。

println! 是⼀个在屏幕上打印字符串的宏!

    println!("Guess the number!");

    println!("Please input your guess.");
1
2
3
提问环节
  • 什么是宏?【这个先不管,记住就行。】

# 02)使用变量存储值

  • 变量(variable)

  • 创建一个变量。【对比不同的代码】

java

左类型, 右名字,等号赋值。

int a; // 声明
a = 0; // 赋值
1
2

rust

  • let创建变量
let apples = 5;
1
  • mut (mutability,可变性);创建变量。
let apples = 5; // 不可变
let mut bananas = 5; // 可变
1
2
  • 创建一个变量。
    //使用关联函数(associated function),String的 新实例
    let mut guess = String::new();
1
2

# 03)接受用户的输入

use std::io;
    // ANCHOR: read
    io::stdin()
        .read_line(&mut guess)
1
2
3
4

std是 标准库。

io是 模块。

stdin()是 模块调用函数。

描述

我们仍可以通过 std::io::stdin 来调⽤函数。 stdin 函数返回⼀个 std::io::Stdin 的实例,这是 ⼀个类型,代表终端标准输⼊的句柄。

.read_line(&mut guess) 这⼀⾏调⽤了 read_line ⽅法,来从标准输⼊ 句柄中获取⽤⼾输⼊。我们还将 &mut guess 作为参数传递给 read_line() ,以告 诉它在哪个字符串存储⽤⼾输⼊。

.read_line(&mut guess)

全部⼯作是,将⽤⼾在标准输⼊中 输⼊的任何内容都追加到⼀个字符串中(⽽不会覆盖其内容),所以它需要字符串作 为参数。这个字符串应是可变的,以便该⽅法可以更改其内容。

  • &是什么?表⽰这个参数是⼀个引⽤**(reference)**

这为你提供了⼀种⽅法,让代码的多个 部分可以访问同⼀处数据,⽽⽆需在内存中多次拷⻉。引⽤是⼀个复杂的特性,Rust 的⼀个主要优势就是安全⽽简单的使⽤引⽤。

# 04)占位符打印

    println!("You guessed: {}", guess);
1

# 完整的代码

// ANCHOR: all
// ANCHOR: io
use std::io;
// ANCHOR_END: io
fn main() {
    
    // 1、打印输出提示信息
    // ANCHOR_END: main
    // ANCHOR: print
    println!("Guess the number!");
    println!("Please input your guess.");
    // ANCHOR_END: print

    // 2、使用变量存储值
    // ANCHOR: string
    let mut guess = String::new();
    // ANCHOR_END: string

    // 3、接受用户的输入
    // ANCHOR: read
    io::stdin()
        .read_line(&mut guess)
        .expect("Failed to read line");

    // 4、占位符打印
    println!("You guessed: {}", guess);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 运行代码

  • 第一次运行。

image-20240518102948895

  • 再次执行程序。

image-20240518102916153

Last Updated: 8/25/2024, 2:35:35 AM