golang语法-----标准化输入输出
一、标准化输入
1、使用 fmt.Scan
系列 (适合读取简单、被空格隔开的数据)
需要传递变量的内存地址给 Scan
函数,所以变量名前要加 &
符号,表示“把读取到的值放到这个地址对应的变量里”。
package mainimport "fmt"func main() {var name stringvar age intfmt.Print("请输入你的名字和年龄 (用空格隔开): ")// 等待用户输入,比如 "张三 25" 然后回车_, err := fmt.Scan(&name, &age)if err != nil {fmt.Println("输入错误:", err)return}fmt.Printf("你好, %s! 你今年 %d 岁了。\n", name, age)
}
缺点:fmt.Scan
遇到空格或换行符就会停止读取当前项。如果你想输入 "San Zhang",它只会把 "San" 读到 name
里。
2、使用 bufio
包 (推荐,强大灵活,首选)
非常适合用来读取一整行(包含空格)的数据。
package mainimport ("bufio""fmt""os""strings"
)func main() {fmt.Print("请输入你的全名: ")// 1. 创建一个读取器,关联到标准输入reader := bufio.NewReader(os.Stdin)// 2. 读取直到遇到换行符 ('\n')input, err := reader.ReadString('\n')if err != nil {fmt.Println("读取输入时发生错误:", err)return}// 3. 清理字符串:ReadString 会把换行符也读进去,需要去掉// strings.TrimSpace 会去掉字符串首尾的空白字符 (空格、换行符等)name := strings.TrimSpace(input)fmt.Printf("你好, %s! 欢迎你!\n", name)
}
bufio
是处理用户输入的首选方式,因为它能轻松处理包含空格的完整句子。
二、标准化输出
fmt.Print()
: 原样输出,参数之间会自动加空格,不换行。fmt.Println()
: 原样输出,参数之间会自动加空格,在结尾加上换行。fmt.Printf()
: 格式化输出,最灵活。
fmt.Printf()的
常用占位符:
%v
: 按值的默认格式输出 (最常用,不知道用啥就用它)%s
: 输出字符串%d
: 输出十进制整数%f
: 输出浮点数 (例如%.2f
表示保留两位小数)%t
: 输出布尔值 (true/false)%T
: 输出变量的类型%%
: 输出一个百分号%
示例:
package mainimport "fmt"func main() {name := "李四"age := 30height := 1.78isStudent := false// 使用占位符 %s, %d, %f, %tfmt.Printf("姓名: %s, 年龄: %d, 身高: %.2f米, 是学生吗: %t\n", name, age, height, isStudent)// 输出: 姓名: 李四, 年龄: 30, 身高: 1.78米, 是学生吗: false// 使用 %v (通用格式) 和 %T (类型)fmt.Printf("变量 name 的值是 %v, 类型是 %T\n", name, name)// 输出: 变量 name 的值是 李四, 类型是 stringfmt.Printf("变量 age 的值是 %v, 类型是 %T\n", age, age)// 输出: 变量 age 的值是 30, 类型是 int
}