golang中for循环的fmt.Scanf()读取不了?

package main

import (
	"Golang/myfunc"
	"fmt"
)

func main() {
	//初始化,检测本地包引入
	var ans string
	fmt.Println("选择线程")
	fmt.Scanf("%s", &ans)
	if ans == "1" {
		myfunc.SayHello()
		c1 := &myfunc.Cat{
			Feet: 4,
			Animal: &myfunc.Animal{
				Name: "喵酱",
			},
		}
		c1.Meow()
		c1.Move()
	} else if ans == "2" {
		//test大段作业
		class := &myfunc.Class{}
		class.StudentMap = make(map[string]*myfunc.Student, 36)
		flag := true
		for flag {
			myfunc.Menu()
			var mode int
			fmt.Scanf("%d", &mode)
			switch mode {
			case 0:
				flag = false
			case 1:
				class.GothroughStudent()
			case 2:
				class.AddStudent()
			case 3:
				var index int
				fmt.Println(">>>1. 修改姓名  2. 修改年龄  3. 修改成绩<<<\n>>>")
				fmt.Scanln(&index)
				switch index {
				case 1:
					class.SetName()
				case 2:
					class.SetAge()
				case 3:
					class.SetMark()
				default:
					fmt.Println("输入有误")
				}
			case 4:
				class.DeleteStudent()
			default:
				fmt.Println("输入有误")
			}
		}
	}
}

当中键入选择线程2后只会显示

PS E:\Code\Golang> go run "e:\Code\Golang\main.go"
选择线程
2
>>>             学生信息管理系统             <<<
>>>1. 展示  2. 添加  3. 编辑  4. 删除  0.退出<<<
>>>请选择
PS E:\Code\Golang>

Menu()后的scanf直接被跳过了!

不知道问题出现在了哪

最后附上Menu()

//菜单管理
func Menu() {
	fmt.Println(">>>             学生信息管理系统             <<<")
	fmt.Println(">>>1. 展示  2. 添加  3. 编辑  4. 删除  0.退出<<<")
	fmt.Println(">>>请选择")
}

 

你改成我这样试试看: 

fmt.Scanf("%s", &ans) 默认输入了""空字符串。 改成fmt.Scan(&ans)

 

我感觉你的代码是不是有问题,你执行这个,看下有交互不: 

package main

import "fmt"

func main() {
	var name string
	fmt.Printf("请输入内容:")
	fmt.Scan(&name)
	fmt.Println("name:", name)

	fmt.Printf("请输入内容2:")
	fmt.Scanf("%s", &name)
	fmt.Println("name:", name)
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

改成 fmt.Scanf("%d\n", &mode)