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

如何在Go语言中正确扫描读取rune类型?

如何正确用Go扫描读取rune类型

你当前代码的问题在于fmt.Scan(&c)并非按字符(rune)方式读取输入,而是将输入解析为整数赋值给rune变量。比如输入字符a时,它会尝试把a当作整数解析,失败后c保持默认值0,导致fmt.Printf("%c", c)输出空字符,看不到内容。

以下是几种正确的解决方式:

  • 使用fmt.Scanf指定%c格式符,直接读取单个字符并转换为rune:
package main

import "fmt"

func main() {
    var c rune
    fmt.Scanf("%c", &c)
    fmt.Printf("%c", c)
}
  • 使用bufio.Reader的ReadRune方法,适合处理多字节Unicode字符(如中文、emoji):
package main

import (
    "bufio"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    c, _, err := reader.ReadRune()
    if err != nil {
        panic(err)
    }
    print(string(c))
}
  • 手动读取字节并转换为rune(需处理多字节情况):
package main

import (
    "os"
    "unicode/utf8"
)

func main() {
    buf := make([]byte, 4) // rune最多占用4字节
    n, err := os.Stdin.Read(buf)
    if err != nil {
        panic(err)
    }
    c, _ := utf8.DecodeRune(buf[:n])
    print(string(c))
}

如果只是读取单个ASCII或Unicode字符,fmt.Scanf("%c", &c)是最简单的方案;若需处理复杂输入场景,优先选择bufio.Reader的ReadRune方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:10:36