อยากทราบว่าพอจะมีทางแก้ไหมสำหรับ การป้อน Input ผิดชนิดข้อมูลซึ่งทำให้ได้ค่าที่ไม่ตรงตามต้องการ
ตัวอย่างเช่น
รับข้อมูลเป็นตัวเลข (%f) แต่ User ใส่เป็น String ("ab5cd43e12fg...") หรือ User ใส่เป็นสมการทางคณิตศาสตร์เช่น ("4/1")
ปล. ค่า Input ต้องเอาไปใช้คำนวณต่อไปและมีค่ามากกว่า 10 ครับ (1-inf)
ขออนุญาติลง Code นะครับ
ในเหตุการปกติ Normal case
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้main(){
float i; << ตัวแปร
float j=100; << ตัวแปรคู่กรณี
float k; << รับค่าคำนวณ
printf("Input = ");
scanf("%f",&i); << รับค่าเข้าตัวแปร
printf("Input = %f",i); << แสดงค่าของตัวแปรที่รับได้
k=i+j; << นำค่าที่รับมาคำนวณ
getch();
return 0;
} << Case นี้เป็นรูปแบบปกติครับ
ในเหตุการเกิดความผิดพลาดจากผู้ใช้ User Error case
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้main(){
char i[100]; << ตัวแปรต้องเปลี่ยนมาเป็นรูปแบบ String เพื่อเก็บค่ามาตรวจสอบ
float j=100; << ตัวแปรคู่กรณี
float k;
printf("Input = ");
scanf("%s",i); << รับค่าเข้าตัวแปรในรูปแบบ String
printf("Input = %s",i); << แสดงค่าของตัวแปรที่รับได้ในรูปแบบ String
k=i+j;<<เหตุการผิดปกติซึ่งเกิดจากผู้ใช้ทำให้ค่าที่ได้ไม่ถูกต้อง
getch();
return 0;
} << Case นี้เกิดจาก User Error ซึ่งเป็นคำถามของผมที่ต้องการแนวทางการแก้ไขครับ
แนวทางการแก้ไขเบื้องต้นที่ผมพอคิดได้
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้1. การตรวจสอบตัวแปร i หากตัวแปร i มีค่า = 123 ในรูปแบบ String จะทำอย่างไร?เพื่อให้ตัวแปรนี้มาอยู่ในรูปแบบ Float เพื่อพร้อมคำนวณ (ในรูปแบบที่ i มีค่า 0 - 9 ผมสามารถใช้ -48 เพื่อลบแล้วนำมาเป็นค่า int ได้แต่จนปัญญาเมื่อค่ามากกว่า 10 ครับ)
2. สร้างฟังก์ชันการตรวจจับคีย์บอร์ดให้ใส่ได้เฉพาะตัวเลขและทศนิยมเท่านั้น (ซึ่งทำไม่เป็นครับ)
ขอบคุณสำหรับทุกคำตอบครับ
รบกวนผู้รู้ภาษา C/C++ กับโปรแกรม DevC++
ตัวอย่างเช่น
รับข้อมูลเป็นตัวเลข (%f) แต่ User ใส่เป็น String ("ab5cd43e12fg...") หรือ User ใส่เป็นสมการทางคณิตศาสตร์เช่น ("4/1")
ปล. ค่า Input ต้องเอาไปใช้คำนวณต่อไปและมีค่ามากกว่า 10 ครับ (1-inf)
ขออนุญาติลง Code นะครับ
ในเหตุการปกติ Normal case
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
ในเหตุการเกิดความผิดพลาดจากผู้ใช้ User Error case
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
แนวทางการแก้ไขเบื้องต้นที่ผมพอคิดได้
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
ขอบคุณสำหรับทุกคำตอบครับ