我有一个控制台输入
b a
c b
c a
c c
c F
我正在阅读如下:
wtf:=make([]string,5)
reader := bufio.NewReader(os.Stdin)
for i:=0;i<5;i++{
line, _ := reader.ReadString('\n')
wtf[i]=line
}
但是,我不是在读最后一行,因为它没有&#39; \ n&#39; 所以我添加了以下代码
var kek string
kek=""
for i:=0;i<2;i++{
line, _:=reader.ReadString(' ')
kek+=line
}
现在wtf
存储前4行,kek
中存储最后一行。
现在我希望kek
成为wtf
的第4个元素。据我所知,wtf
是一个切片,所以这样做应该没有问题:
wtf[5-1]=kek
但是没有用,我得到的是wtf
的输出:
[
b a
c b
c a
c F
]
如果我检查wtf
&len;它仍然是5!
P.S。给出了读取的行数和符号总数,因此可以替换n和m的数字5和2。
答案 0 :(得分:1)
该行:
kek=""
该行是不必要的,kek已经是一个空字符串,因为空字符串是字符串的nil值。
由于您没有在第一个区块中显示第二个代码块的位置,我无法评论您的错误结果。
无论如何,无论是否有换行符,ReadString都会在最后一行读取。这将有效:
wtf := make([]string)
reader := bufio.NewReader(os.Stdin)
for {
line, err := reader.ReadString('\n')
wtf = append(wtf, line)
if err != nil {
break;
}
}
答案 1 :(得分:1)
使用bufio.Scanner代替bufio.Reader。 bufio.Scanner类型为added in Go 1.1,以简化与bufio.Reader不必要的复杂任务。
var wtf []string
s := bufio.NewScanner(os.Stdin)
for s.Scan() {
wtf = append(wtf, s.Text())
}
if err := s.Err(); err != nil {
// handle error
}
问题中的wtf
元素包含每行末尾的\n
。这个答案中的代码没有。