美文网首页
golang语言获取命令行输入内容的坑

golang语言获取命令行输入内容的坑

作者: 孙沛2010 | 来源:发表于2018-11-28 15:51 被阅读0次

    到网上找到了篇文章,按照方法2执行,挺顺利的,获得了输入值,打印出来也是正确的.
    坑呢,在这,当你用获取的Input和拼接其他字符串的时候,总得不到正确的结果.
    表象是 Input(1234)+"abc" 打印结果是 abc4,其实真实的内容是 1234\rabc,打印出来就是 abc4
    现在看来这个问题很简单,如https://zhidao.baidu.com/question/115845978.html, 字符串回车了,打印出来就是这样
    但是当时,没有想到,在其他语言,获取输入很easy

    1. 怀疑得到的是字符数组,而不是字符串格式
    2. 判断输入的字符串和直接写好的字符串是否相同,即 Input(1234)="1234" ,毫无疑问输出false
    3. 接着看了Input的长度,果然有差异,将其打印,
      • 直接打印都是数字
      • 于是将前面按照string类型打印,最后的两位按照原来的数字打印.也可以按照格式化打印 printf
        果然出现了13 10

    问题解决了

    参考代码

    package main
    
    import (
        "bufio"
        "fmt"
        "os"
        "strings"
    )
    
    func main() {
        //参考 version 2 https://my.oschina.net/zengsai/blog/3719
        f := bufio.NewReader(os.Stdin) //读取输入的内容
        fmt.Print("请输入一些字符串>")
        var Input string
        Input, _ = f.ReadString('\n') //定义一行输入的内容分隔符。
        
        fmt.Println("字符串长度",len(Input))
        for i:=0;i<len(Input);i++{
            if i>=len(Input)-2{//最后一个字符,输出数字
                fmt.Print(Input[i])
            }else{
                fmt.Print(string(Input[i]))
            }
        }
        //windows平台操作
        //分隔符'\n' Input是 xxx\r\n    编码是1310
        //分隔符'\r' Input是 xxx\r  编码是13
        Input = strings.Replace(Input, "\n", "", -1)
        Input = strings.Replace(Input, "\r", "", -1)
        fmt.Println("")
        fmt.Println("字符串长度",len(Input))
        for i:=0;i<len(Input);i++{
            fmt.Print(string(Input[i]))
        }
    }

    相关文章

      网友评论

          本文标题:golang语言获取命令行输入内容的坑

          本文链接:https://www.haomeiwen.com/subject/aifzqqtx.html