Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cetak rentetan yang dimasukkan pengguna n kali dalam perjalanan

Cetak rentetan yang dimasukkan pengguna n kali dalam perjalanan

WBOY
WBOYke hadapan
2024-02-06 08:00:07451semak imbas

在 go 中打印用户输入的字符串 n 次

Kandungan soalan

Saya seorang pemula dan saya hanya mahu mencetak rentetan yang dimasukkan oleh pengguna n kali, tetapi ia hanya mencetak ruang n kali. Ini kod saya

package main

import (
    "fmt"
)

func main() {
    var n int
    var s string
    fmt.Scanf("%d", &n)
    fmt.Scanf("%s", &s)

    for i := 0; i < n; i++ {
        fmt.Printf("%s\n", s)
    }
}

Adakah cara untuk menyelesaikan masalah ini? terima kasih.


Jawapan Betul


Lihat scanf Dokumen

Dua perkara yang paling berkaitan dengan soalan anda ialah:

  • Nilai yang diasingkan ruang
  • Baris baharu dalam input mesti sepadan dengan baris baharu dalam format

Jadi jika anda menjalankan aplikasi seperti sedia ada dan taip 20 foo 并按 Enter 键,您将获得预期的输出(foo 打印 20 次)。但是,如果您输入 20 dan tekan Enter anda akan mendapat 20 baris kosong;

var n int
var s string
fmt.Scanf("%d", &n)
_, err := fmt.Scanf("%s", &s)
if err != nil {
    panic(err)
}

Ini akan panik dengan panik: Baris baharu yang tidak dijangka kerana mengikut spesifikasi "baris baharu dalam input mesti sepadan dengan baris baharu dalam format". Dengan mengandaikan anda ingin menekan Enter selepas setiap entri, anda boleh menggunakan fmt.Scanf("%dn", &n). Walau bagaimanapun, seperti yang anda nyatakan dalam ulasan anda, jika anda menggunakan fmt.Scanf("%sn", &s) dan memasukkan rentetan yang mengandungi ruang, anda hanya akan mendapat bit pertama (kerana

Gunakan ruang sebagai pemisah). panic: Unexpected newline 而出现恐慌,因为根据规范,“输入中的换行符必须与格式中的换行符匹配”。假设您希望在每次输入后按 Enter 键,则可以使用 fmt.Scanf("%dn", &n)。但是,正如您在评论中提到的,如果您使用 fmt.Scanf("%sn", &s) 并输入包含空格的字符串,那么您只会得到第一位(因为 scanf Jika anda ingin mendapatkan keseluruhan baris daripada

maka jawapan kepada stdinsoalan ini menyediakan beberapa pilihan seperti

func main() {
    var n int
    var s string
    fmt.Println("How many times? ")
    fmt.Scanf("%d\n", &n)
    fmt.Println("What to output? ")
    reader := bufio.NewReader(os.Stdin)
    s, _ = reader.ReadString('\n')

    for i := 0; i < n; i++ {
        fmt.Printf("%s", s)
    }
}

Atas ialah kandungan terperinci Cetak rentetan yang dimasukkan pengguna n kali dalam perjalanan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam