Go語言中 Scan 與 Scanf 和 Scanln的區別


三種輸入函數的區別

首先它們都是在fmt包下的三個掃描函數,類似於java中是Scanner一樣,在Go語言中使用&取值指針來進行獲值

第一種:fmt.Scan

輸入:讀取以空白符分割的值返回到地址中進行修改,換行視為空白符
返回值:錯誤處理,返回值中有一個int類型的值是返回正確的數量,有一個err是錯誤的原因

var (               // 定義全局變量
		name int
		age int
		married int
	)
	ag1, err := fmt.Scan(&name,&age,&married) 返回類型根據使用場景可以不寫,但是根據代碼規范,err都要處理,加上在這里為了更加嚴謹,確實需要err來處理
	fmt.Print(err) // 這里如果出錯,則顯示出錯的原因
	fmt.Println(ag1) // 這個返回參數取到的是成功了幾個
	fmt.Printf("掃描結果:name:%d age:%d married:%d \n",name,age,married) // Scan讀取以空白為分割的值保存給參數中,換行符視為空白符,如果返回的數據比提供的參數少,會返回錯誤原因

成功結果:
在這里插入圖片描述
有錯誤結果:
在這里插入圖片描述
開頭錯誤則直接全部錯誤:
在這里插入圖片描述

第二種 fmt.Scanf

它與Scan比更加嚴謹,使用format讀取空白符,在輸入時也必須輸入要輸入的數據,適用場景學生輸入賬號,性別,而且必須要根據指定的方式輸入,順序也不可以改變

var (
		name    string
		age     int
		married bool
	)
	ag1, err := fmt.Scanf("1:%s 2:%d 3:%t", &name, &age, &married) // 這個函數中參數前必須填入標識格式如1: 2: ...
	fmt.Println(ag1)
	fmt.Println(err)
	fmt.Printf("掃描結果 name:%s age:%d married:%t", name, age, married)

成功結果:
在這里插入圖片描述
有錯誤結果:
在這里插入圖片描述

第三種 fmt.Scanln

Scanln 類似 Scan,但它在遇到換行時才停止掃描。最后一個數據后面必須有換行或者到達結束位置。使用場景就是只要換行就結束
返回錯誤和Scan一樣

var (
		name string
		age int
		married int
	)
	ag1, err := fmt.Scanln(&name,&age,&married)
	fmt.Println(ag1)
	fmt.Println(err)
	fmt.Printf("掃描結果 name:%s age:%d married:%d \n", name, age, married)

成功結果:
在這里插入圖片描述

有錯誤結果:
在這里插入圖片描述
這里有一個錯誤

var (
		name string
		age int
		married bool  // 這里由原本的int改變成了bool
	)
	ag1, err := fmt.Scanln(&name,&age,&married)
	fmt.Println(ag1)
	fmt.Println(err)
	fmt.Printf("掃描結果 name:%s age:%d married:%t \n", name, age, married)

錯誤顯示:
在這里插入圖片描述
歡迎大家留言探討


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM