網站首頁 編程語言 正文
一、格式化輸入和輸出
1.從終端獲取用戶的輸入
fmt.Scanf 空格作為分隔符,占位符和格式化輸出的一致
fmt.Scan 從終端獲取用戶的輸入,存儲在Scanln中的參數里,空格和換行符作為分隔符
fmt.Scanln 從終端獲取用戶的輸入,存儲在Scanln中的參數里,空格作為分隔符,換行符作為結束
Scanf 例子:
package main import ( "fmt" ) func TestScanf(){ var a int var b string var c float32 fmt.Scanf("%d%s%f",&a,&b,&c) fmt.Printf("a=%d b=%s c=%f",a,b,c) } func main(){ TestScanf() }
結果:
> 111 abvc 111
a=111 b=abvc c=111.000000
這里我們是通過一行輸入的,并且是以空格作為分割的,但是如果想通過多行輸入,那么在Windows下Scanf可能會存在一個問題,如下:
func TestScanf(){ var a int var b string var c float32 fmt.Scanf("%d",&a) fmt.Scanf("%s",&b) fmt.Scanf("%f",&c) fmt.Printf("a=%d b=%s c=%f",a,b,c) }
然后我們在windows下面去運行一下
由上面的我們可以看到,只接受到了第一個值,第二值輸入之后回車,發現b和c都沒有值。主要是由于Windows下面,回車會 自動加上 \r\n。
如果想要正確的獲取這個值,可以修改如下:在每一個scanf上面都加上“\n”
func TestScanf(){ var a int var b string var c float32 fmt.Scanf("%d\n",&a) fmt.Scanf("%s\n",&b) fmt.Scanf("%f\n",&c) fmt.Printf("a=%d b=%s c=%f \n",a,b,c) }
Scan例子:
func TestScan(){ var a int var b string var c float32 fmt.Scan(&a,&b,&c) fmt.Printf("a=%d b=%s c=%f \n",a,b,c) }
Scanln例子:
func TestScanln(){ var a int var b string var c float32 fmt.Scanln(&a) fmt.Scanln(&b) fmt.Scanln(&c) fmt.Printf("a=%d b=%s c=%f \n",a,b,c) }
2.從字符串中獲取
上面是從終端輸入的字符串中提取數據,然后還可以從一個已經存在的字符串中提取。
fmt.Sscanf 空格作為分隔符,占位符和格式化輸出的一致
fmt.Sscan 從字符串獲取用戶的輸入,存儲在Scanln中的參數里,空格和換行符作為分隔符
fmt.Sscanln 從字符串獲取用戶的輸入,存儲在Scanln中的參數里,空格作為分隔符,換行符作為結束
下面的例子就是從str中提取整數、字符串和浮點數
func TestSscanf(){ var a int var b string var c float32 str := "123 hello 111.1" fmt.Sscanf(str,"%d%s%f",&a,&b,&c) fmt.Printf("a=%d b=%s c=%f \n",a,b,c) }
備注:一定要傳地址進去,否則修改是變量的副本,也就是說讀取不到用戶的輸入了。
3.從文件中獲取
fmt.Fscanf 空格作為分隔符,占位符和格式化輸出的一致
fmt.Fscan 從文件獲取用戶的輸入,存儲在Scanln中的參數里,空格和換行符作為分隔符
fmt.Fscanln 從文件獲取用戶的輸入,存儲在Scanln中的參數里,空格作為分隔符,換行符作為結束
4.終端輸入輸出的原理
終端相當于是一個文件, 所以可以用 os.stdin 和os.stdout 作為輸入和輸出。查看源碼可以看到他們其實就是*File
二、bufio包的使用
為了完善文件本身讀取性能差的問題,增加了緩沖區操作。
package main import ( "bufio" "os" ) func main() { reader := bufio.NewReader(os.Stdin) buf, _ := reader.ReadBytes('\n') println((string)(buf)) }
備注:這里可以看到NewReader的參數是一個io.Reader接口 , os.Stdin則是返回一個*File ,由于File實現了io.Reader的Read方法,所以可以接受File作為參數(鴨子類型)。
原文鏈接:https://www.cnblogs.com/dcz2015/p/11212611.html
相關推薦
- 2022-05-03 python中的Pytorch建模流程匯總_python
- 2022-04-02 Docker鏡像發布到Docker?Hub的實現方法_docker
- 2022-05-22 Nginx安裝后常用功能配置基礎篇_nginx
- 2024-03-20 mybatis-plus不同類型多源數據庫分頁攔截器配置
- 2022-04-28 詳解Pandas的三大利器(map,apply,applymap)_python
- 2022-09-15 SQL?bool盲注和時間盲注詳解_MsSql
- 2022-04-08 python?selenium保存圖片最好的兩種方法_python
- 2022-02-14 linux系統之進程管理詳解_Linux
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支