การรับและแสดงผลข้อมูลของภาษา C อาจารย์สมเกียรติ ช่อเหมือน สาขาวิชาวิศวกรรมซอฟต์แวร์ คณะวิทยาศาสตร์และเทคโนโลยี (tko@webmail.npru.ac.th)
เนื้อหาที่สนใจ การรับและแสดงผลด้วยภาษาซี (Input & Output) การรับและแสดงผลไฟล์อุปกรณ์ (File I/O) ไฟล์มาตรฐานของอุปกรณ์รับและแสดงผล (Standard Files) การจัดการไฟล์ I/O และการป้อนข้อมูลและเอาท์พุทไฟล์ การเข้าถึงไฟล์ (File access) การเข้าถึงไฟล์โดยตรง (Direct input/output) การับและแสดงค่าแบบไม่จัดรูปแบบ (Unformatted input/output) การับและแสดงค่าแบบกำหนดรูปแบบ (Formatted input/output) การกำหนดตำแหน่งของไฟล์ (File positioning) การดำเนินการกับไฟล์ (Operations on files) ฟังก์ชันการรับและแสดงผลของภาษาซี http://1.bp.blogspot.com/-tw1caa8lBus/Vphe8RV3rwI/AAAAAAAAAKM/wAhp-ds7iQM/s1600/8.png
Input & Output การป้อนข้อมูล หมายถึง การนำข้อมูลบางอย่างเข้าสู่โปรแกรม การป้อนข้อมูล อาจรับเข้าจากไฟล์หรือการป้อนข้อมูลทีละชุด ภาษา C มีฟังก์ชั่น เพื่ออ่านอินพุตจากอุปกรณ์หรือไฟล์ไบนารี การส่งออกข้อมูล หมายถึง การแสดงผลข้อมูลบางอย่างบนหน้าจอ เครื่องพิมพ์หรือไฟล์ใด ๆ ภาษา C มีฟังก์ชั่น เพื่อส่งออกข้อมูลบนหน้าจอคอมพิวเตอร์และบันทึกไว้ในข้อความหรือไฟล์ไบนารี https://www.seas.upenn.edu/~cis1xx/resources/java/fileIO/introToFileIO.html
ไฟล์ (File) ไฟล์เป็นที่เก็บข้อมูลต่าง ๆ ของคอมพิวเตอร์ และในภาษา C นั้นไฟล์ก็จะมีความหมายรวมไปถึงอุปกรณ์ต่างๆ ที่ต่อกับเครื่องคอมพิวเตอร์ด้วย เช่น คีย์บอร์ด จอภาพ การติดต่อกับไฟล์จะต้องผ่านลิจิกคอลอินเตอร์เฟส (Logical Interfaces) ที่เรียกว่าสตรีม ไฟล์จะมีอยู่ 2 ประเภทคือ Text file เป็นไฟล์ของตัวอักษร เพราะมีโครงสร้างในการเก็บข้อมูลจะเป็นตัวอักษรไฟล์ ข้อมูลจะถูกแปลงเป็นเลขฐานสองตามมาตรฐาน Binary File เป็นไฟล์ที่เก็บข้อมูลที่อยู่ในรูปแบบต่างๆ File Table คือ ส่วนของหน่วยความจำที่เก็บข้อมูลต่าง ๆที่เกี่ยวกับไฟล์ http://basic-c.weebly.com/3611361936323648361636073586362935913652361536213660.html
Standard Files ภาษา C ถือว่าอุปกรณ์ทั้งหมดเป็นไฟล์ ดังนั้นอุปกรณ์ต่างๆ เช่น จอแสดงผลมีการแก้ไขในลักษณะเดียวกับไฟล์และแฟ้มดังตาราง Standard File File Pointer Device Standard input stdin Keyboard Standard output stdout Screen Standard error stderr Your screen https://developer.apple.com/library/content/documentation/DeviceDrivers/Conceptual/WritingAudioDrivers/AudioOnMacOSX/AudioOnMacOSX.html
การจัดการไฟล์ I/O การนำเข้าและส่งออกอุปกรณ์มาตรฐาน ภาษา C สร้างข้อความหรือไฟล์ไบนารีสำหรับการจัดเก็บข้อมูล ไฟล์ที่แสดงให้เห็นถึงลำดับของไบต์ โดยไม่คำนึงถึงแฟ้มข้อความหรือแฟ้มไบนารี จัดการไฟล์บนอุปกรณ์จัดเก็บข้อมูลผ่านการจัดการไฟล์ http://na5cent.blogspot.com/2015/01/java-stream.html
การป้อนข้อมูลและเอาท์พุทไฟล์ ภาษาซีการเขียนโปรแกรมภาษาซีมีฟังก์ชันไลบรารีมาตรฐานสำหรับการป้อนข้อมูลและเอาท์พุทไฟล์ เป็นกลุ่มของของไลบรารีมาตรฐาน <stdio.h> “portable I/O package” ฟังก์ชันการทำงาน I / O ของ C อยู่ในระดับค่อนข้างต่ำตามมาตรฐานใหม่ การดำเนินการไฟล์ทั้งหมด ดำเนินการกับสตรีม (Stream) ไบต์ ซึ่งเป็น “สตรีมอินพุต” หรือ “สตรีมเอาท์พุท” รูปแบบสตรีมไฟล์ I / O ได้รับความนิยมโดย Unix ซึ่งพัฒนาขึ้น
การเข้าถึงไฟล์ (File access) fopen เปิดไฟล์ (ด้วยชื่อไฟล์ที่ไม่ใช่ Unicode บน Windows และชื่อไฟล์ UTF-8 ที่เป็นไปได้ใน Linux) freopen เปิดไฟล์อื่นจากสตรีมที่มีอยู่ fflush เข้าจังหวะกับสตรีมข้อมูลขาออกพร้อมกับไฟล์จริง fclose ปิดไฟล์ setbuf ตั้งค่าบัฟเฟอร์สำหรับสตรีมไฟล์ setvbuf ตั้งค่าบัฟเฟอร์และขนาดของไฟล์สำหรับสตรีมไฟล์ fwide สลับการสตรีมไฟล์ระหว่าง I / O แบบกว้างและ I / O ที่แคบ http://www.studytonight.com/java/java-io-stream.php https://en.wikipedia.org/wiki/C_file_input/output#fseek
การเข้าถึงไฟล์โดยตรง (Direct input/output) fread อ่านค่าจากไฟล์ fwrite เขียนค่าลงไฟล์ #include <stdio.h> #include <string.h> int main(){ FILE *fp; char c[] = "this is tutorialspoint"; char buffer[100]; /* Open file for both reading and writing */ fp = fopen("file.txt", "w+"); /* Write data to the file */ fwrite(c, strlen(c) + 1, 1, fp); /* Seek to the beginning of the file */ fseek(fp, SEEK_SET, 0); /* Read and display data */ fread(buffer, strlen(c)+1, 1, fp); printf("%s\n", buffer); fclose(fp); return(0); }
การับและแสดงค่าแบบไม่จัดรูปแบบ (Unformatted input/output) fgetc getc fgetwc getwc อ่านไบต์ หรือ wchar_t จากไฟล์สตรีม fgets fgetws อ่านบรรทัด byte / wchar_t จากไฟล์สตรีม fputc putc fputwc putwc เขียนไบต์ / wchar_t เป็นสตรีมไฟล์ fputs fputws เขียนสตริงไบต์ / wchar_t เป็นสตรีมไฟล์ getchar getwchar อ่านไบต์ / wchar_t จาก stdin gets N/A อ่านสตริงไบต์จาก stdin จนกว่าจะพบบรรทัดใหม่หรือจุดสิ้นสุดของไฟล์ (เลิกใช้ใน C99 แล้วนำออกจาก C11) putchar putwchar เขียนไบต์ / wchar_t เป็น stdout puts เขียนสตริงไบต์เป็น stdout ungetc ungetwc ทำให้ไบต์ / wchar_t กลับเข้าสู่สตรีมไฟล์
การับและแสดงค่าแบบกำหนดรูปแบบ (Formatted input/output) scanf fscanf sscanf wscanf fwscanf swscanf อ่านรูปแบบไบต์ / wchar_t input จาก stdin, ไฟล์สตรีมหรือบัฟเฟอร์ vscanf vfscanf vsscanf vwscanf vfwscanf vswscanf อ่านไบต์อินพุต / wchar_t จากดิสก์ ไฟล์สตรีมหรือบัฟเฟอร์โดยใช้อาร์กิวเมนต์ตัวแปร printf fprintf sprintf snprintf wprintf fwprintf swprintf พิมพ์รูปแบบไบต์ / wchar_t เอาท์พุทเป็น stdout, ไฟล์สตรีมหรือบัฟเฟอร์ vprintf vfprintf vsprintf vsnprintf vwprintf vfwprintf vswprintf พิมพ์รูปแบบไบต์ / wchar_t ส่งออกไปยัง stdout ไฟล์สตรีมหรือบัฟเฟอร์โดยใช้อาร์กิวเมนต์ตัวแปร perror N/A เขียนคำอธิบายของข้อผิดพลาดปัจจุบันในไฟล์ stderr
การกำหนดตำแหน่งของไฟล์ (File positioning) ftell ftello แสดงตัวบ่งชี้ตำแหน่งไฟล์ปัจจุบัน fseek fseeko ย้ายตัวบ่งชี้ตำแหน่งไฟล์ไปยังตำแหน่งที่ตั้งเฉพาะในไฟล์ fgetpos รับตัวบ่งชี้ตำแหน่งของไฟล์ fsetpos rewind ย้ายตัวบ่งชี้ตำแหน่งของไฟล์ไปยังจุดเริ่มต้นในไฟล์ https://rossofenice.com/
การจัดการข้อผิดพลาด (Error handling) #include <stdio.h> int main (){ FILE *fp; int c; fp = fopen("file.txt","r"); if(fp == NULL) { perror("Error in opening file"); return(-1); } while(1) c = fgetc(fp); if( feof(fp)) { break ; } printf("%c", c); fclose(fp); return(0); clearerr ล้างข้อผิดพลาด feof ตรวจสอบจุดสิ้นสุดของไฟล์ ferror ตรวจสอบข้อผิดพลาดของไฟล์ https://fivera.net/hatom-feed-hatom-entry-error-wordpress-solution/
การดำเนินการกับไฟล์ (Operations on files) remove ลบไฟล์ rename เปลี่ยนชื่อไฟล์ tmpfile ส่งกลับตัวชี้ไปยังแฟ้มชั่วคราว tmpnam ส่งคืนชื่อไฟล์ที่ไม่ซ้ำกัน #include <stdio.h> #include <string.h> int main (){ int ret; FILE *fp; char filename[] = "file.txt"; fp = fopen(filename, "w"); fprintf(fp, "%s", "This is tutorialspoint.com"); fclose(fp); ret = remove(filename); if(ret == 0) { printf("File deleted successfully"); } else printf("Error: unable to delete the file"); return(0);
ฟังก์ชัน getchar() ฟังก์ชันอ่านตัวอักษรจากหน้าจอและส่งกลับมาเป็นจำนวนเต็ม ฟังก์ชันนี้จะอ่านเพียงตัวเดียว ฟังก์ชัน getche() และ getch() มีรูปแบบดังนี้ #include <stdio.h> int main (){ char c; printf("Enter character: "); c = getchar(); printf("Character entered: "); putchar(c); return(0); } https://www.tutorialspoint.com/cprogramming/c_input_output.htm
ฟังก์ชัน putchar() การแสดงผลตัวอักษรหรืออักขระ ( char ) ออกทางหน้าจอ โดยคำสั่งนั้นคือ คำสั่ง putchar() #include <stdio.h> int main (){ char ch; for(ch = 'A' ; ch <= 'Z' ; ch++) { putchar(ch); } return(0);
ฟังก์ชัน gets() ฟังก์ชัน gets() ใช้สำหรับข้อมูลชนิดสตริงก์หรือข้อความซึ่งป้อนทางแป้นพิมพ์ โดยมีรูปแบบดังนี้ #include <stdio.h> int main() { char str[50]; printf("Enter a string : "); gets(str); printf("You entered: %s", str); return(0); }
ฟังก์ชัน puts() ฟังก์ชัน puts() ใช้สำหรับแสดงข้อความทางหน้าจอ โดยมีรูปแบบดังนี้ #include <stdio.h> #include <string.h> int main(){ char str1[15]; char str2[15]; strcpy(str1, "tutorialspoint"); strcpy(str2, "compileonline"); puts(str1); puts(str2); return(0); }
ฟังก์ชัน printf() ฟังก์ชันที่ใช้ในการแสดงผลข้อมูลออกทางจอภาพ มีรูปแบบดังนี้ ตัวอย่าง printf(“i = %d \n”,i); ภายใน “” จะมีเครื่องหมาย % อยู่ตาม Format Code และแสดงค่าที่กำหนดหลังเครื่องหมาย , http://www.comnetsite.com/c-programming-tip21.php
ฟังก์ชัน scanf() ฟังก์ชันที่ใช้ในการแสดงผลข้อมูลออกทางจอภาพ ฟังก์ชัน scanf จำเป็นต้องใส่ Format Code ไว้ในเครื่องหมาย “” ระบุตัวแปรที่ใช้รับข้อมูล โดยใช้เครื่องหมาย & หน้าตัวแปร ยกเว้นอาร์เรย์ ดังตัวอย่าง http://www.comnetsite.com/c-programming-tip21.php
การจัดการไฟล์ I/O Opening Files Closing a File Writing a File Reading a File http://na5cent.blogspot.com/2015/01/java-stream.html
การเปิด-ปิดไฟล์ (Opening Files) #include <stdio.h> #include <stdlib.h> int main(){ FILE * fp; fp = fopen ("file.txt", "w+"); fprintf(fp, "%s %s %s %d", "We", "are", "in", 2560); fclose(fp); return(0); } r - open for reading w - open for writing (file need not exist) a - open for appending (file need not exist) r+ - open for reading and writing, start at beginning w+ - open for reading and writing (overwrite file) a+ - open for reading and writing (append if file exists)
การเขียนไฟล์ (Writing a File) FILE *fp; fp=fopen("c:\\test.txt", "w"); fprintf(fp, "Testing...\n"); int fgetc (FILE *fp); int fputc( int c, FILE *fp ); FILE *fp; fp=fopen("c:\\test.bin", "wb"); char x[10]="ABCDEFGHIJ"; fwrite(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), fp); http://www.cprogramming.com/tutorial/cfileio.html
การอ่านไฟล์ (Reading a File) FILE* fp; char buffer[255]; fp = fopen("file.txt", "r"); while(fgets(buffer, 255, (FILE*) fp)) { printf("%s\n", buffer); } fclose(fp);
สรุป การเขียนโปรแกรมภาษาซีมีฟังก์ชันไลบรารีมาตรฐานสำหรับการป้อนข้อมูลและแสดงผลข้อมูลเป็นกลุ่มของของไลบรารีมาตรฐาน <stdio.h> การอ่านเขียนไฟล์ดำเนินการกับสตรีมไบต์ เพื่อให้ควบคุมการรับและแสดงผลข้อมูลจากอุปกรณ์ต่างๆ หรือจัดเก็บไฟล์ข้อมูล ฟังก์ชันในการอ่านค่าและเขียนค่าของอุปกรณ์ เช่น printf() scanf() ที่นิยมนำมาใช้ในการรับค่าของข้อมูลประเภทต่างๆ ได้ การอ่านเขียนไฟล์ของอุปกรณ์ I/O ผ่านฟังก์ชันในการอ่านไฟล์ เขียนไฟล์ รวมถึง การจัดการกับไฟล์และข้อผิดพลาดที่เกิดขึ้นได้