Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mendapatkan input semasa mengeluarkan?

Bagaimana untuk mendapatkan input semasa mengeluarkan?

WBOY
WBOYke hadapan
2024-02-09 12:30:19634semak imbas

Bagaimana untuk mendapatkan input semasa mengeluarkan?

PHP Editor Apple hari ini akan memperkenalkan kepada anda soalan biasa: Dalam PHP, apabila kita perlu mendapatkan input pengguna, bagaimanakah kita harus mengeluarkannya? Mendapatkan input pengguna adalah bahagian penting dalam menulis program interaktif, jadi adalah penting untuk menguasai kaedah yang betul. Dalam PHP, kita boleh menggunakan beberapa fungsi terbina dalam untuk mendapatkan input pengguna, seperti menggunakan fungsi `fgets()` untuk membaca baris input pengguna daripada input standard, atau menggunakan fungsi `fgetc()` untuk membaca daripada input standard Ambil aksara. Sudah tentu, kita juga boleh menggunakan pembolehubah superglobal `$_GET` atau `$_POST` untuk mendapatkan data yang diserahkan oleh pengguna melalui borang. Tidak kira kaedah yang digunakan, anda perlu memberi perhatian kepada pengesahan dan penapisan input pengguna yang diperlukan untuk memastikan keselamatan dan kestabilan program. Saya harap pengenalan di atas dapat membantu semua orang!

Kandungan soalan

Apa yang saya ingin laksanakan ialah sejenis aplikasi yang mencatatkan banyak maklumat ke konsol (contohnya, nombor dari 0 hingga 1000000000000) dan dapat menghentikan pelaksanaan dengan menaip arahan dalam konsol (contohnya "berhenti").

Saya mendapat idea untuk menggunakan goroutine, namun, saya tidak boleh memasukkan arahan kerana medan input berubah kepada output.

Ini kod saya:

package main

import (
    "bufio"
    "os"
)

var process bool = true

func commandHandler() {
    reader := bufio.NewReader(os.Stdin)
    for process {
        text, _ := reader.ReadString('\n')
        if text == "stop\r\n" {
            process = false
        }
    }
}

func task() {
    var i int64 = 0
    for ; i < 10000000000 || process; i++ {
        if i%30000000 == 0 { // Just to slow down an output for a while
            println(i)
        }
    }
}

func main() {
    go task()
    commandHandler()
}

Dan keputusan yang saya dapat. Huruf adalah input yang saya cuba masukkan dan nombor adalah output aplikasi

Sebarang cadangan tentang cara melakukan input/output yang betul dalam aplikasi go saya?

Penyelesaian

Saya tidak boleh memasukkan arahan kerana medan input berubah kepada output

Anda boleh memasukkan arahan seperti biasa. Semasa anda menaipnya, ia digemakan ke konsol anda. Ini akan digabungkan dengan semua output lain ke konsol, yang mungkin mengelirukan pengguna - tetapi bukan komputer.

Dengan mengandaikan ini benar-benar sepadan dengan sistem pengendalian anda, program anda berjalan dengan baik:

if text == "stop\r\n" {

Tiada pada OS saya r。更便携的方法是使用 strings.trimspace Alih keluar semua ruang.

import (
  ...
  "strings"
) 
... 
...
        if strings.TrimSpace(text) == "stop" {

Dengan perubahan ini, kod itu berfungsi untuk saya. Seperti yang anda katakan, output dan input dimasukkan ke dalam skrin, tetapi anda masih boleh menaip stop dan menamatkan program.

Sebarang cadangan tentang cara melakukan input/output yang betul dalam aplikasi go saya?

Hampir tiada program terminal di dunia nyata yang interaktif. Sebaliknya, argumen baris arahan dan pembolehubah persekitaran menyediakan konfigurasinya apabila dipanggil. Ubah hala Shell biasanya digunakan untuk mengekalkan (dalam fail) atau halaman (mis. |less) sebarang output panjang daripada program.

Anda melihat banyak pengaturcaraan akademik menggunakan model terminal interaktif, di mana program menggesa pengguna dan mengumpul data, tetapi dalam dunia nyata ini sangat jarang berlaku dan selalunya merupakan komplikasi yang tidak bijak. Input standard biasanya digunakan untuk menyediakan input data yang diperlukan untuk pengiraan, bukannya arahan pengguna (seperti data untuk dimanipulasi atau ditapis).

Seperti yang dicadangkan @tinkerer, isyarat sudah boleh digunakan untuk menamatkan program anda (perincian adalah khusus OS). Jadi sebenarnya tidak perlu risau tentang cara aplikasi terminal mengendalikan perwakilan visual input dan output standard, yang diinterpolasi hanya untuk menamatkan program. Terdapat banyak isyarat lain dalam persekitaran posix, beberapa daripadanya sepenuhnya menghadap pengguna dan boleh digunakan untuk sebarang tujuan.

Apabila masa jalan memerlukan input pengguna yang lebih kompleks, program biasanya akan mendengar arahan pada soket. Untuk program sedemikian, antara muka web yang menyediakan perkhidmatan http menjadi semakin biasa disebabkan oleh kesederhanaan dan kebolehaksesan.

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan input semasa mengeluarkan?. 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