คำสั่งในการ 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] |
โอ๋ย ! เผลอพูดเรื่อง 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
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
นอกจากคำสั่ง 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( );
printf("The character you type is %c n",ch);
}
ขอให้ลองไปใช้กันดูโดยลองเปลี่ยนบรรทัดที่ 6 ของโปรแกรมข้างบนนี้เป็นทั้ง 3 แบบดูนะ อย่าเขียนทั้ง 3 แบบพร้อมๆกันหละเลือกเอาอันใดอันหนึ่งเท่านั้นนะ
OK. ขอสรุปช่วงนี้หน่อย ตอนนี้เรารู้จักวิธี แสดงข้อมูล และวิธีรับข้อมูล และได้รู้จัก array บ้างนิดหน่อยแล้ว ขอให้จดจำและสังเกตวิธีการใช้ อย่างแม่นยำและทดลองเขียนโปรแกรมเองให้มากๆ จึงจะจำและสามารถใช้ได้คล่อง จากประสบการณ์ที่เคยเป็น Teacher Assistance วิชา ที่มีการโปรแกรมภาษา C มาแล้วพบว่า ผู้ที่เรียนยังสับสนกับการใช้คำสั่ง printf ตรงที่ว่าจะต้องใส่ตัวแปรในคำสั่งด้วยหรือเปล่า หรือว่า ลืมใส่ %d %c เมื่อจำเป็นต้องใส่ อะไรทำนองเนี้ย ลองทบทวนดูนะข้างต้นเขียนไว้ละเอียดแล้วในระดับนึง ส่วนคำสั่ง scanf ก็จะมีปัญหากันมากเลย ตรงที่ลืมเครื่องหมาย & บ้าง หรือไปใส่เครื่องหมาย & ตรงที่ที่ไม่ควรใส่เช่นตรง array ของ character เนี่ยแหละที่เป็นปัญหาหากเราจะรับ string