อินพุตและเอาต์พุต ภาษา C
เมื่อเราพูดว่า Input หมายถึงการป้อนข้อมูลลงในโปรแกรม อินพุตสามารถกำหนดได้ในรูปแบบของไฟล์หรือจากบรรทัดคำสั่ง การเขียนโปรแกรม C มีชุดของฟังก์ชันในตัวเพื่ออ่านอินพุตที่กำหนดและป้อนไปยังโปรแกรมตามความต้องการ
เมื่อเราพูดว่า Output หมายถึงการแสดงข้อมูลบางส่วนบนหน้าจอ เครื่องพิมพ์ หรือในไฟล์ใดๆ การเขียนโปรแกรม C มีชุดของฟังก์ชันในตัวเพื่อส่งออกข้อมูลบนหน้าจอคอมพิวเตอร์ ตลอดจนบันทึกเป็นข้อความหรือไฟล์ไบนารี
Standard Files
การเขียนโปรแกรม C ถือว่าอุปกรณ์ทั้งหมดเป็นไฟล์ ดังนั้นอุปกรณ์เช่นจอแสดงผลจึงถูกกำหนดในลักษณะเดียวกับไฟล์และไฟล์สามไฟล์ต่อไปนี้จะเปิดขึ้นโดยอัตโนมัติเมื่อโปรแกรมดำเนินการเพื่อให้สามารถเข้าถึงแป้นพิมพ์และหน้าจอได้
Standard File | File Pointer | Device |
---|---|---|
Standard input | stdin | Keyboard |
Standard output | stdout | Screen |
Standard error | stderr | Your screen |
ตัวชี้ไฟล์เป็นวิธีการเข้าถึงไฟล์เพื่อวัตถุประสงค์ในการอ่านและเขียน ส่วนนี้อธิบายวิธีการอ่านค่าจากหน้าจอและวิธีการพิมพ์ผลลัพธ์บนหน้าจอ
ฟังก์ชัน getchar() และ putchar()
getchar int (void) เป็นฟังก์ชันที่ใช้รับข้อมูลจากคีย์บอร์ดเพียง 1 ตัวอักขระ โดยการรับข้อมูลของฟังก์ชันนี้จะต้องกดแป้น enter ทุกครั้งที่ป้อนข้อมูลเสร็จ จึงทำให้เห็นข้อมูลที่ป้อนปรากฏบนจอภาพด้วย ถ้าต้องการนำข้อมูลที่ป้อนผ่านทางคีย์บอร์ดไปใช้งาน จะต้องกำหนดตัวแปรชนิด single character (char) ขึ้นมา 1 ตัว เพื่อเก็บค่าข้อมูลที่รับผ่านทางคีย์บอร์ด ในทางตรงกันข้ามถ้าไม่ต้องการใช้ข้อมูลที่ป้อนผ่านทางคีย์บอร์ดก็ไม่ต้องกำหนดตัวแปรชนิด char ขึ้นมา
int putchar (int c) เป็นฟังก์ชันที่ใช้ในการแสดงผลลัพธ์ออกจอภาพทีละ 1 ตัวอักขระ โดยลักษณะของฟังก์ชันนี้เป็นฟังก์ชันที่ต้องการ argument 1 ค่าที่เป็นข้อมูลชนิด single character (char) ตรวจสอบตัวอย่างต่อไปนี้ −
#include <stdio.h>
int main( ) {
int c;
printf( "Enter a value :");
c = getchar( );
printf( "\nYou entered: ");
putchar( c );
return 0;
}
เมื่อโค้ดด้านบนถูกคอมไพล์และรันแล้ว มันจะรอให้คุณป้อนข้อความ เมื่อคุณป้อนข้อความและกด Enter โปรแกรมจะดำเนินการและอ่านเพียงตัวอักษรเดียวและแสดงดังต่อไปนี้:
Enter a value : this is test
You entered: t
ฟังก์ชัน get() และ puts()
ฟังก์ชัน char *gets(char *s) จะอ่านบรรทัดจาก stdin ลงในบัฟเฟอร์ที่ชี้ไปที่ s จนกว่าจะมีการขึ้นบรรทัดใหม่หรือ EOF (สิ้นสุดไฟล์)
int puts(const char *s) ฟังก์ชั่นเขียนสตริง ‘s’ และ ” ต่อท้ายบรรทัดใหม่เพื่อ stdout
หมายเหตุ: แม้ว่ามันจะได้เลิกใช้ไปใช้งานที่ได้รับฟังก์ชัน () แทนการใช้ที่ได้รับคุณต้องการใช้ fgets ()
#include <stdio.h>
int main( ) {
char str[100];
printf( "Enter a value :");
gets( str );
printf( "\nYou entered: ");
puts( str );
return 0;
}
เมื่อโค้ดด้านบนถูกคอมไพล์และรันแล้ว มันจะรอให้คุณป้อนข้อความ เมื่อคุณป้อนข้อความและกด Enter จากนั้นโปรแกรมจะดำเนินการและอ่านอินพุตและแสดงดังนี้ −
Enter a value : this is test
You entered: this is test
ฟังก์ชัน scanf() และ printf()
int scanf(const char *format, …) ฟังก์ชั่นอ่านข้อมูลจากสตรีมใส่มาตรฐาน stdin และสแกนการป้อนข้อมูลที่เป็นไปตาม format ที่จัดไว้ให้
int printf(const char *format, …) ฟังก์ชั่นที่เขียนออกไปกระแสออกมาตรฐาน stdout และผลิตออกให้เป็นไปตามรูปแบบที่มีให้
format อาจจะเป็นสตริงคงเรียบง่าย แต่คุณสามารถระบุ % d, c%, F%% s ฯลฯ เพื่อพิมพ์หรืออ่าน strings, integer, character หรือ float ตามลำดับ มีตัวเลือกการจัดรูปแบบอื่นๆ อีกมากมายที่สามารถใช้ได้ตามความต้องการ เรามาดูตัวอย่างง่ายๆ เพื่อทำความเข้าใจแนวคิดกันดีกว่า −
#include <stdio.h>
int main( ) {
char str[100];
int i;
printf( "Enter a value :");
scanf("%s %d", str, &i);
printf( "\nYou entered: %s %d ", str, i);
return 0;
}
เมื่อโค้ดด้านบนถูกคอมไพล์และรันแล้ว มันจะรอให้คุณป้อนข้อความ เมื่อคุณป้อนข้อความและกด Enter จากนั้นโปรแกรมจะดำเนินการและอ่านอินพุตและแสดงดังนี้ −
Enter a value : seven 7
You entered: seven 7
ที่นี่ ควรสังเกตว่า scanf() ต้องการอินพุตในรูปแบบเดียวกับที่คุณระบุ %s และ %d ซึ่งหมายความว่าคุณต้องระบุอินพุตที่ถูกต้อง เช่น “string integer” หากคุณระบุ “string string” หรือ “integer integer” ระบบจะถือว่าอินพุตไม่ถูกต้อง ประการที่สอง ในขณะที่อ่านสตริง scanf() จะหยุดอ่านทันทีที่พบช่องว่าง ดังนั้น “this is test” เป็นสามสตริงสำหรับ scanf()