ผมอ่านในเดนนิสริตชี่ภาษา C Programmingหนังสือที่int
จะต้องนำมาใช้สำหรับตัวแปรที่จะถือ EOF - เพื่อทำให้มันมีขนาดใหญ่พอที่จะสามารถเก็บค่า EOF - char
ไม่ได้ แต่รหัสต่อไปนี้ทำงานได้ดี:
#include<stdio.h>
main() {
char c;
c=getchar();
while(c!=EOF) {
putchar(c);
c=getchar();
}
}
เมื่อไม่มีอินพุตให้getchar
ส่งคืน EOF และในโปรแกรมข้างต้นตัวแปรที่c
มีประเภทถ่านสามารถเก็บไว้ได้สำเร็จ
ทำไมจึงใช้งานได้ ตามคำอธิบายในหนังสือข้างต้นรหัสไม่ควรทำงาน
0xff
รหัสนี้มีแนวโน้มที่จะล้มเหลวถ้าคุณอ่านตัวอักษรที่มีค่า การจัดเก็บผลลัพธ์getchar()
ในการint
แก้ปัญหานั้น คำถามของคุณเหมือนกับคำถาม 12.1 ในคำถามที่พบบ่อย comp.lang.cซึ่งเป็นแหล่งข้อมูลที่ยอดเยี่ยม ( main()
ควรจะเป็นint main(void)
และจะไม่เจ็บที่จะเพิ่มreturn 0;
ก่อนปิด}
)