- 1 1. บทนำ
- 2 2. Standard Input คืออะไร
- 3 3. พื้นฐานการใช้ Standard Input ในภาษา C
- 4 4. การเขียน Standard Input ที่ปลอดภัย
- 5 5. การประมวลผล Standard Input ขั้นสูง
- 6 6. ปัญหาที่พบบ่อยและวิธีแก้ไข
- 7 7. ตัวอย่างโปรแกรมที่ใช้ Standard Input
- 8 8. บทสรุป
1. บทนำ
ในการเรียนรู้ภาษา C ฟังก์ชัน “Standard Input” ถือเป็นสิ่งสำคัญที่หลีกเลี่ยงไม่ได้ การเข้าใจและจัดการ Standard Input อย่างถูกต้องและปลอดภัย จะช่วยเพิ่มความยืดหยุ่นและความน่าเชื่อถือของโปรแกรมได้อย่างมาก
บทความนี้จะอธิบายเชิงระบบตั้งแต่พื้นฐานจนถึงการประยุกต์ใช้ Standard Input ในภาษา C พร้อมตัวอย่างโค้ด เพื่อให้ผู้เริ่มต้นสามารถทำความเข้าใจได้ง่าย และนำไปใช้พัฒนาโปรแกรมของตนเอง
ความสำคัญของ Standard Input
Standard Input คือกลไกพื้นฐานที่โปรแกรมใช้ในการรับข้อมูลจากภายนอก ตัวอย่างเช่น ใช้ในสถานการณ์ดังนี้:
- แอปพลิเคชันคำนวณที่ใช้ค่าตัวเลขที่ผู้ใช้ป้อน
- ฟังก์ชันค้นหาที่ใช้ข้อความ
- โปรแกรมที่ทำงานแบบไดนามิกตามคำสั่งจาก Command Line
ในกรณีเหล่านี้ การจัดการ Standard Input อย่างถูกต้อง จะช่วยให้สร้างโปรแกรมที่มีประสิทธิภาพและปลอดภัยมากขึ้น
สิ่งที่จะได้เรียนรู้จากบทความนี้
บทความนี้จะครอบคลุมเนื้อหาดังต่อไปนี้:
- กลไกพื้นฐานของ Standard Input และวิธีการใช้งานในภาษา C
- การใช้ฟังก์ชัน
scanf
และfgets
- การเขียน Standard Input ที่ปลอดภัยและน่าเชื่อถือ
- เทคนิคการประมวลผลข้อมูลขั้นสูง
- ปัญหาที่พบบ่อยและวิธีแก้ไข
ผู้อ่านเป้าหมาย
- ผู้เริ่มต้นที่กำลังเรียนรู้ภาษา C
- โปรแกรมเมอร์ที่ยังไม่มั่นใจในการใช้ Standard Input
- ผู้ที่ต้องการพัฒนาโปรแกรมให้มีการจัดการข้อมูลนำเข้าที่ปลอดภัยและมีประสิทธิภาพ
2. Standard Input คืออะไร
ในภาษา C, Standard Input คือกลไกพื้นฐานที่โปรแกรมใช้ในการรับข้อมูลจากภายนอก ซึ่งเป็นส่วนหนึ่งของ “Standard I/O” โดยปกติจะรับข้อมูลผ่าน Terminal หรือ Command Line ส่วนนี้จะอธิบายแนวคิดและบทบาทของ Standard Input
คำจำกัดความของ Standard Input
Standard Input (stdin) คือ Data Stream ที่ใช้สำหรับรับข้อมูลจากภายนอก ในภาษา C สามารถจัดการได้ง่ายผ่านไลบรารี stdio.h
- โดยทั่วไป ข้อมูลจะถูกป้อนจากแป้นพิมพ์
- ข้อมูลที่รับเข้ามาจะถูกประมวลผลในโปรแกรม และส่งผลลัพธ์ออกไปยัง Standard Output
โครงสร้าง Standard I/O
ในภาษา C จะมี Standard Stream 3 ประเภทหลักดังนี้:
- Standard Input (stdin): ใช้สำหรับรับข้อมูลจากภายนอก
- Standard Output (stdout): ใช้สำหรับแสดงผลลัพธ์ของโปรแกรม
- Standard Error Output (stderr): ใช้สำหรับแสดงข้อความ Error
ตัวอย่างการทำงานจริง
ตัวอย่างนี้เป็นโปรแกรมง่ายๆ ที่รับค่าตัวเลขจาก Standard Input และแสดงผลทาง Standard Output
#include <stdio.h>
int main() {
int number;
printf("กรุณาป้อนตัวเลข: ");
scanf("%d", &number); // อ่านค่าจำนวนเต็มจาก Standard Input
printf("ค่าที่ป้อนคือ: %d\n", number); // แสดงผลออกทาง Standard Output
return 0;
}
บทบาทและความสำคัญของ Standard Input
Standard Input ถูกใช้งานในโปรแกรมลักษณะต่างๆ เช่น:
- โปรแกรมประมวลผลข้อมูล: ป้อนตัวเลขหรือข้อความเพื่อนำไปคำนวณหรือวิเคราะห์
- แอปพลิเคชันแบบ Interactive: รับคำสั่งจากผู้ใช้เพื่อเปลี่ยนการทำงานของโปรแกรม
- การจัดการข้อมูลแบบไดนามิก: ใช้ข้อมูลที่ผู้ใช้ป้อนเพื่อดำเนินการแบบ Real-time
ข้อดีของ Standard Input
- ความยืดหยุ่น: รองรับการป้อนข้อมูลจากแป้นพิมพ์, Pipe หรือ Redirection
- ความสะดวก: ใช้ฟังก์ชันในตัวเช่น
scanf
และfgets
เพื่อจัดการข้อมูลได้ง่าย
3. พื้นฐานการใช้ Standard Input ในภาษา C
ภาษา C มีฟังก์ชันหลายตัวที่ใช้รับข้อมูลจากผู้ใช้ผ่าน Standard Input ที่ใช้บ่อยที่สุดคือ scanf
และ fgets
ส่วนนี้จะแนะนำวิธีใช้งานและคุณสมบัติของแต่ละฟังก์ชันพร้อมตัวอย่าง
การใช้ฟังก์ชัน scanf
scanf
ใช้ในการอ่านข้อมูลตาม Format ที่กำหนดและเก็บไว้ในตัวแปร
โครงสร้างพื้นฐาน
int scanf(const char *format, ...);
format
: String ที่ระบุรูปแบบของข้อมูล...
: Address ของตัวแปรที่เก็บค่าที่ป้อนเข้ามา
Specifier ที่ใช้บ่อย
Specifier | คำอธิบาย | ตัวอย่าง |
---|---|---|
%d | จำนวนเต็ม (Integer) | 42 |
%f | จำนวนทศนิยม (Float) | 3.14 |
%c | อักขระ 1 ตัว | A |
%s | สตริง (String) | Hello |
ตัวอย่างการใช้งาน
#include <stdio.h>
int main() {
int age;
printf("กรุณาป้อนอายุ: ");
scanf("%d", &age); // อ่านค่าจำนวนเต็ม
printf("อายุที่ป้อนคือ: %d\n", age);
return 0;
}
ข้อควรระวัง
- หากข้อมูลที่ป้อนมาไม่ตรงกับ Format จะเกิด Error
- เพื่อป้องกัน Buffer Overflow ควรกำหนดขนาดการอ่าน เช่น
%s
การใช้ฟังก์ชัน fgets
fgets
ใช้สำหรับอ่าน String แบบทีละบรรทัด และถือว่าปลอดภัยกว่า scanf
โครงสร้างพื้นฐาน
char *fgets(char *str, int n, FILE *stream);
str
: Array ที่ใช้เก็บข้อมูลที่อ่านมาn
: จำนวนอักขระสูงสุดที่อ่านได้ (รวม ‘\0’)stream
: แหล่งข้อมูล (ปกติคือstdin
)
ตัวอย่างการใช้งาน
#include <stdio.h>
int main() {
char name[50];
printf("กรุณาป้อนชื่อ: ");
fgets(name, 50, stdin); // อ่านได้สูงสุด 49 ตัวอักษร
printf("ชื่อที่ป้อนคือ: %s", name);
return 0;
}
ข้อควรระวัง
- ถ้าข้อมูลที่ป้อนยาวเกิน Buffer ส่วนที่เกินจะถูกตัดทิ้ง
- อาจมีอักขระ ‘\n’ อยู่ใน String ต้องลบออกเอง
วิธีลบอักขระขึ้นบรรทัดใหม่
name[strcspn(name, "\n")] = '\0';
การเปรียบเทียบระหว่าง scanf
และ fgets
คุณสมบัติ | scanf | fgets |
---|---|---|
การใช้งาน | อ่านค่าตามรูปแบบที่กำหนด (ตัวเลข/ข้อความ) | อ่าน String ทีละบรรทัด |
ความปลอดภัย | มีความเสี่ยง Buffer Overflow | ควบคุมขนาด Buffer ได้ |
ความยืดหยุ่น | สามารถกำหนด Format ได้ | อ่านข้อมูลทั้งหมดเป็น String |
ควรเลือกใช้แบบใด?
- ใช้
scanf
: เมื่ออยากได้ค่าตัวเลขหรือข้อมูลที่มีรูปแบบเฉพาะ - ใช้
fgets
: เมื่อต้องการความปลอดภัย และจัดการ String ที่ยาวหรือซับซ้อน
4. การเขียน Standard Input ที่ปลอดภัย
การจัดการ Standard Input ในภาษา C อย่างปลอดภัยเป็นสิ่งสำคัญมาก เพราะการรับข้อมูลไม่ถูกต้องอาจทำให้เกิด Buffer Overflow หรือ Undefined Behavior ได้ ส่วนนี้จะอธิบายวิธีเขียนที่ปลอดภัยพร้อมตัวอย่าง
การป้องกัน Buffer Overflow
scanf
ใช้ง่าย แต่หากไม่จำกัดขนาดการป้อน อาจเกิด Buffer Overflow
ตัวอย่างการจำกัดขนาด
#include <stdio.h>
int main() {
char input[10];
printf("กรุณาป้อนข้อความ (สูงสุด 9 ตัวอักษร): ");
scanf("%9s", input); // จำกัดสูงสุด 9 ตัวอักษร
printf("ข้อความที่ป้อนคือ: %s\n", input);
return 0;
}
ข้อสำคัญ
- กำหนดขนาดใน Format เช่น
%9s
เพื่อไม่ให้อ่านเกินขนาด Array
ใช้ fgets
เพื่อความปลอดภัย
fgets
สามารถกำหนดจำนวนอักขระที่อ่านได้ จึงช่วยลดความเสี่ยงจาก Buffer Overflow เหมาะกับข้อความยาวหรือ Input ที่ซับซ้อน
ตัวอย่างการใช้ fgets
#include <stdio.h>
#include <string.h>
int main() {
char buffer[20];
printf("กรุณาป้อนข้อความ: ");
fgets(buffer, sizeof(buffer), stdin); // อ่านได้สูงสุด 19 ตัวอักษร
buffer[strcspn(buffer, "\n")] = '\0'; // ลบอักขระขึ้นบรรทัดใหม่
printf("ข้อความที่ป้อนคือ: %s\n", buffer);
return 0;
}
ข้อสำคัญ
- ใช้
sizeof(buffer)
เพื่อให้กำหนดขนาดอัตโนมัติ - ใช้
strcspn
เพื่อลบ ‘\n’
การตรวจสอบความถูกต้องของข้อมูลนำเข้า
เพื่อความปลอดภัย ควรตรวจสอบข้อมูลที่ผู้ใช้ป้อนเข้ามา เช่น ถ้าคาดหวังให้ป้อนตัวเลข ก็ควรตรวจสอบก่อนนำไปใช้งาน
ตัวอย่างการตรวจสอบค่าตัวเลข
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main() {
char buffer[20];
long number;
char *endptr;
printf("กรุณาป้อนจำนวนเต็ม: ");
fgets(buffer, sizeof(buffer), stdin);
errno = 0; // รีเซ็ตสถานะ Error
number = strtol(buffer, &endptr, 10); // แปลง String เป็น Integer
if (errno != 0 || endptr == buffer || *endptr != '\0') {
printf("กรุณาป้อนจำนวนเต็มที่ถูกต้อง\n");
} else {
printf("จำนวนเต็มที่ป้อนคือ: %ld\n", number);
}
return 0;
}
ข้อสำคัญ
strtol
ช่วยตรวจจับ Error ขณะทำการแปลง- การใช้
errno
และendptr
ทำให้ตรวจสอบได้ว่าผลลัพธ์ถูกต้องหรือไม่
แนวทางที่ดีที่สุดในการจัดการ Error
การจัดการ Error จาก Input อย่างเหมาะสมคือกุญแจสำคัญในการสร้างโปรแกรมที่เชื่อถือได้
ตัวอย่างการตรวจสอบ Error
#include <stdio.h>
int main() {
int value;
printf("กรุณาป้อนจำนวนเต็ม: ");
if (scanf("%d", &value) != 1) { // ถ้าอ่านไม่สำเร็จ
printf("ข้อมูลที่ป้อนไม่ถูกต้อง\n");
return 1; // จบการทำงานพร้อม Error
}
printf("จำนวนเต็มที่ป้อนคือ: %d\n", value);
return 0;
}
ข้อสำคัญ
- ตรวจสอบค่าที่
scanf
คืนมา ถ้าไม่ตรงตามที่คาด ต้องทำ Error Handling
สรุปวิธีการรับ Input อย่างปลอดภัย
- ใช้
scanf
พร้อมระบุขนาดที่จำกัด - ใช้
fgets
สำหรับข้อความยาวหรือ Input แบบทีละบรรทัด - อย่าเชื่อถือ Input ของผู้ใช้ ตรวจสอบและจัดการ Error เสมอ
5. การประมวลผล Standard Input ขั้นสูง
หลังจากเข้าใจพื้นฐานแล้ว สามารถต่อยอดไปยังการประมวลผลขั้นสูง เพื่อจัดการข้อมูลที่ซับซ้อนขึ้น เช่น การป้อนข้อมูลหลายค่า หรือการจัดการช่องว่างและขึ้นบรรทัดใหม่
การรับข้อมูลหลายค่าพร้อมกัน
บ่อยครั้งที่ต้องอ่านข้อมูลหลายค่าในครั้งเดียว เช่น ตัวเลขหลายตัวที่คั่นด้วยช่องว่างหรือเครื่องหมายจุลภาค
ตัวอย่าง: ข้อมูลที่คั่นด้วยช่องว่าง
#include <stdio.h>
int main() {
int numbers[5];
printf("กรุณาป้อนจำนวนเต็ม 5 ค่า (คั่นด้วยช่องว่าง): ");
for (int i = 0; i < 5; i++) {
scanf("%d", &numbers[i]);
}
printf("ค่าที่ป้อนคือ: ");
for (int i = 0; i < 5; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
ตัวอย่าง: ข้อมูลที่คั่นด้วยเครื่องหมายจุลภาค
#include <stdio.h>
int main() {
int numbers[3];
printf("กรุณาป้อนจำนวนเต็ม 3 ค่า (คั่นด้วยเครื่องหมายจุลภาค): ");
scanf("%d,%d,%d", &numbers[0], &numbers[1], &numbers[2]);
printf("ค่าที่ป้อนคือ: %d, %d, %d\n", numbers[0], numbers[1], numbers[2]);
return 0;
}
การจัดการ Input ที่มีช่องว่างหรือการขึ้นบรรทัดใหม่
บางครั้งข้อมูลนำเข้ามีช่องว่างหรืออักขระขึ้นบรรทัดใหม่ ซึ่งต้องจัดการอย่างเหมาะสม
ตัวอย่าง: การจัดการบรรทัดใหม่
ใช้ fgets
เพื่ออ่านข้อมูลทั้งบรรทัด แล้วลบอักขระ ‘\n’
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
printf("กรุณาป้อนข้อความ: ");
fgets(input, sizeof(input), stdin);
input[strcspn(input, "\n")] = '\0'; // ลบอักขระบรรทัดใหม่
printf("ข้อความที่ป้อนคือ: %s\n", input);
return 0;
}
การจัดการ Input หลายบรรทัด
โปรแกรมบางประเภทต้องการรับข้อมูลทีละหลายบรรทัด เช่น การประมวลผลข้อความหรือการวิเคราะห์ข้อมูล
ตัวอย่าง: การอ่านหลายบรรทัดซ้ำๆ
#include <stdio.h>
int main() {
char line[100];
printf("กรุณาป้อนข้อความหลายบรรทัด (กด Ctrl+D เพื่อสิ้นสุด):\n");
while (fgets(line, sizeof(line), stdin) != NULL) {
printf("บรรทัดที่ป้อน: %s", line);
}
return 0;
}
การจัดการ Input แบบไดนามิก
ในบางกรณี ไม่ทราบจำนวนข้อมูลล่วงหน้า จึงต้องจัดการแบบวนลูปรับค่าไปเรื่อยๆ
ตัวอย่าง: การบวกรวมตัวเลขที่ไม่ทราบจำนวน
#include <stdio.h>
int main() {
int number, sum = 0;
printf("กรุณาป้อนจำนวนเต็ม (กด Ctrl+D เพื่อสิ้นสุด):\n");
while (scanf("%d", &number) == 1) {
sum += number;
}
printf("ผลรวมของจำนวนเต็มที่ป้อนคือ: %d\n", sum);
return 0;
}
สรุป
การจัดการ Input แบบขั้นสูงทำให้โปรแกรมสามารถรองรับข้อมูลที่ซับซ้อนขึ้น เช่น หลายค่า หลายบรรทัด หรือข้อมูลที่เปลี่ยนแปลงได้แบบไดนามิก การฝึกใช้เทคนิคเหล่านี้จะช่วยเพิ่มความยืดหยุ่นและความสามารถของโปรแกรม
6. ปัญหาที่พบบ่อยและวิธีแก้ไข
เมื่อใช้ Standard Input ในภาษา C ผู้เริ่มต้นมักเจอปัญหาหลายอย่าง ส่วนนี้จะสรุปปัญหาทั่วไปและวิธีแก้
ปัญหาและวิธีแก้ไขของ scanf
ปัญหา 1: การข้าม Input
บางครั้ง scanf
อ่านค่าตัวเลขแล้วทิ้งอักขระ ‘\n’ ไว้ ทำให้การอ่านครั้งต่อไปมีปัญหา
ตัวอย่าง
#include <stdio.h>
int main() {
int number;
char letter;
printf("กรุณาป้อนจำนวนเต็ม: ");
scanf("%d", &number);
printf("กรุณาป้อนอักษร: ");
scanf("%c", &letter); // จะอ่าน '\n' ที่เหลือแทน
printf("จำนวนเต็ม: %d, อักษร: %c\n", number, letter);
return 0;
}
วิธีแก้
ใส่ช่องว่างหน้า %c
เพื่อให้ข้าม ‘\n’
scanf(" %c", &letter);
ปัญหา 2: Buffer Overflow
หากป้อนข้อความยาวเกิน Buffer โปรแกรมอาจล่ม
ตัวอย่าง
char input[10];
scanf("%s", input); // ป้อนเกิน 10 ตัวจะ Overflow
วิธีแก้
ระบุขนาดสูงสุด
scanf("%9s", input);
หรือใช้ fgets
แทน
ปัญหาและวิธีแก้ไขของ fgets
ปัญหา 1: การจัดการอักขระขึ้นบรรทัดใหม่
fgets
จะเก็บอักขระ ‘\n’ ไว้ใน String ซึ่งอาจทำให้การเปรียบเทียบหรือประมวลผลผิดพลาด
ตัวอย่าง
char input[20];
fgets(input, sizeof(input), stdin);
if (strcmp(input, "yes") == 0) {
printf("Input คือ yes\n");
}
จริง ๆ แล้วค่าที่อ่านได้คือ "yes\n"
ทำให้เปรียบเทียบไม่ตรง
วิธีแก้
ลบ ‘\n’ ทิ้ง
input[strcspn(input, "\n")] = '\0';
การจัดการ Input ที่ไม่ถูกต้อง
ปัญหา 1: ป้อนข้อมูลผิดประเภท
เช่น คาดหวังจำนวนเต็ม แต่ผู้ใช้ป้อนข้อความ
ตัวอย่าง
int number;
scanf("%d", &number); // ถ้าป้อนข้อความจะ Error
วิธีแก้
ตรวจสอบความถูกต้องของ Input ก่อน
if (scanf("%d", &number) != 1) {
printf("Input ไม่ถูกต้อง\n");
while (getchar() != '\n'); // ล้าง Buffer
}
ปัญหาเกี่ยวกับการอ่านหลายบรรทัด
ปัญหา: ใช้ scanf
และ fgets
ร่วมกัน
หากใช้สลับกัน อาจเกิดปัญหาเพราะ scanf
จะไม่อ่าน ‘\n’ ทำให้ fgets
อ่าน ‘\n’ ที่เหลืออยู่แทน
สาเหตุ
หลังจากใช้ scanf
จะเหลืออักขระ ‘\n’ อยู่ใน Buffer
วิธีแก้
ล้าง Buffer หลังใช้ scanf
while (getchar() != '\n');
สรุป
การใช้ Standard Input ในภาษา C มีข้อควรระวังหลายอย่าง แต่ถ้าเข้าใจปัญหาและวิธีแก้ไข จะช่วยให้เขียนโปรแกรมได้ปลอดภัยและมีประสิทธิภาพ โดยเฉพาะการเลือกใช้ scanf
หรือ fgets
ให้เหมาะกับงาน

7. ตัวอย่างโปรแกรมที่ใช้ Standard Input
ส่วนนี้จะแสดงตัวอย่างโปรแกรมจริงที่ใช้ Standard Input ตั้งแต่พื้นฐานไปจนถึงการประยุกต์
ตัวอย่างที่ 1: คำนวณผลรวมและค่าเฉลี่ย
อ่านจำนวนเต็มหลายค่า แล้วหาผลรวมและค่าเฉลี่ย
#include <stdio.h>
int main() {
int numbers[100];
int count = 0, sum = 0;
float average;
printf("กรุณาป้อนจำนวนเต็มหลายค่า (กด Ctrl+D เพื่อสิ้นสุด):\n");
while (scanf("%d", &numbers[count]) == 1) {
sum += numbers[count];
count++;
}
if (count > 0) {
average = (float)sum / count;
printf("ผลรวม: %d, ค่าเฉลี่ย: %.2f\n", sum, average);
} else {
printf("ไม่มีข้อมูลที่ป้อน\n");
}
return 0;
}
ตัวอย่างที่ 2: โปรแกรมตรวจสอบคำกลับ (Palindrome)
ตรวจสอบว่า String ที่ป้อนเข้ามาเป็นคำกลับ (อ่านจากซ้ายไปขวาหรือขวาไปซ้ายก็เหมือนกัน) หรือไม่
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool isPalindrome(char str[]) {
int start = 0;
int end = strlen(str) - 1;
while (start < end) {
if (str[start] != str[end]) {
return false;
}
start++;
end--;
}
return true;
}
int main() {
char input[100];
printf("กรุณาป้อนข้อความ: ");
fgets(input, sizeof(input), stdin);
// ลบ '\n'
input[strcspn(input, "\n")] = '\0';
if (isPalindrome(input)) {
printf("ข้อความที่ป้อนเป็นคำกลับ\n");
} else {
printf("ข้อความที่ป้อนไม่ใช่คำกลับ\n");
}
return 0;
}
ตัวอย่างที่ 3: โปรแกรมประมวลผลข้อมูลรูปแบบ CSV
อ่านข้อมูลที่อยู่ในรูปแบบ CSV (Comma Separated Values) แล้วแยกแต่ละค่าออกมา
#include <stdio.h>
#include <string.h>
int main() {
char input[200];
char *token;
printf("กรุณาป้อนข้อมูลแบบ CSV: ");
fgets(input, sizeof(input), stdin);
// ลบ '\n'
input[strcspn(input, "\n")] = '\0';
// แยกข้อมูลด้วยเครื่องหมายจุลภาค
token = strtok(input, ",");
while (token != NULL) {
printf("ค่า: %s\n", token);
token = strtok(NULL, ",");
}
return 0;
}
ตัวอย่างที่ 4: โปรแกรมโต้ตอบ (Interactive) ที่รับ Input หลายครั้ง
รับข้อความจากผู้ใช้หลายครั้งและทำงานตาม Input ที่ป้อน จนกว่าผู้ใช้จะพิมพ์คำสั่ง exit
#include <stdio.h>
#include <string.h>
int main() {
char input[50];
printf("พิมพ์ 'exit' เพื่อออกจากโปรแกรม\n");
while (1) {
printf("กรุณาป้อนคำสั่ง: ");
fgets(input, sizeof(input), stdin);
// ลบ '\n'
input[strcspn(input, "\n")] = '\0';
if (strcmp(input, "exit") == 0) {
printf("จบการทำงานของโปรแกรม\n");
break;
} else {
printf("คำสั่งที่ป้อนคือ: %s\n", input);
}
}
return 0;
}
สรุป
จากตัวอย่างเหล่านี้ จะเห็นว่า Standard Input สามารถนำไปใช้สร้างโปรแกรมได้ทั้งแบบพื้นฐานและแบบโต้ตอบจริง การเข้าใจและเลือกใช้วิธีที่เหมาะสม จะช่วยให้โปรแกรมของคุณมีความยืดหยุ่นและใช้งานได้จริง
8. บทสรุป
บทความนี้ได้อธิบายการใช้ Standard Input ในภาษา C ตั้งแต่พื้นฐานจนถึงการประยุกต์ พร้อมทั้งวิธีการเขียนที่ปลอดภัย และตัวอย่างโปรแกรมจริง
ทบทวนความสำคัญของ Standard Input
- Standard Input คือกลไกพื้นฐานที่ทำให้โปรแกรมรับข้อมูลจากภายนอกได้
- ภาษา C มีฟังก์ชัน
scanf
และfgets
สำหรับรับค่า เช่น ตัวเลขและข้อความ
จุดสำคัญในการเขียน Input ที่ปลอดภัยและมีประสิทธิภาพ
- ป้องกัน Buffer Overflow
- ใช้
scanf
พร้อมกำหนดขนาด เช่น%9s
- ใช้
fgets
สำหรับข้อความยาวหรือการอ่านทีละบรรทัด
- ตรวจสอบความถูกต้องของ Input
- ใช้
strtol
หรือstrtod
เพื่อตรวจสอบ Error - เพิ่มการจัดการ Error เมื่อ Input ไม่ถูกต้อง
- การประยุกต์ใช้
- จัดการ Input หลายค่า หลายบรรทัด หรือข้อมูลที่เปลี่ยนแปลงได้
ขั้นตอนต่อไป
หลังจากเข้าใจ Standard Input แล้ว ควรเรียนรู้เพิ่มเติมในหัวข้อ:
- Standard Output และ Standard Error: สำหรับการพิมพ์ผลลัพธ์และข้อความ Error
- การทำงานกับไฟล์: ผสานการอ่านไฟล์เข้ากับ Standard Input
- การทำแบบฝึกหัดจริง: นำตัวอย่างไปปรับใช้กับโปรเจ็กต์ของคุณ
ข้อความถึงผู้อ่าน
Standard Input เป็นพื้นฐานสำคัญของภาษา C ที่แม้จะดูเรียบง่าย แต่ก็มีรายละเอียดลึกซึ้ง หากฝึกใช้ให้ถูกต้อง คุณจะสามารถพัฒนาโปรแกรมที่ปลอดภัย มีประสิทธิภาพ และพร้อมต่อยอดไปยังงานที่ซับซ้อนมากขึ้น