ข่าว IT ล่าสุด
ถูกใจอย่าลืม Like Fanpage
Listen 5 : put Command
แสดงแล้ว 6880 ครั้ง /
สิงหาคม 18, 2009, 22:27:26

Moshi

ออฟไลน์
กระทู้ : 16,996
คะแนนขอบคุณ : 45
it4x สังคมแห่งการเรียนรู้

คำสั่งในการ input   ที่ใช้ง่ายๆก็คือ คำสั่ง

                                           scanf("   ตัวกำหนดชนิดข้อมูล",&ตัวแปร);

ยกตัวอย่างเช่น   ต้องการรับค่า จำนวนเต็ม มาใส่ไว้ในตัวแปรที่ชื่อ number จะสั่งดังนี้
 int   number;
 scanf("%d",&number); สำคัญอย่าลืมเครื่องหมาย &
 และหากรับตัวแปร 2 ตัว โดย รับค่า จำนวนเต็มไว้ในตัวแปรชื่อ num1 และ รับค่า   จำนวนจริง ไว้ในตัวแปร num2 ทำได้โดย
 int num1,num2;
 scanf("%d   %f",&num1,&num2);
 หากต้องการรับข้อความ Apichat ซึ่งก็คือ 7 character   ทำได้โดย
 char name[7];
 scanf("%c",name);
 สังเกตไหมครับว่าที่คำสั่ง   scanf อันหลังนี้ตรงตัวแปร name ทำไมไม่มีเครื่องหมาย & ปรากฎอยู่   นั่นก็เป็นเพราะว่าเราได้ทำการกำหนดตัวแปร name ไว้เป็นตัวแปร array ชนิด character   ดังนั้นการที่เราเรียกชื่อตัวแปรที่เป็น array   นั่นก็หมายความว่าเราได้ทำการเรียก"ที่อยู่"   ของตัวแปรกลุ่มนั้นไว้แล้วจึงไม่จำเป็นต้องใส่เครื่องหมาย & แต่อย่างใด
 นั่นเป็นการแสดงให้เห็นว่า   เมื่อเราเรียกคำสั่ง scanf ตัวคำสั่งนี้จะทำการยัดค่าที่ผู้ใช้   ใส่ให้เก็บไว้ในตัวแปรตามที่อยู่ที่ให้ไว้นั่นคือ

scanf("%d",&number);

ก็เป็นการยัดค่าตัวแปร integer(รู้ได้จาก %d)   ไว้ในที่อยู่(&)ของตัวแปรที่ชื่อ number
 และเรายังรู้อีกว่าโดยปกติการกำหนดค่าให้กับตัวแปรที่เป็น array   นั้นจำเป็นจะต้องมีการใส่ index ให้กับ ตัวแปรนั้นเสมอว่า จะเก็บไว้ใน array ช่องใด   เช่นสมมติ ตัวแปรชนิด integer ชื่อ num[7] คือตัวแปรที่ชื่อ num   ที่มีช่องสมาชิกย่อยทั้งหมด7ช่องด้วยกันโดย ตัวแปร num   จะมีโครงสร้างดังนี้

                                                     
num[0]
num[1]
num[2]
num[3]
num[4]
num[5]
num[6]
และหากเราต้องการจะกำหนดค่าให้กับตัวแปร num ในแต่ละช่องสามารถทำได้โดย   num[0]=10; หรือ num[1]=20; เป็นต้น นั่นคือการเขียนชื่อตัวแปรแล้วตามด้วย index   ของตัวแปรนั้นว่าต้องการจะกำหนดค่า ของเราไว้ในช่องใดของ array num นั้น   และที่เราต้องรู้อีกอย่างก็คือ หากเราเรียกชื่อตัวแปร array เฉยๆ โดยไม่ได้ทำการใส่   index ให้กับตัวแปรนั้นเช่นเราเรียก num นั่นจะกลายเป็นการชี้ไปยังที่อยู่ของตัวแปร   num ที่อยู่ใน หน่วยความจำของเครื่อง ตอนนี้อยากให้มองหน่วยความจำ   เป็นช่องๆที่เรียงติดกันยาวมาก และเดิมทีการที่เราประกาศตัวแปร   ก็คือการที่ตัวชี้ชี้ลงไปยังช่องๆในหน่วยความจำนั้นอย่างสุ่มคือ   เราก็ไม่รู้ว่าเมื่อเราประกาศตัวแปรแล้วมันจะไปชี้ที่ใดของหน่วยความจำมันจะทำการจองจำนวนช่องตามชนิดของตัวแปร   เช่นถ้าประกาศตัวแปรชนิด integer มันอาจจะจองสัก 2 ช่องที่ติดกัน ถ้าประกาศตัวแปร   double มันอาจจะจองสัก 4 ช่องติดกันเป็นต้น และหากเราจองตัวแปรชนิด array ที่เป็น   integer ตามข้างต้น มันก็จะจองทั้งหมด 7 ช่องติดกัน   โดยแต่ละช่องก็จะมีคุณสมบัติเป็นช่องของ integer ซึ่งอาจจะจอง2ช่อง ใน num[0] จนถึง   num[6]
โอ๋ย ! เผลอพูดเรื่อง array มาซะยืดยาว   บางคนอาจเข้าใจบางคนอาจจะไม่เข้าใจ แต่จริงๆ แล้วในตอนนี้อยากจะบอกเพียงว่า   หากเรียกชื่อตัวแปรที่เป็น array เฉยๆ โดยไม่ใส่ index   ให้มันมันก็จะทำการชี้ไปที่ที่อยู่ของตัวแปรนั้นนั่นเอง ที่อยากจะบอก.   จากนั้นจึงเป็นเหตุผลว่าทำไมคำสั่ง scanf ที่รับตัวแปรที่เป็น array ของ character   เราจึงไม่ต้องใส่เครื่องหมาย & อยากจะบอกแค่นี้แหละ แต่ตอนนี้ก็ต้องถือว่าเรามีความรู้เรื่อง array   กันบ้างแล้วไม่มากก็น้อย
ขอย้ำว่าเป็นเฉพาะตอนรับ array ของ   character(หรือในความหมายคือการรับ string นั่นแหละ   เนื่องจากในภาษาซีไม่มีตัวแปรชนิด string จึงจำเป็นต้องใช้ตัวแปรที่เป็น array ของ   character มาแทน ) เท่านั้นนะ ที่ไม่ต้องใส่ & หน้าตัวแปรในคำสั่ง scanf   อย่าเข้าใจผิดหากเป็นตัวแปรชนิดอื่นก็ทำไปตามกฎซะนะ

คำสั่งที่ใช้ในการรับค่าจากแป้นพิมพ์คำสั่งต่อไป ก็ขอแนะนำคำสั่ง gets( )   เป็นคำสั่งที่ใช้รับค่า string จากแป้นพิมพ์ คำสั่งนี้อาจารย์สุรพล   มักจะบังคับให้เด็กนักเรียนใช้มากกว่าคำสั่ง scanf   เพราะท่านบอกว่าคำสั่งนี้มันปลอดภัยดี คือรับอะไรมามันก็จะเป็นการรับ string   ทั้งสิ้น ไม่เหมือนกับคำสั่ง scanf   ซึ่งจะต้องกำหนดชนิดตัวแปรที่รับเช่นต้องกำหนดว่ารับ %d ให้กับตัวแปรที่เป็น   integer อาจารย์ท่านว่า หากคนที่ใช้โปรแกรมมันอุตริว่า เขาให้เต็มตัวเลข   มันไปเติมเป็นตัวหนังสือซะ เดี๋ยวโปรแกรมมันจะผิดพลาดกันไปหมด   แกเลยแนะนำให้ใช้คำสั่ง gets( ) ในการรับค่าแทน แล้วอยากจะแปลงค่า string   ที่ได้ไปเป็นตัวแปรชนิดใด ค่อยใช้คำสั่งแปลงกัน เช่นเมื่อรับ string   มาแล้วต้องการแปลงมันให้เป็น integer ก็สามารถใช้คำสั่ง atoi( ) ได้   จะขอยกตัวอย่างดังนี้

#include
 #include
 int   x,y;
 char s[80];
 main(){
    printf(  " Enter first integer :   ");
    gets(s);  
    x=atoi(s);  
    printf(  "   Enter
second integer:   ");
    gets(s);  
    y=atoi(s);  
    printf(  "the sum is %d",x+y);
 }

 ดูตัวอย่างนี้ให้ดี มีตัวแปรที่เป็นจำนวนเต็ม x และ y และมีตัวแปร character   s ซึ่งเป็น array ของ character จากนั้นมีการเขียนข้อความให้ ผู้ใช้ใส่ค่าจำนวนเต็ม   แต่ตอนรับค่านี่สิ ดันใช้คำสั่ง gets(s) ก็คือ รับค่าที่ผู้ใช้ใส่มาให้อยู่ในรูปของ   string หรือ array ของ character ซะ จากนั้นค่อยใช้คำสั่ง atoi(s) เพื่อแปลงค่า   string s ให้กลายเป็นค่าจำนวนเต็ม เก็บไว้ที่ตัวแปร x ซึ่งเป็นตัวแปรจำนวนเต็ม และ   y ตามลำดับ จากนั้นจึงทำการพิมพ์ค่า   ผลบวกของทั้งสองตัวแปรออกมา
   และนอกจากจะมีฟังก์ชัน atoi เพื่อแปลง string ไปเป็น   integer แล้ว ยังมี atof เพื่อทำการแปลง string ไปเป็น float อีกด้วย   ตัวชื่อฟังก์ชันก็สื่อความหมายให้เราเข้าใจดีอยู่แล้ว เช่น atoi ตัว a อาจหมายถึง   alphabet หรือตัวอักษร to ก็อาจหมายถึง แปลงไปยัง ส่วน i ก็หมายถึง integer ดังนั้น   atoi ก็สื่อความหมายชัดเจนดี ถ้าจะแปลงไปเป็น float ก็กลายเป็น atof แต่ที่สำคัญคือ   ทั้ง atoi และ atof นั้นการที่เราจะเรียกใช้ได้ต้องทำการ include   ด้วยเพราะทั้ง 2 ฟังก์ชันนั้นอยู่ใน library นี้

นอกจากคำสั่ง scanf ,   gets แล้วยังมีอีกหลายคำสั่งมากมายเช่น getchar( ),getche( ), getch( )   เป็นต้นซึ่งทั้ง 3 อันหลังนี้ก็มีคุณสมบัติแตกต่างกัน คือ

getchar(   ) จะรับตัวอักษรทางแป้นพิมพ์โดยจะรับเพียง 1   ตัวเท่านั้นและมีการแสดงตัวอักษรนั้นทางจอภาพด้วย
 getche( ) จะรับตัวอักษร 1   ตัวจากทางแป้นพิมพ์และจะแสดงตัวอักษรนั้นทางจอภาพด้วยเช่นกันแต่เมื่อป้อนเสร็จไม่ต้องกด   Enter ซึ่งจะคล้ายกับ getchar( ) แต่ getchar( )   นั้นเมื่อป้อนตัวอักษรเสร็จแล้วจะต้องกด Enter ด้วยเพื่อทำงานต่อไป
 getch( )   จะคล้ายกับ getche( )   จะแตกต่างตรงที่จะไม่แสดงตัวอักษรที่รับทางแป้นพิมพ์ออกทางจอภาพ.

วิธีใช้ของทั้ง 3 ฟังก์ชันคล้ายกันก็คือ ประกาศตัวแปร char สมมติชื่อ ch   จากนั้นก็เรียกฟังก์ชันตามปกติดังนี้
     #include  
       main()
       {
       char ch;
                  printf("Input one   character");
                  ch=getchar( ); หรือ ch=getche( );
หรือออาจจะเป็น ch=getch( );
                      printf("The character you type is %c   n",ch);
         }

           ขอให้ลองไปใช้กันดูโดยลองเปลี่ยนบรรทัดที่ 6   ของโปรแกรมข้างบนนี้เป็นทั้ง 3 แบบดูนะ อย่าเขียนทั้ง 3   แบบพร้อมๆกันหละเลือกเอาอันใดอันหนึ่งเท่านั้นนะ
           
           OK. ขอสรุปช่วงนี้หน่อย   ตอนนี้เรารู้จักวิธี แสดงข้อมูล และวิธีรับข้อมูล และได้รู้จัก array   บ้างนิดหน่อยแล้ว ขอให้จดจำและสังเกตวิธีการใช้   อย่างแม่นยำและทดลองเขียนโปรแกรมเองให้มากๆ จึงจะจำและสามารถใช้ได้คล่อง   จากประสบการณ์ที่เคยเป็น Teacher Assistance วิชา ที่มีการโปรแกรมภาษา C   มาแล้วพบว่า ผู้ที่เรียนยังสับสนกับการใช้คำสั่ง printf   ตรงที่ว่าจะต้องใส่ตัวแปรในคำสั่งด้วยหรือเปล่า หรือว่า ลืมใส่ %d %c   เมื่อจำเป็นต้องใส่ อะไรทำนองเนี้ย   ลองทบทวนดูนะข้างต้นเขียนไว้ละเอียดแล้วในระดับนึง ส่วนคำสั่ง scanf   ก็จะมีปัญหากันมากเลย ตรงที่ลืมเครื่องหมาย & บ้าง หรือไปใส่เครื่องหมาย &   ตรงที่ที่ไม่ควรใส่เช่นตรง array ของ character เนี่ยแหละที่เป็นปัญหาหากเราจะรับ   string
         

« แก้ไขครั้งสุดท้าย: สิงหาคม 18, 2009, 22:33:33 โดย admin »

 

ด้วยฟังค์ชั่น ตอบด่วน คุณสามารถใช้โค๊ดและ เครื่องหมายแสดงอารมณ์ได้ เหมือนการตั้งกระทู้ธรรมดา แต่สามารถทำได้สะดวกกว่า

ระวัง: หัวข้อนี้ไม่มีการอัพเดทมานานถึง 120 วัน

แจ้งเตือน: โพสของคุณจะไม่แสดงจนกว่าผู้ดูแลจะอนุมัติ.
ชื่อ: อีเมล์: