Results 1 to 7 of 7

Thread: เล็กน้อยเกี่ยวกับการใช้ scanf และ gets ในภาษาC

  1. #1
    Junior Member
    Join Date
    Oct 2007
    Posts
    3


    Thumbs down

    รู้สึกว่า ในภาษา C ถ้าใช้ scanf แล้วตามด้วย gets จะทำให้เกิด Bug เนื่องจาก gets ตัวที่ตามหลัง scanf ทันที
    จะไม่ทำงาน และจะไปทำงานในขั้นตอนต่อไปทันที ยังไม่ทราบเหตุผลแน่ชัด แต่คาดว่า เป็นเพราะ scanf เป็นการ
    Input ข้อมูล และเมื่อ scanf อีกครั้ง มันจะ Out ก่อน แล้วค่อย Input ใหม่ แต่ gets กับ scanf ไม่ Support
    กัน และ gets ไม่ได้ทำการ Out ก่อน จึง Input ไม่ได้(มั้งคะ)...

    วิธีแก้เบื้องต้น: ใส่ fflush(stdin); เข้าไปก่อนที่จะทำการ gets...ต่อจาก scanf...... ค่ะ

    หวังว่าจะมีประโยชน์นะคะ
    <div align="center">[SIZE=2][color=#33CC00]+ หากจะเรียนรู้ชีวิตต้องมองย้อนหลัง แต่หากจะดำเนินชีวิตต้องมองไปข้างหน้า +[/color][/SIZE]</div>

  2. #2
    Junior Member
    Join Date
    May 2007
    Location
    Thailand
    Posts
    1


    สาเหตุที่ ทำให้ gets ไม่ทำงานเพราะว่า
    **Hidden Content: To see this hidden content your post count must be 1 or greater.**


    จบข่าว... :P
    [SIZE=2]ใครช่างใจร้ายใจดำ ทำกับฉันได้ !!![/SIZE]

  3. #3


    ผมเคยเป็นครับ ตอนเรียน

    อาจารย์แนะนำวิธีแก้แบบง่ายๆ

    ให้ใส่้เป็น gets() 2 อันอะคับ

    อันแรกที่ต่อจาก scanf อาจจะเป็นว่างไว้หรือไม่ก็ตัวแปรที่จะนำไปใช้

    อันหลังจึงใส่ตัวแปรที่จะนำไปใช้ ให้ข้อมูลทับตัวแรกไปเลย

    ผมก็ไม่รู้จะมีผลข้างเคียงรึป่าวนะคับ แต่เห็นว่าง่ายดีอะ

  4. #4
    Member
    Join Date
    May 2007
    Location
    158/40-1
    Posts
    69


    กระจ่างในทันที

    กำลังเขียนโปรอยู่ มาเซิทหาใน Google เจอเลย

    ถ้าไม่เจอ คง งง ไปอีก ซักพัก
    <div align="center">[img]http://www.dragonrain.com/graphics/signatures/tsubasa1.jpg[/img]</div>

  5. #5
    Junior Member
    Join Date
    May 2008
    Posts
    3


    คือยากทราบว่าที่ gets()ตัวที่ต่อจาก scanf ได้รับ คือ \n หรือ enter หรือ ขี้นบรรทัดใหม่ป่าวครับ

    อยากรู้มานานแล้วช่วยหอบหน่อยครับ

  6. #6
    Junior Member
    Join Date
    Oct 2008
    Posts
    12


    ผมว่าไม่น่ะครับ

  7. #7
    Junior Member
    Join Date
    Dec 2008
    Posts
    7


    ปัญหานี้ พบอยู่ตลอดครับ

    ที่เมื่อใช้ scanf() แล้ว จะมี \n หรือ Enter ตกค้างอยู่

    ผมขอเสนอวิธีนี้ครับ ผมคิดว่า เป็นวิธีที่ง่ายๆ


    ตัวอย่างเช่น

    ต้องการรับ Input เป็น string 1 ชุด และ ตามด้วย จำนวนเต็ม อีก 2 ตัว

    การ Call Function scanf() ทั่วไป ก็จะออกมาในลักษณะนี้

    scanf("%s%d%d",varString,&varInt1,&varInt2);

    เมื่อนำโปรแกรมไปใช้งานจริง สิ่งที่ผู้ใช้จะป้อนเข้ามา ก็จะเป็น

    samplestring 4 5\n

    เพราะ เมื่อผู้ใช้กรอก Input ครบ จะต้อง กด Enter ทำให้รับ \n เข้ามา

    เราจะแก้ด้วยการ ใส่ %*c เข้าไป ดังนี้

    scanf("%s%d%d%*c",varString,&varInt1,&varInt2);

    ซึ่งถ้าพูดติดตลกก็คือ การปล่อยให้ %*c รับ วิญญาณของ \n เข้ามา ไม่ให้ตกค้าง
    แล้วเราก็ไม่ได้เก็บค่า \n ไปประมวลผลอะไร

    วิธีนี้เป็นวิธีที่ผมใช้แล้วไม่มีปัญหา ในการทำโจทย์แข่งขัน
    ซิ่ง มี Data set ที่ส่งเข้ามาแน่นอน
    ไม่มีการใส่ค่า แปลกประหลาดอย่าง เช่น เว้นวรรคไปร้อยตัวเล่นๆหลังจากใส่ input ตัวสุดท้าย

Members who have read this thread : 0

Actions : (View-Readers)

There are no names to display.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •