ฉันมีโปรแกรมต่อไปนี้:
int main(int argc, char *argv[])
{
int a, b;
char c1, c2;
printf("Enter something: ");
scanf("%d",&a); // line 1
printf("Enter other something: ");
scanf("%d", &b); // line 2
printf("Enter a char: ");
scanf("%c",&c1); // line 3
printf("Enter another char: ");
scanf("%c", &c2); // line 4
printf("Done"); // line 5
system("PAUSE");
return 0;
}
ตามที่ฉันอ่านในหนังสือ C ผู้เขียนบอกว่าscanf()
ทิ้งอักขระบรรทัดใหม่ไว้ในบัฟเฟอร์ดังนั้นโปรแกรมจึงไม่หยุดที่บรรทัดที่ 4 เพื่อให้ผู้ใช้ป้อนข้อมูล แต่จะเก็บอักขระบรรทัดใหม่ใน c2 และย้ายไปที่ บรรทัดที่ 5.
นั่นถูกต้องใช่ไหม?
อย่างไรก็ตามสิ่งนี้เกิดขึ้นเฉพาะกับchar
ประเภทข้อมูลหรือไม่ เพราะฉันไม่พบปัญหานี้กับint
ชนิดข้อมูลในบรรทัดที่ 1, 2, 3 ใช่หรือไม่
fflush(stdin)
สามารถใช้ก่อนการเรียกใช้scanf()
สำหรับอักขระเดี่ยว โปรดอ่านการใช้fflush(stdin)
เพื่ออภิปรายข้อดีข้อเสียและทางเลือกอื่น ๆ ของวิธีการนั้น (ซึ่งใช้ได้ผลไม่มากก็น้อยบน Windows และใช้ไม่ได้กับที่อื่น ๆ ส่วนใหญ่)