명령 줄에서 표준 입력을 읽으려고하지만 입력하라는 메시지가 표시되기 전에 프로그램이 종료되면서 시도가 끝났습니다. C #에서 Console.ReadLine () 에 해당하는 것을 찾고 있습니다.
이것이 내가 현재 가지고있는 것입니다 :
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)
}
답변
블록에 어떤 문제가 있는지 잘 모르겠습니다
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
fmt.Println(text)
내 컴퓨터에서 작동합니다. 그러나 다음 블록의 경우 입력을 할당 할 변수에 대한 포인터가 필요합니다. 교체 시도 fmt.Scanln(text2)
와 함께 fmt.Scanln(&text2)
. Sscanln
stdin 대신 메모리에 이미있는 문자열을 구문 분석하기 때문에을 사용하지 마십시오 . 당신이하려고했던 것과 같은 것을하고 싶다면, 그것을fmt.Scanf("%s", &ln)
그래도 문제가 해결되지 않으면 이상한 시스템 설정이나 버그가있는 IDE 일 수 있습니다.
답변
당신은뿐만 아니라 시도 할 수 있습니다 :
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if scanner.Err() != nil {
// handle error.
}
답변
이 작업을 수행하는보다 표준적인 방법은 다음과 같습니다.
package main
import "fmt"
func main() {
fmt.Print("Enter text: ")
var input string
fmt.Scanln(&input)
fmt.Print(input)
}
상기 살펴보세요 scan
godoc을 : http://godoc.org/fmt#Scan
스캔은 표준 입력에서 읽은 텍스트를 스캔하여 연속 공백으로 구분 된 값을 연속 인수에 저장합니다. 줄 바꿈은 공백으로 계산됩니다.
Scanln은 스캔과 비슷하지만 줄 바꿈에서 스캔을 중지하며 마지막 항목 뒤에 줄 바꿈 또는 EOF가 있어야합니다.
답변
콘솔에서 입력을 수집 할 때는 항상 bufio.NewScanner 를 사용하십시오 . 다른 사람들이 언급했듯이 여러 가지 방법으로 작업을 수행 할 수 있지만 스캐너는 원래 작업을 수행하도록되어 있습니다. Dave Cheney는 bufio.Reader의 ReadLine 대신 스캐너를 사용해야하는 이유를 설명합니다.
https://twitter.com/davecheney/status/604837853344989184?lang=en
다음은 귀하의 질문에 대한 코드 스 니펫 답변입니다
package main
import (
"bufio"
"fmt"
"os"
)
/*
Three ways of taking input
1. fmt.Scanln(&input)
2. reader.ReadString()
3. scanner.Scan()
Here we recommend using bufio.NewScanner
*/
func main() {
// To create dynamic array
arr := make([]string, 0)
scanner := bufio.NewScanner(os.Stdin)
for {
fmt.Print("Enter Text: ")
// Scans a line from Stdin(Console)
scanner.Scan()
// Holds the string that scanned
text := scanner.Text()
if len(text) != 0 {
fmt.Println(text)
arr = append(arr, text)
} else {
break
}
}
// Use collected inputs
fmt.Println(arr)
}
프로그래밍 방식으로 입력을 수집하지 않으려면 다음 행을 추가하십시오.
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
text := scanner.Text()
fmt.Println(text)
위 프로그램의 출력은 다음과 같습니다.
Enter Text: Bob
Bob
Enter Text: Alice
Alice
Enter Text:
[Bob Alice]
위의 프로그램은 사용자 입력을 수집하여 배열에 저장합니다. 우리는 또한 특별한 흐름으로 그 흐름을 깨뜨릴 수 있습니다. 스캐너는 사용자 정의 기능 등을 사용한 분할, 다양한 유형의 I / O 스트림 (Stdin, String) 스캔 등 고급 사용을위한 API를 제공합니다.
답변
공백이있는 입력을 처리 할 수있는 루프 내에서 여러 입력을 읽는 또 다른 방법 :
package main
import (
"fmt"
"bufio"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
var text string
for text != "q" { // break the loop if text == "q"
fmt.Print("Enter your text: ")
scanner.Scan()
text = scanner.Text()
if text != "q" {
fmt.Println("Your text was: ", text)
}
}
}
산출:
Enter your text: Hello world!
Your text was: Hello world!
Enter your text: Go is awesome!
Your text was: Go is awesome!
Enter your text: q
답변
나는 파티에 늦었다. 그러나 하나의 라이너는 어떻습니까?
data, err := ioutil.ReadAll(os.Stdin)
명령 행에 입력이 입력되면 ctrl + d (EOT)를 누르십시오.
답변
이 코드를 사용해보십시오 :-
var input string
func main() {
fmt.Print("Enter Your Name=")
fmt.Scanf("%s",&input)
fmt.Println("Hello "+input)
}