普通人学习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的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
随机推荐
- Nginx笔记总结九:Nginx日志配置
ngx_http_log_module用来定义请求日志格式1. access_log指令 语法: access_log path [format [buffer=size [flush=time] ...
- PHP生成word文档的三种实现方式
PHP生成word原理 利用windows下面的 com组件 利用PHP将内容写入doc文件之中 具体实现: 利用windows下面的 com组件 原理:com作为PHP的一个扩展类,安装过offic ...
- 吴裕雄--天生自然KITTEN编程:逃离漩涡
- Python---10小结
因一边上班一边自学python,一旦忙起来,python就会放两天,可是2天后之前学的内容就会有点忘记. 今天把python的各种启动方法总结一下; 我的文档路径: ------- 1打开文件所在的c ...
- mac下配置开发环境
常用命令 显示隐藏文件 1 defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder 关闭隐藏文 ...
- Uber刷单,刷出中国的人性劣根?
美国叫车应用Uber国际化之路一直挺顺利的,融资也挺顺利的,他们现在很有钱,最新总融资金额达到100亿美元,创下美国非上市高科技公司的融资纪录.全新的商业模式,以及优质的客户体验,让Uber ...
- linux系统文件被删的几种恢复方法
参考链接:https://www.cnblogs.com/276815076/p/5703796.html 1.几种恢复方法,这里只是记录别的博客提到的方法,本人并未亲自验证. ext3用ext3gr ...
- python3下BeautifulSoup练习一(爬取小说)
上次写博客还是两个月以前的事,今天闲来无事,决定把以前刚接触python爬虫时的一个想法付诸行动:就是从网站上爬取小说,这样可以省下好多流量(^_^). 因为只是闲暇之余写的,还望各位看官海涵:不足之 ...
- 自动化测试ROI实践
自动化测试是一项"一旦开始,就需要持续投入"的工作,所以它一直是测试领域的一块鸡肋.不做吧,好像手工测试重复得让人有些厌倦,而且手工测试时间也缩短不了.做吧,害怕投入的比回报要多. ...
- LiteOS内核教程01-IoT-Studio介绍及安装
1. 物联网一站式开发工具 -- IoT Studio IoT Studio 是支持 LiteOS 嵌入式系统软件开发的工具,提供了代码编辑.编译.烧录 及调试等一站式开发体验,支持 C.C++.汇编 ...