龙空技术网

软件开发 | Rust 基础系列 #8:编写里程碑 Rust 程序

硬核老王 248

前言:

当前同学们对“幸运数c程序”可能比较珍视,看官们都需要剖析一些“幸运数c程序”的相关知识。那么小编同时在网摘上搜集了一些对于“幸运数c程序””的相关文章,希望姐妹们能喜欢,你们一起来了解一下吧!

到目前为止,我们已经讲解了包括 变量、可变性、常量、数据类型、函数、if-else 语句和循环在内的一些关于 Rust 编程的基础知识。

在 Rust 基础系列的最后一章里,让我们现在用 Rust 编写一个程序,使用这些主题,以便更好地理解它们在现实世界中的用途。让我们来编写一个相对简单的程序,用来从水果市场订购水果。

我们程序的基本结构

来让我们首先向用户问好,并告诉他们如何与程序交互。

fn main {    println!("欢迎来到水果市场!");    println!("请选择要购买的水果。\n");    println!("\n可以购买的水果:苹果、香蕉、橘子、芒果、葡萄");    println!("购买完成后,请输入“quit”或“q”。\n");}

获取用户输入

上面的代码非常简单。目前,你不知道接下来该做什么,因为你不知道用户接下来想做什么。

所以让我们添加一些代码,接受用户输入并将其存储在某个地方以便稍后解析,然后根据用户输入采取适当的操作。

use std::io;fn main {    println!("欢迎来到水果市场!");    println!("请选择要购买的水果。\n");    println!("\n可以购买的水果:苹果、香蕉、橘子、芒果、葡萄");    println!("购买完成后,请输入“quit”或“q”。\n");    // 获取用户输入    let mut user_input = String::new;    io::stdin        .read_line(&mut user_input)        .expect("无法读取用户输入。");}

有三个新元素需要告诉你。所以让我们对这些新元素进行浅层次的探索。

1. 理解 use 关键字

在这个程序的第一行,你可能已经注意到我们“使用”(哈哈!)了一个叫做 use的新关键字。Rust 中的use关键字类似于 C/C++ 中的#include指令和 Python 中的import关键字。使用use关键字,我们从 Rust 标准库std中“导入”了io(输入输出)模块。

LCTT 译注:“使用”在原文中为“use”,与新介绍的关键字一样。

你可能会想知道为什么我们在可以使用 println宏来将某些内容输出到标准输出时,导入io模块是必要的。Rust 的标准库有一个叫做prelude的模块,它会自动被包含。该模块包含了 Rust 程序员可能需要使用的所有常用函数,比如println宏。(你可以在这里阅读更多关于std::prelude模块的内容。)

Rust 标准库 std中的io模块是接受用户输入所必需的。因此,我们在程序的第一行添加了一个use语句。

2. 理解 Rust 中的 String 类型

在第 11 行,我创建了一个新的可变变量 user_input,正如它的名字所表示的那样,它将被用来存储用户输入。但是在同一行,你可能已经注意到了一些“新的”东西(哈哈,又来了!)。

LCTT 译注:“新的”在原文中为“new”,在第 11 行的代码中,原作者使用了 String::new函数,所以此处的梗与“使用”一样,原作者使用了一个在代码中用到的单词。

我没有使用双引号("")声明一个空字符串,而是使用String::new函数来创建一个新的空字符串。

""与String::new的区别是你将在 Rust 系列的后续文章中学习到的。现在,只需要知道,使用String::new函数,你可以创建一个可变的,位于堆上的字符串。

如果我使用 ""创建了一个字符串,我将得到一个叫做“字符串切片”的东西。字符串切片的内容也位于堆上,但是字符串本身是不可变的。所以,即使变量本身是可变的,作为字符串存储的实际数据是不可变的,需要被覆盖而不是修改。

3. 接受用户输入

在第 12 行,我调用了 std::io的stdin函数。如果我在程序的开头没有导入std::io模块,那么这一行将是std::io::stdin而不是io::stdin。

sdtin函数返回一个终端的输入句柄。read_line函数抓住这个输入句柄,然后,正如它的名字所暗示的那样,读取一行输入。这个函数接受一个可变字符串的引用。所以,我传入了user_input变量,通过在它前面加上&mut,使它成为一个可变引用。

⚠️ read_line函数有一个怪癖。这个函数在用户按下回车键之后停止读取输入。因此,这个函数也会记录换行符(\n),并将一个换行符存储在你传入的可变字符串变量的结尾处。

所以,请在处理它时要么考虑到这个换行符,要么将它删除。

Rust 中的错误处理入门

最后,在这个链的末尾有一个 expect函数。让我们稍微偏题一下,来理解为什么要调用这个函数。

read_line函数返回一个叫做Result的枚举。我会在后面的文章中讲解 Rust 中的枚举,但是现在只需要知道,枚举在 Rust 中是非常强大的。这个Result枚举返回一个值,告诉程序员在读取用户输入时是否发生了错误。

expect函数接受这个Result枚举,并检查结果是否正常。如果没有发生错误,什么都不会发生。但是如果发生了错误,我传入的消息(无法读取用户输入。)将会被打印到 STDERR,程序将会退出。

标签: #幸运数c程序