最近開始學習go語言,並做了一些程式設計練習。有道題要輸入帶空格的字串,這在c/c++中很容易實現,但go中好像並不那麼容易。學過c/c++的可能都知道,在c中可以使用gets()函式,在c++可以使用getline()函式來實現輸入帶空格的字串。那我們可能要問在go中有沒有類似的函式?答案是否定的。
2.使用bufio包里帶緩衝的reader實現帶空格字串的輸入
3.總結
在go中除了fmt和os包,我們還可以使用bufio來實現帶快取輸入和輸出。
我們要怎樣讀取使用者從鍵盤(控制台)輸入的資料?輸入是指從鍵盤或其它標準輸入(os.stdin)讀取資料。
package main
import
"fmt"
var(
firstname, lastname string
str1, str2, str3 string
num int
str =
"we / love / go / 1314"
format =
"%s / %s / %s / %d"
)func
main()
輸入為:
xiao hua
xiao ming
xiao hong
輸出為:
please input your full name:
xiao hua
hi xiao hua!
please again input your full name:
xiao ming
hi xiao ming!
please again input your full name:
xiao hong
hi xiao hong!
from the str we read:
we love go 1314
func
scan
(a ...
inte***ce
)(n int
, err error
)
scan從標準輸入掃瞄文字,將成功讀取的空白分隔的值儲存進成功傳遞給本函式的引數。換行視為空白。返回成功掃瞄的條目個數和遇到的任何錯誤。如果讀取的條目比提供的引數少,會返回乙個錯誤報告原因。
func
scanln
(a ...
inte***ce
)(n int
, err error
)
scanln類似於scan,但會在換行符處停止掃瞄,在最後乙個條目後必須有換行符或eof。
func
scanf
(format string
, a ...
inte***ce
)(n int
, err error
)
scanf從標準輸入掃瞄文字,根據format引數指定的格式將成功讀取的空白分隔的值儲存進成功傳遞給本函式的引數。返回成功掃瞄的條目個數和遇到的任何錯誤。輸入中的換行符必須與格式中的換行符匹配。
func
sscanf
(str string
, format string
, a ...
inte***ce
)(n int
, err error
)
sscanf從字串str掃瞄文字,根據format引數指定的格式將成功讀取的空白分隔的值儲存進成功傳遞給本函式的引數。返回成功掃瞄的條目個數和遇到的任何錯誤。
輸入中的換行符必須與格式中的換行符匹配。
package main
import
("bufio"
"fmt"
"os"
)//var inputreader *bufio.reader
//var input string
//var err error
func
main()
}
輸入為:
xiao hua
輸出為:
please input your name:
xiao hua
your name is: xiao hua
上例中,inputreader是個指標,它指向乙個bufio類的reader,然後在main函式里,通過bufio.newreader(os.stdin)
建立了乙個buffer reader,併聯接到inputreader這個變量。
func
newreader
(rd io.reader)
*reader
任何符合io.reader介面的物件法都可以作為bufio.newreader()里的引數,並返回乙個新的帶緩衝的io.reader,os.stdin符合這個條件。這個帶緩衝的reader有乙個方法readstring(delim byte), 這個方法會一直讀資料,直到遇到了指定的終止符(delim byte)才結束輸入,終止符將成為輸入的一部分,一起放到buffer里。
func
(b *reader)
readstring
(delim byte)(
string
,error
)
readstring返回值是讀到的字元串及nil。如果在讀到結束時沒有發現指定的結束符(delim byte),將返回乙個 err != nil。在上面的例子中,我們從鍵盤輸入直到鍵入「\n」才結束。螢幕是標準輸出os.stdout,錯誤資訊被寫到os.stderr。大多情況下,os.stderr等同os.stdout。
一般情況下,在go的**里省略了變量宣告,而直接使用」:=「進行自動型別推導,如:
inputreader := bufio.
newreader
(os.stdin)
input, err := inputreader.
readstring
('\n'
)
go中scan_或sscan_系列函式與c中的scan_系統函式的用法相似,學過c的人可以很快學會這些函式的使用。但要實現帶空格字串的輸入,則要使用bufio包里帶緩衝的reader和os包裡的os.stdin。
個人主頁:
www.codeapes.cn
Go語言學習筆記 函式(1)
函式時go語言中的基礎元件,函式定義如下 type mytype int func p mytype funcname q int r,s int 12 3456 1,關鍵字func用於定義乙個函式2,函式可以繫結到特定的型別上,這叫做接收者。有接收者的函式被稱作method。3,funcname是...
go語言學習筆記
type info struct func main fmt.println info1 data,json.marshal info1 fmt.println string data 輸出 這裡要特別注意的是 json 冒號後面和雙引號之間千萬不要有空格!被坑慘了 go語言 import的包的前面...
Go語言 學習筆記
import 下劃線 如 import hello imp 的作用 當匯入乙個包時,該包下的檔案裡所有init 函式都會被執行,然而,有些時候我們並不需要把整個包都匯入進來,僅僅是是希望它執行init 函式而已。這個時候就可以使用 import 引用該包。即使用 import 包路徑 只是引用該包,...