通过os.stdin读取输入,输入后没有反应

weixin_38055863 2019-09-20 10:48:47
```
package main

import (
"fmt"
"io"
"os"
)

func main() {

data, err := Readjj(os.Stdin, 3)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(data))
}

func Readjj(r io.Reader, num int) ([]byte, error) {
data := []byte{}

p := make([]byte, num)
for {
n, err := r.Read(p)

if err != nil && err != io.EOF {

return nil, err
} else if n == 0 {

break
} else {

data = append(data, p[:n]...)

}

}
return data, nil
}
```

运行

```
$ go run std.go
abcdef

```

输入内容后回车就卡那里不动了

如果我把代码中的os.stdin, 替换成 strings.NewReader("abcdef") ,可以执行成功,并打印
...全文
520 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38092474 2019-09-20
  • 打赏
  • 举报
回复
我不是有写判断条件吗,不对?
weixin_38097166 2019-09-20
  • 打赏
  • 举报
回复
你可以debug或者打印下你的条件
weixin_38117299 2019-09-20
  • 打赏
  • 举报
回复
已解决 ``` package main import ( "fmt" "io" "os" ) func main() { data, err := Readjj(os.Stdin, 3) if err != nil { fmt.Println(err) return } fmt.Println(string(data)) } func Readjj(r io.Reader, num int) ([]byte, error) { data := []byte{} p := make([]byte, num) for { n, err := r.Read(p) if err != nil && err != io.EOF { return nil, err } else if n == 0 { break } else if n < num { data = append(data, p[:n]...) return data, nil } else { data = append(data, p[:n]...) } } return data, nil } ```
weixin_38063515 2019-09-20
  • 打赏
  • 举报
回复
os.Stdin 不是这么用的吧。 你可以试试: `echo abcdef | go run std.go` 应该能正常输出
weixin_38068785 2019-09-20
  • 打赏
  • 举报
回复
你这个是可以输出,但是os.stdin,是可以在运行时输入内容,并打印出来的,fmt.scan,都是依赖这个,我这里不知道遇到了什么问题
weixin_38080213 2019-09-20
  • 打赏
  • 举报
回复
你一直在读取,循环都没停止

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧