普通人学习rust——从零到放弃 简单输入输出
普通人学习rust——从零到放弃 简单输入输出
环境
本文章内容基于如下环境,如若出入请参考当前环境。
rustc 1.42.0 (b8cedc004 2020-03-09)
cargo 1.42.0 (86334295e 2020-01-31)
前言
实用的程序须要有交互操作,本篇简单讲rust的输入和格式化输出
输入
main.rs文件
use std::io;
fn main(){
println!("请输入姓名:");
let mut name = String::new();
//读取一个字符串
io::stdin().read_line(&mut name);
//必须使用占位符
println!("你好! {}", name);
}
use std::io;使用use关键字做为包的导入,let为定义变量关键字,mut为可变变量关键字,String::new()相当于new String()。吐槽:你看String::和io::,String是类,io也是类?一个开头大小一个开头小写!至于双冒号的写法,既然你要学js的let为什么不使用空格作为类的创建,或者直接使用函数的点号
read_line(&mut name)注意传入参数须带&和mut,这涉及到rust的借用与引用的概念。吐槽:rust不仅函数定义时要加&和mut,调用时也要加&和mut,重复的写真有必要!
{}为格式化占用符合,下面内容会说到。
编译
rustc main.rs
warning: unused `std::result::Result` that must be used
--> main.rs:6:2
|
6 | io::stdin().read_line(&mut name);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_must_use)]` on by default
= note: this `Result` may be an `Err` variant, which should be handled
这里有一些输出警告,先不用管它,这涉及到rust的异常管理。
运行结果
请输入姓名:
小明
你好! 小明
输出
这里只是简单介绍用法,详细格式化专门一篇文章去讲。println!和print!是rust的输出打印函数,rust使用大括号{}为占位符号。写法为:{语法}。
- 不能直接打印变量,`println!`不能直接打印变量。
错误示例
fn main(){
let a="这是一段字符串";
println!(a);
}
编译错误
error: format argument must be a string literal
--> index.rs:3:11
|
3 | println!(a);
| ^
|
help: you might be missing a string literal to format with
|
3 | println!("{}", a);
| ^^^^^ error: aborting due to previous error
正确写法
fn main(){
let a="这是一段字符串";
println!("{}",a);
}
吐槽:臃肿的语法!
- 是宏函数,需要加感叹号
错误示例
fn main(){
let a="这是一段字符串";
println("{}",a);
}
编译错误
error[E0423]: expected function, found macro `println`
--> index.rs:3:2
|
3 | println("{}",a);
| ^^^^^^^ help: use `!` to invoke the macro: `println!` error: aborting due to previous error For more information about this error, try `rustc --explain E0423`.
正确写法
fn main(){
let a="这是一段字符串";
println!("{}",a);
}
- 可以指定序号,位置从0开始,如果没有指定则按顺序排位
正确写法
fn main(){
let a=123;
let b=234;
println!("{1}+{0}={2}",a,b,a+b);
}
运行结果
234+123=357
正确写法
fn main(){
let a=123;
let b=234;
println!("{}+{1}={2}",a,b,a+b);
}
运行结果
123+234=357
- 错误使用变量名作为占位符号,`{}`内的变量名跟外面的变量名是不一样的。
错误示例
fn main(){
let pi=3.14;
println!("圆周率={pi}",pi);
}
编译错误
error: there is no argument named `pi`
--> index.rs:3:16
|
3 | println!("圆周率={pi}",pi);
| ^^^^ error: argument never used
--> index.rs:3:22
|
3 | println!("圆周率={pi}",pi);
| ------------- ^^ argument never used
| |
| formatting specifier missing error: aborting due to 2 previous errors
正确写法
fn main(){
println!("圆周率={pi}",pi=3.14);
}
运行结果
圆周率=3.14
如果就要打印,已经存在的变量怎么办?可以这么写
fn main(){
let pi=3.14;
println!("圆周率={pi}",pi=pi);
}
运行结果
圆周率=3.14
吐槽:所以这样写的意义何在!
参考资料
- println宏函数文档[https://doc.rust-lang.org/std/macro.println.html]
普通人学习rust——从零到放弃 简单输入输出的更多相关文章
- 普通人学习rust——从零到放弃 变量、不可变量、常量
普通人学习rust--从零到放弃 变量.不可变量.常量 环境 本文章内容基于如下环境,如若出入请参考当前环境. rustc 1.42.0 (b8cedc004 2020-03-09) cargo 1. ...
- OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建
# OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-hom ...
- 孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5
孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5并学习权限设置 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十二天. 今天继续学习mongo ...
- 孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4
孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作 ...
- 孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3
孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十天. 今天继续学习mongoDB的简单操作, ...
- 孤荷凌寒自学python第六十三天学习mongoDB的基本操作并进行简单封装2
孤荷凌寒自学python第六十三天学习mongoDB的基本操作并进行简单封装2 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第九天. 今天继续学习mongoDB的简单操作, ...
- 孤荷凌寒自学python第六十二天学习mongoDB的基本操作并进行简单封装1
孤荷凌寒自学python第六十二天学习mongoDB的基本操作并进行简单封装1 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第八天. 今天开始学习mongoDB的简单操作, ...
- 『深度应用』NLP机器翻译深度学习实战课程·零(基础概念)
0.前言 深度学习用的有一年多了,最近开始NLP自然处理方面的研发.刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程. 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内 ...
- 通过欧拉计划学习Rust编程(第22~25题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
随机推荐
- c中结构体边界对齐
原则1.普通数据成员对齐规则:第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储). 原则2 ...
- 将java project打包成jar包,web project 打包成war包的几种演示
将java项目打包成jar 第一种:MyEclipse将java项目打包成jar. 1,右击项目,选择export . 2,点击Java,选择JAR file . 3,在JAR file文本中浏览打包 ...
- The Basic Of K8s
k8s 基础概念 1.一个k8s集群包括 一个Master节点(主节点) 一群Node节点(计算节点) 2.Master节点 包括API Server.Scheduler.Controller man ...
- 常用JS代码片段
1.隐藏部分数字,如手机号码,身份证号码 1 2 3 function (str,start,length,mask_char){ return str.replace(str.substr(star ...
- Python学习笔记(四)函数式编程
高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...
- Hexo+Git一个小时快速搭建个人博客
搭建本地环境:Hexo框架 Hexo为何物 Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用Markdown解析文章,并瞬间利用靓丽的主题生成静态网页.其中,Markdown是一个用于将普通 ...
- CSRF之POST
最近重温<白帽子讲web安全>一书,看到第4章CSRF的时候,发现有个错误的地方,第116页底部的代码中有个坑,那段代码是运行不了的.原因是在form表单中有个<input type ...
- iptables学习02-nat表应用
nat表应用实验 第一步 准备工作 A机器两块网卡ens33(192.168.2.106).再添加一块自定义网卡ens37(192.168.100.1),添加到LAN内网区段(自定义名字,写什么无所谓 ...
- Go技术日报(2020-02-28)
go 语言中文网(每日资讯)_2020-02-28 一.Go 语言中文网 Gopher 学习效率低怎么办?曹大谈工程师应该怎么学习 Go 的 http 包中默认路由匹配规则 [每日一库]Web 表单验 ...
- file_put_contents生成ansi文件
$line_body = array('张三','李四','王五'); $line_body = array_map(function ($element){return iconv('UTF-8', ...