Go Academy · บทเรียน

การสแกนข้อมูลนำเข้า

อ่านข้อมูลนำเข้าที่จัดรูปแบบแล้ว

บทเรียน 4 จาก 413 ขั้นตอน

การสแกนข้อมูลนำเข้า เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

การอ่านอินพุตด้วย fmt

แพ็กเกจ fmt สามารถอ่านค่าได้ ไม่ได้มีไว้สำหรับพิมพ์เท่านั้น ฟังก์ชันสแกนจะแยกวิเคราะห์ข้อความเป็นตัวแปรตามประเภท

ฟังก์ชันเหล่านี้ทำงานในทิศทางตรงข้ามกับฟังก์ชันพิมพ์

package main

import "fmt"

func main() {
    var n int
    fmt.Sscan("42", &n)
    fmt.Println(n + 1)
}

ต้องใช้พอยน์เตอร์

ฟังก์ชันสแกนต้องเก็บผลลัพธ์ ดังนั้นคุณจึงต้องส่งที่อยู่ของตัวแปรแต่ละตัวโดยใช้ &

การลืม & เป็นข้อผิดพลาดที่พบบ่อยที่สุดในการสแกน

package main

import "fmt"

func main() {
    var a, b int
    fmt.Sscan("3 4", &a, &b)
    fmt.Println(a + b)
}

Sscan แยกตามช่องว่าง

fmt.Sscan อ่านค่าที่คั่นด้วยช่องว่างจากสตริงลงในตัวแปรหลายตัว โดยเลือกประเภทจากพอยน์เตอร์แต่ละตัว

package main

import "fmt"

func main() {
    var name string
    var age int
    fmt.Sscan("Ada 36", &name, &age)
    fmt.Println(name, age)
}

Sscanf ใช้รูปแบบ

fmt.Sscanf แยกวิเคราะห์ตามสตริงรูปแบบ เช่นเดียวกับ Printf แต่ทำงานย้อนกลับ อักขระตามตัวอักษรในรูปแบบต้องตรงกับอินพุต

package main

import "fmt"

func main() {
    var h, m int
    fmt.Sscanf("09:05", "%d:%d", &h, &m)
    fmt.Println(h, m)
}

ตรวจสอบจำนวนที่อ่านได้

ฟังก์ชันสแกนส่งคืนจำนวนรายการที่แยกวิเคราะห์สำเร็จและข้อผิดพลาด ให้ตรวจสอบจำนวนเพื่อดูว่าการแยกวิเคราะห์สำเร็จสมบูรณ์หรือไม่

package main

import "fmt"

func main() {
    var a, b int
    count, _ := fmt.Sscan("7", &a, &b)
    fmt.Println("parsed:", count)
}

การจัดการข้อผิดพลาดในการแยกวิเคราะห์

หากอินพุตไม่ตรงกับประเภทที่คาดไว้ จะส่งคืนข้อผิดพลาด ให้ตรวจสอบข้อผิดพลาดนี้เสมอเมื่อรับอินพุตจริง

package main

import "fmt"

func main() {
    var n int
    _, err := fmt.Sscan("notanumber", &n)
    if err != nil {
        fmt.Println("error:", err)
    }
}

การแยกวิเคราะห์หลายประเภท

คุณสามารถอ่านค่าหลายประเภทได้ในการเรียกใช้ครั้งเดียว ประเภทของพอยน์เตอร์แต่ละตัวจะกำหนดวิธีแยกวิเคราะห์โทเค็นของตัวเอง

package main

import "fmt"

func main() {
    var word string
    var price float64
    var ok bool
    fmt.Sscan("apple 1.50 true", &word, &price, &ok)
    fmt.Println(word, price, ok)
}

Sscanf กับข้อความตามตัวอักษร

Sscanf เหมาะอย่างยิ่งกับรูปแบบตายตัว เช่น พิกัดหรือคู่คีย์-ค่า ซึ่งมีเครื่องหมายวรรคตอนคั่นตัวเลข

package main

import "fmt"

func main() {
    var x, y int
    fmt.Sscanf("(3,8)", "(%d,%d)", &x, &y)
    fmt.Println(x, y)
}

การอ่านเลขทศนิยม

ใช้ %f ใน Sscanf หรือใช้ *float64 ใน Sscan เพื่ออ่านจำนวนทศนิยม

package main

import "fmt"

func main() {
    var temp float64
    fmt.Sscanf("21.5C", "%fC", &temp)
    fmt.Println(temp)
}

การสแกนเทียบกับอินพุตมาตรฐาน

fmt.Scan และ fmt.Scanf อ่านจากอินพุตมาตรฐานในลักษณะเดียวกับที่ Sscan อ่านจากสตริง กฎการแยกวิเคราะห์เหมือนกัน ต่างกันเพียงแหล่งข้อมูล

package main

import "fmt"

func main() {
    line := "100 200"
    var a, b int
    fmt.Sscan(line, &a, &b)
    fmt.Println(a * b)
}

ตัวแยกวิเคราะห์ขนาดเล็ก

ผสานการสแกนเข้ากับการคำนวณเพื่อแยกวิเคราะห์ระเบียนและสร้างผลลัพธ์

package main

import "fmt"

func main() {
    var name string
    var qty int
    var unit float64
    fmt.Sscanf("pen 3 1.25", "%s %d %f", &name, &qty, &unit)
    fmt.Printf("%s total: $%.2f\n", name, float64(qty)*unit)
}

ตรวจสอบอย่างรวดเร็ว

คุณต้องส่งอะไรให้ฟังก์ชันสแกนเพื่อเก็บผลลัพธ์

สรุปทบทวน: การสแกนอินพุต

คุณได้เรียนรู้การอ่านอินพุตตามรูปแบบแล้ว:

  • Sscan แยกตามช่องว่าง ส่วน Sscanf ทำตามสตริงรูปแบบ
  • ส่งพอยน์เตอร์ด้วย & สำหรับเป้าหมายแต่ละตัว
  • ตรวจสอบจำนวนและข้อผิดพลาดที่ส่งคืนเพื่อจับอินพุตที่ไม่ถูกต้อง
package main

import "fmt"

func main() {
    var d, mo, y int
    fmt.Sscanf("30/05/2026", "%d/%d/%d", &d, &mo, &y)
    fmt.Println(y, mo, d)
}
เริ่มต้นได้ฟรี

เรียนรู้ Go ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
51
บทเรียน
203

คำถามที่พบบ่อย

บทเรียน “การสแกนข้อมูลนำเข้า” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสแกนข้อมูลนำเข้า” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสแกนข้อมูลนำเข้า”

อ่านข้อมูลนำเข้าที่จัดรูปแบบแล้ว คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การสแกนข้อมูลนำเข้า” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เวิร์บของ Printf
  2. Sprintf และ Fprintf
  3. อินเทอร์เฟซ Stringer
  4. การสแกนข้อมูลนำเข้า
← กลับไปที่ Go Academy