我在使用fmt的Scan函数的时候遇到了一个问题,不知道大家遇到过没有

需求环境是这样的,程序运行,提示用户输入一些信息。

package main

import (
    "fmt"
)

func main() {
    var aa []byte
    fmt.Print("请写出你的名字:")
    num, err := fmt.Scan(&aa)
    if err != nil {
        fmt.Println(num)
        fmt.Println("你输入错误")
    }
}

这样的话,问题就来了。这里如果在提示后面写入"hello world"两个单词的话,那么第一个单词会被aa获得到,但是world会被输出到shell上。虽然Scan函数可以接多个参数,但是毕竟我们不知道用户究竟会输入多少个单词。 有人解决这个问题么?

共 4 个回复


snake117

c,c++里面也是一样的

# 0

nowayout

试试用flag包

# 1

suilongfei

嗯,我去看一下,谢了~~ 我记得C是一次接一个字符,然后判断到特定字符就可以结束了?

# 2

jemygraw

哈哈,我来拯救你。

cmdReader := bufio.NewReader(os.Stdin)
    cmdStr, err := cmdReader.ReadString('\n')
    //这里把读取的数据后面的换行去掉,对于Mac是"\r",Linux下面
    //是"\n",Windows下面是"\r\n",所以为了支持多平台,直接用
    //"\r\n"作为过滤字符
    cmdStr = strings.Trim(cmdStr, "\r\n")
# 3