簡體   English   中英

檢查用戶輸入字符串

[英]Checking user input string

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

謝謝您的幫助。

這是因為reader.ReadString返回所有包含定界符的文本,所以返回的字符串將是1\\n而不是1 文檔 (我的重點)中:

 func (*Reader) ReadString func (b *Reader) ReadString(delim byte) (string, error) 

ReadString讀取直到輸入中第一次出現delim為止,返回一個字符串,其中包含直到delimiter並包括delimiter的數據。 如果ReadString在找到定界符之前遇到錯誤,它將返回錯誤之前讀取的數據和錯誤本身(通常為io.EOF )。 當且僅當返回的數據未以delim結尾時,ReadString返回err != nil 對於簡單的用途, Scanner可能更方便。

也許你想做

return strings.TrimSpace(text)

prompt()的末尾。

謝謝 ! 這是返回正確輸入的“ prompt()”代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM