Пишу консольное приложение Quiz (тест) в цикле вывожу вопросы и возможные варианты ответа, нужно реализовать фичу если пользователь
попытается закрыть приложение с помощью Ctrl + C, необходимо запросить подтверждение. При подтверждении выхода через консоль, срабатывает прошлый Scan, который ждёт вариант ответа, т е . Really quit? [y/n] ввожу y - а он принимает это как ответ на прошлый Scan (в котором ожидался ответ на очередной вопрос теста). Само формирование вопросов опустил для компактности.
package main
import (
"fmt"
"strconv"
//"bufio"
"os"
"syscall"
"os/signal"
//"runtime"
)
func main() {
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGINT) //os.Interrupt
go func() {
for {
select {
case <-c:
fmt.Printf("\nReally quit? [y/n] > ")
var choice string
fmt.Scan(&choice)
if choice == "y" {
os.Exit(0)
}
}
}
}()
fmt.Println("hello")
var text string
//k:
for {
fmt.Println("What ...?")
fmt.Scan(&text)//сканим ответ юзера
inp, err := strconv.Atoi(text)
if err != nil {
fmt.Println(text, "Invalid number for exit!")
//goto k
} else {
fmt.Println(inp)
os.Exit(0)
}
}
}
Также пробовал читать через
var reader = bufio.NewReader(os.Stdin)
func myScan() string {
text, _ := reader.ReadString('\n')
return text
}
Результат такой же