普通人学习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的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
随机推荐
- 很全很全的 JavaScript 模块讲解
模块通常是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元.所谓模块化主要是解决代码分割.作用域隔离.模块之间的依赖管理以及发布到生产环境时的自动化打包与处理等多个方面. ...
- IOS下的safari下localStorage不起作用的问题
我们的一个小应用,使用百度地图API获取到用户的坐标之后用localStorage做了下缓存,测试上线之后有运营同学反馈页面数据拉取不到, 测试的时候没有发现问题,而且2台相同的iphone一台可以一 ...
- P6跨级晋升P8再到P10,我的11年成长之路
来自:语雀,作者:玉伯 链接:https://www.yuque.com/yubo/morning/grow-up-at-alibaba 注:这是在阿里内部前端大学的一个分享,整理了一份对外的版本,希 ...
- django Highcharts制作图表--显示CPU使用率
Highcharts 是一个用纯JavaScript编写的一个图表库. Highcharts 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表 Highcharts 免费提供给个人学习 ...
- Soldier and Badges
题目链接:https://vjudge.net/problem/CodeForces-546B AC代码: #include<iostream> #include<algorithm ...
- [PyTorch入门]之从示例中学习PyTorch
Learning PyTorch with examples 来自这里. 本教程通过自包含的示例来介绍PyTorch的基本概念. PyTorch的核心是两个主要功能: 可在GPU上运行的,类似于num ...
- sycPHPCMS v1.6 cookie sqlinjection
./user/index.php include "../include/conn.php"; include "../include/function.php" ...
- Leetcode 20题 有效的括号(Valid Parentheses) Java语言求解
题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空 ...
- OpenCV使用:加载图片时报错 0x00007FFC1084A839 处(位于 test1.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x00000026ABAFF1A8 处。
加载图片代码为: #include<iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgu ...
- C#面向对象--属性
一.属性(Property)作为类和结构的成员,是对字段的一种封装方式,实际上是一种特殊的方法,被称为访问器(Accessor),从而隐藏实现和验证代码,有助于提高字段读取和赋值的安全性和灵活性: 1 ...