douyun8885 2018-06-18 18:17
浏览 50
已采纳

将两个返回值传递给具有一个参数的函数

I want to do this:

R, _ := strconv.Atoi(reader.ReadString(" ")) // reader = bufio.NewReader()

and the problem is, that strconv.Atoi expects one argument, but reader.ReadString() returns not only the string, but also the "err". Is there a way to solve this without creating variables or generally on just one line?

  • 写回答

2条回答 默认 最新

  • dosrmo0442 2018-06-19 13:25
    关注

    In Go, write a readInt function to hide the complexity and always check for errors. Other answers have bugs: Howl (drops last number) and Raduan Santos (doesn't compile).

    For example,

    package main
    
    import (
        "bufio"
        "fmt"
        "io"
        "log"
        "strconv"
        "strings"
    )
    
    func readInt(r *bufio.Reader) (int, error) {
        const delim = ' '
        str, err := r.ReadString(delim)
        if err != nil && len(str) == 0 {
            return 0, err
        }
        str = strings.TrimSuffix(str, string(delim))
        return strconv.Atoi(str)
    }
    
    func main() {
        input := "93 31 11 11"
        fmt.Println(input)
        rdr := bufio.NewReader(strings.NewReader(input))
        for {
            n, err := readInt(rdr)
            if err != nil {
                if err == io.EOF {
                    break
                }
                log.Fatal(err)
            }
            fmt.Println(n)
        }
    }
    

    Output:

    93 31 11 11
    93
    31
    11
    11
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?
  • ¥20 软件开发方法学习来了