You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中打印用户输入字符串n次却输出空白的问题解决

解决Go语言输入整数后字符串读取为空的问题

问题出在fmt.Scanf("%d", &n)的行为上:它只会读取输入中的数字部分,输入时按下的回车键(换行符\n)会残留在标准输入缓冲区中。后续的fmt.Scanf("%s", &s)会自动跳过开头的空白字符(包括这个残留的换行符),如果此时没有输入新的字符串内容,s就会被赋值为空字符串,导致循环打印空白。

以下是几种修复方案:

方案一:使用fmt.Scanln读取输入

fmt.Scanln会在读取内容后自动丢弃换行符,避免残留问题:

package main

import (
    "fmt"
)

func main() {
    var n int
    var s string
    fmt.Scanln(&n)
    fmt.Scanln(&s)

    for i := 0; i < n; i++ {
        fmt.Printf("%s\n", s)
    }
}

方案二:手动丢弃缓冲区的换行符

在读取整数后,额外读取并丢弃残留的换行符:

package main

import (
    "fmt"
)

func main() {
    var n int
    var s string
    fmt.Scanf("%d", &n)
    fmt.Scanf("\n") // 清除缓冲区中的换行符
    fmt.Scanf("%s", &s)

    for i := 0; i < n; i++ {
        fmt.Printf("%s\n", s)
    }
}

方案三:用bufio.Reader处理输入(推荐)

这种方式更灵活,支持读取包含空格的字符串,同时能精准处理输入的换行符:

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    
    // 读取并转换整数
    nInput, _ := reader.ReadString('\n')
    n, _ := strconv.Atoi(strings.TrimSpace(nInput))
    
    // 读取字符串并去除首尾空白和换行符
    s, _ := reader.ReadString('\n')
    s = strings.TrimSpace(s)

    for i := 0; i < n; i++ {
        fmt.Printf("%s\n", s)
    }
}

注意:如果需要读取包含空格的字符串,fmt.Scanf("%s")无法满足需求,因为它会在遇到第一个空格时停止读取,此时推荐使用bufio.Reader的方案。

内容的提问来源于stack exchange,提问作者Maz Diaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:25:16