ปัญหาระบุว่าสิ่งที่จะทำงานหรือผลลัพธ์หาก scanf ตามด้วย fgets()/gets()/scanf()
fgets()/gets() ตามด้วย scanf()
ตัวอย่าง
#include<stdio.h> int main() { int x; char str[100]; scanf("%d", &x); fgets(str, 100, stdin); printf("x = %d, str = %s", x, str); return 0; }
ผลลัพธ์
Input: 30 String Output: x = 30, str =
คำอธิบาย
fgets() และ gets() ใช้ในการรับอินพุตสตริงจากผู้ใช้ในขณะทำงาน ฉันโค้ดด้านบนเมื่อเราเรียกใช้ ป้อนค่าจำนวนเต็ม จากนั้นมันจะไม่ใช้ค่าสตริงเพราะเมื่อเราให้ขึ้นบรรทัดใหม่หลังค่าจำนวนเต็ม จากนั้น fgets() หรือ gets() จะนำบรรทัดใหม่เป็นอินพุตแทนอินพุตที่ต้องการซึ่งก็คือ "สตริง" .
scanf() ตามด้วย scanf()
หากต้องการซ้ำ scanf() ตามด้วย scanf() เราสามารถใช้ลูปได้
ตัวอย่าง
#include<stdio.h> int main() { int a; printf("enter q to quit"); do { printf("\nenter a character and q to exit"); scanf("%c", &a); printf("%c\n", a); }while (a != ‘q’); return 0; }
ผลลัพธ์
Input: abq Output: enter q to quit enter a character and q to exita a enter a character and q to exit enter a character and q to exitb b enter a character and q to exit enter a character and q to exitq
คำอธิบาย
ที่นี่เราสามารถเห็นบรรทัดพิเศษ 'ป้อนอักขระและ q เพื่อออก' หลังจากขึ้นบรรทัดใหม่ นี่เป็นเพราะทุกครั้งที่ scanf() ทิ้งอักขระขึ้นบรรทัดใหม่ไว้ในบัฟเฟอร์ซึ่งเขากำลังอ่านต่อไป scanf() ตามด้วยมัน . เพื่อแก้ปัญหานี้ด้วยการใช้ '\n' กับตัวระบุประเภทใน scanf() เช่น scanf(“%c\n”); หรืออีกทางหนึ่งคือ เราสามารถใช้ extra getchar() หรือ scanf() เพื่ออ่านบรรทัดใหม่เพิ่มเติม