710130 07 inout

Page 1

การรับและแสดงผลข้อมูลของภาษา 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/introToFileI


ไฟล์ (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/AudioOn


การจัดการไฟล์ 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 freopen fflush fclose setbuf setvbuf fwide

เปิดไฟล์ (ด้วยชื่อไฟล์ที่ไม่ใช่ Unicode บน Windows และชื่อไฟล์ UTF-8 ที่เป็นไปได้ใน Linux) เปิดไฟล์อื่นจากสตรีมที่มีอยู่ เข้าจังหวะกับสตรีมข้อมูลขาออกพร้อมกับไฟล์จริง ปิดไฟล์ ตั้งค่าบัฟเฟอร์สาหรับสตรีมไฟล์ ตั้งค่าบัฟเฟอร์และขนาดของไฟล์สาหรับสตรีมไฟล์ สลับการสตรีมไฟล์ระหว่าง 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 fgets fputc putc fputs

fgetwc getwc fgetws fputwc putwc fputws

getchar

getwchar

อ่านไบต์ / wchar_t จาก stdin

gets

N/A

อ่านสตริงไบต์จาก stdin จนกว่าจะพบบรรทัดใหม่หรือจุดสิ้นสุด ของไฟล์ (เลิกใช้ใน C99 แล้วนาออกจาก C11)

putchar puts ungetc

putwchar N/A ungetwc

เขียนไบต์ / wchar_t เป็น stdout เขียนสตริงไบต์เป็น stdout ทาให้ไบต์ / wchar_t กลับเข้าสู่สตรีมไฟล์

อ่านไบต์ หรือ wchar_t จากไฟล์สตรีม อ่านบรรทัด byte / wchar_t จากไฟล์สตรีม

เขียนไบต์ / wchar_t เป็นสตรีมไฟล์ เขียนสตริงไบต์ / wchar_t เป็นสตรีมไฟล์


การับและแสดงค่าแบบกาหนดรูปแบบ (Formatted input/output) scanf fscanf sscanf vscanf vfscanf vsscanf printf fprintf sprintf snprintf vprintf vfprintf vsprintf vsnprintf perror

wscanf fwscanf swscanf vwscanf vfwscanf vswscanf

อ่านรูปแบบไบต์ / wchar_t input จาก stdin, ไฟล์สตรีมหรือบัฟเฟอร์ อ่านไบต์อินพุต / wchar_t จากดิสก์ ไฟล์สตรีมหรือบัฟเฟอร์โดยใช้อาร์กิวเมนต์ ตัวแปร

wprintf fwprintf swprintf

พิมพ์รูปแบบไบต์ / wchar_t เอาท์พุทเป็น stdout, ไฟล์สตรีมหรือบัฟเฟอร์

vwprintf vfwprintf vswprintf

พิมพ์รูปแบบไบต์ / wchar_t ส่งออกไปยัง stdout ไฟล์สตรีมหรือบัฟเฟอร์โดยใช้ อาร์กิวเมนต์ตัวแปร

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); }

clearerr feof ferror

ล้างข้อผิดพลาด ตรวจสอบจุดสิ้นสุดของไฟล์ ตรวจสอบข้อผิดพลาดของไฟล์

while(1) { c = fgetc(fp); if( feof(fp)) { break ; } printf("%c", c); } fclose(fp); return(0); }

https://fivera.net/hatom-feed-hatom-entry-error-wordpress-


การดาเนินการกับไฟล์ (Operations on files) #include <stdio.h> #include <string.h>

remove rename tmpfile tmpnam

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-programmingtip21.php


ฟังก์ชัน scanf() • ฟังก์ชันที่ใช้ในการแสดงผลข้อมูลออกทางจอภาพ • ฟังก์ชัน scanf จาเป็นต้องใส่ Format Code ไว้ในเครื่องหมาย “” • ระบุตัวแปรที่ใช้รับข้อมูล โดยใช้เครื่องหมาย & หน้าตัวแปร ยกเว้น อาร์เรย์ ดังตัวอย่าง

http://www.comnetsite.com/c-programmingtip21.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>

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 int main(){ beginning FILE * fp; w+ - open for reading and writing (overwrite file) fp = fopen ("file.txt", "w+");a+ - open for reading and writing (append if file exists) fprintf(fp, "%s %s %s %d", "We", "are", "in", 2560);

fclose(fp); return(0); }


การเขียนไฟล์ (Writing a File) FILE *fp; • FILE *fp; fp=fopen("c:\\test.bin", "wb"); • fp=fopen("c:\\test.txt", "w"); char x[10]="ABCDEFGHIJ"; • fprintf(fp, "Testing...\n"); fwrite(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), fp);

• int fgetc (FILE *fp); • int fputc( int c, FILE *fp );

http://www.cprogramming.com/tutorial/cfilei


การอ่านไฟล์ (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 ผ่านฟังก์ชันในการอ่านไฟล์ เขียนไฟล์ รวมถึง การจัดการกับไฟล์และข้อผิดพลาดที่เกิดขึ้นได้


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.