dpcyx08288 2017-04-15 00:55
浏览 41
已采纳

strings.Split,stdin不返回切片/数组

It seems that strings.split(" ") is not returning an array. I have no idea why this is. I'm sure I am using it in a similar context elsewhere.

package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    var seedCost float64
    var lawnNo int
    var in string
    var area float64
    var wh []string

    fmt.Scanln(&seedCost) //2 is inputted
    fmt.Scanln(&lawnNo)   //3
    lawnCost := 0.00

    for i := 0; i < lawnNo; i++ {
        fmt.Scanln(&in) //2 3 is inputted
        wh = strings.Split(in, " ")
        fmt.Println(wh[0])
        fmt.Println(wh[1]) //Test throwing exception, index out of range
        w, _ := strconv.ParseFloat(wh[0], 64)
        h, _ := strconv.ParseFloat(wh[1], 64) //EXCEPTIONAL LINE, index out of range

        area = w * h
        lawnCost += area * seedCost
    }

    ans := strconv.FormatFloat(lawnCost, 'E', 8, 64)
    fmt.Println(ans)
}
  • 写回答

3条回答 默认 最新

  • douba6361 2017-07-01 03:14
    关注

    fmt.Scanln stops reading after the spaces.

    Two Approaches to solve this Problem

    1st Approach: USE Scanf

    var in string
    fmt.Scanf("%q", &in)
    

    But then your input should be enclosed within the double quotes like "2 3"

    2nd Approach: USE bufio

    The best way I consider

    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan(){
       in = scanner.Text()
       break  //optional line if your input has a single line
    }
    fmt.Println(in)
    

    This shall solve the problem in the best way

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

报告相同问题?

悬赏问题

  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 three.js添加后处理以后模型锯齿化严重