golang對於輸入的處理,在我看來是非常方便的。今年的秋招筆試,果斷棄c++了。
首先來講一下幾種簡單的輸入處理。
1. fmt.Scan
fmt.Scan互動式接受輸入,通過空格來分詞。調用Scan函數時,要指定接收輸入的變數名和變數數。
直到接收完所有指定的變數數,Scan函數才會返回,斷行符號符也無法提前讓它返回。
fmt.Println("Please enter the firstName and secondName: ")
fmt.Scan(&afirstName, &asecondName)
fmt.Printf("firstName is %s, secondName is %s\n", afirstName, asecondName)
結果如下:
Please enter the firstName and secondName:
zz
rr
firstName is zz, secondName is rr
2. fmt.Scanln
Scanln調用時,也要指定接收輸入的變數名和變數數。
它同Scan的區別,在於 \ n 會讓函數提前返回,將返回時還未接收到值的變數賦為空白。
fmt.Println("Please enter the firstName and secondName: ")
fmt.Scanln(&bfirstName, &bsecondName)
fmt.Printf("firstName is %s, secondName is %s\n", bfirstName, bsecondName)
結果如下:
Please enter the firstName and secondName:
zr
firstName is zr, secondName is
3. fmt.Scanf
用Scanf處理輸入,是比較靈活的一種處理方式。
需要指定輸入的格式,適用於完全瞭解輸入格式的情境,可以直接把不需要的部分過濾掉。
fmt.Println("Please enter the firstName and secondName: ")
fmt.Scanf("//%s\n%s", &cfirstName, &csecondName)
fmt.Printf("firstName is %s, secondName is %s", cfirstName, csecondName)
結果如下:
1)這個情境,在接收輸入時,就把不需要的部分“//” 和 “\n”過濾掉了,接收到是有用的兩個字串zz和rr。
Please enter the firstName and secondName:
//zz
rr
firstName is zz, secondName is rr
2)如果輸入不符合指定的格式,從不符合處開始,其後的變數值都為空白。
Please enter the firstName and secondName:
//zr ui
firstName is zr, secondName is