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

到网上找到了篇文章,按照方法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]))
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容