检查用户输入字符串

时间:2017-01-21 18:45:52

标签: go

我是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
    }
}

感谢您的帮助。

2 个答案:

答案 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];
}