Je voudrais lire l'entrée standard à partir de la ligne de commande, mais mes tentatives se sont terminées avec la fermeture du programme avant que je ne sois invité à entrer. Je cherche l'équivalent de Console.ReadLine () en C #.
Voici ce que j'ai actuellement:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
fmt.Println(text)
fmt.Println("Enter text: ")
text2 := ""
fmt.Scanln(text2)
fmt.Println(text2)
ln := ""
fmt.Sscanln("%v", ln)
fmt.Println(ln)
}
bufio
mise en mémoire tampon d'un lecteur (par exemplebufio.NewReader(os.Stdin)
) avec les lectures directes du lecteur soulignant (par exemple, les lectures directesfmt.Scanln(x)
depuisos.Stdin
). La mise en mémoire tampon peut se lire arbitrairement très loin. (Dans ce cas spécifique, la dernière doit êtrefmt.Fscanln(reader,x)
de lire à partir du même tampon).fmt.Sscanln
travaux, il devient "% v" après l'exécutionRéponses:
Je ne sais pas ce qui ne va pas avec le bloc
Comme cela fonctionne sur ma machine. Cependant, pour le bloc suivant, vous avez besoin d'un pointeur sur les variables auxquelles vous affectez l'entrée. Essayez de remplacer
fmt.Scanln(text2)
parfmt.Scanln(&text2)
. N'utilisez pasSscanln
, car il analyse une chaîne déjà en mémoire au lieu de stdin. Si vous voulez faire quelque chose comme ce que vous essayez de faire, remplacez-le parfmt.Scanf("%s", &ln)
Si cela ne fonctionne toujours pas, votre coupable pourrait être des paramètres système étranges ou un IDE buggy.
la source
ReadString('\n')
ouReadString("\n")
?rd
à la variables
commeif s,_ = rd.ReadString('\n'); true { s = strings.Trim(s, " \n") }
cannot use "\n" (type string) as type byte in argument to reader.ReadString
vous pouvez aussi essayer:
la source
fmt.Println(scanner.Err())
sous la boucle for.Je pense qu'une façon plus standard de procéder serait:
Jetez un œil au
scan
godoc: http://godoc.org/fmt#Scanla source
stops scanning at a newline and after the final item there must be a newline or EOF
si pas sûr pourquoi l'espace le "casse" ... Je suppose que c'est un bugfmt.Scanln
etfmt.Scan
de la version go 2016 actuelle (version go go1.6.2 linux / amd64).Essayez toujours d'utiliser bufio.NewScanner pour collecter les entrées de la console. Comme d'autres l'ont mentionné, il existe plusieurs façons de faire le travail, mais le scanner est initialement destiné à le faire. Dave Cheney explique pourquoi vous devriez utiliser Scanner au lieu de bufio.Reader ReadLine.
https://twitter.com/davecheney/status/604837853344989184?lang=en
Voici la réponse d'extrait de code pour votre question
Si vous ne voulez pas collecter par programmation les entrées, ajoutez simplement ces lignes
Le résultat du programme ci-dessus sera:
Le programme ci-dessus recueille les entrées utilisateur et les enregistre dans un tableau. Nous pouvons également briser ce flux avec un caractère spécial. Le scanner fournit une API pour une utilisation avancée comme le fractionnement à l'aide d'une fonction personnalisée, etc., l'analyse de différents types de flux d'E / S (Stdin, String), etc.
la source
Une autre façon de lire plusieurs entrées dans une boucle qui peut gérer une entrée avec des espaces:
Production:
la source
Je suis en retard à la fête. Mais que diriez-vous d'une doublure:
et appuyez sur ctrl + d (EOT) une fois l'entrée entrée sur la ligne de commande.
la source
os.Stdin
ça ne «finit» pas, il est impossible de tout lire. Vous pourriez attendre un peu ...mail
.Essayez ce code: -
la source
Scanf()
n'accepte pas les espaces blancs dans la chaînePeut aussi se faire comme ceci: -
la source
Lisez proprement dans quelques valeurs invitées:
Voici une course:
la source
Vous devez fournir un pointeur sur la var que vous souhaitez numériser, comme ceci:
la source
Dans mon cas, le programme n'attendait pas car j'utilisais la
watcher
commande pour exécuter automatiquement le programme. L'exécution manuelle du programme ago run main.go
entraîné la «saisie de texte» et finalement l'impression sur la console.la source
Scan*
famille est qu'elle lit jusqu'à un séparateur d'espaces (par exemple un espace).