我是GoLang的新手,我遇到了这种情况的问题: 即使用户的输入是" 1",它也不会输入if语句。
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"math"
"strings"
)
func prompt(toprint string) string{
if(toprint == ""){
toprint = "Enter text :";
}
reader := bufio.NewReader(os.Stdin);
fmt.Println(toprint);
text, _ := reader.ReadString('\n');
return text;
}
func main() {
choice := prompt("Please enter '1'");
if(strings.Compare("1",choice)==0||choice=="1"){
// D'ONT ENTER HERE EVEN WHEN choice=="1"
}else{
// Always go here
}
}
感谢您的帮助。
答案 0 :(得分:4)
这是因为1\n
返回包括分隔符在内的所有文本,因此返回的字符串将是1
,而不仅仅是func (*Reader) ReadString
func (b *Reader) ReadString(delim byte) (string, error)
。来自the documentation(我的重点):
ReadString
delim
读取,直到输入中第一次出现ReadString
,返回包含数据的字符串,包括分隔符。如果io.EOF
在找到分隔符之前遇到错误,它将返回错误之前读取的数据和错误本身(通常为err != nil
)。当且仅当返回的数据未在delim
中结束时,ReadString才返回Scanner
。对于简单的用途,return strings.TrimSpace(text)
可能更方便。
也许你想做
prompt()
在var numregex = /[^0-9-]|(?!^)-/g;
的末尾。
答案 1 :(得分:0)
谢谢! 这是"提示符()"返回正确输入的代码:
func prompt(toprint string) string{
if(toprint == ""){
toprint = "Enter text :";
}
reader := bufio.NewReader(os.Stdin);
fmt.Println(toprint);
text, _ := reader.ReadString('\n');
return text[0:len(text)-2];
}