برای اینکه درگیر مشکلات
scanf نشید ازش استفاده نکنید.
چرا scanf گاهی اوقات رفتار عجیب دارد؟نمونهٔ زیر را ببینید.
زمانی که مشخصههای قالببندی (format specifier) که درون
scanf استفاده شده است به درستی با ورودی هماهنگ نشود اجرای تابع scanf با خطا روبه رو میشود که این مورد را میتوانید در مقدار بازگشتی آن که صفر است ببینید.
از طرفی مقدار خوانده شده از ورودی توسط تابع
scanf به درستی مصرف نمیشود و کماکان در بافر ورودی باقی میماند.
در اینجا اگر یکبار دیگر در ادامهٔ برنامه scanf فراخوانی شود آن مقدار به عنوان ورودی به تابع داده میشود.
در هر دو مورد میتوان برای جلوگیری از رفتار غیر قابل پیشبینی بررسی کنید اگر اجرای تابع scanf با خطا همراه بود بافر باقی مانده توسط getchar مصرف شود.
با توجه به عملکرد تابع fgets میتونید ورودی را به شکل خط به خط در یک بافر بخوانید سپس مقادیر لازم را از اون استخراج کنید.
fgets() reads in at most one less than size characters from stream and stores them into the
buffer pointed to by s. Reading stops after an EOF or a newline. If a newline is read, it
is stored into the buffer. A terminating null byte ('\0') is stored after the last charac‐
ter in the buffer.
در اینجا فایل خط به خط در یک بافر خوانده شده و سپس مقادیر لازم در هر خط در متغیرهای محلی ذخیره شده اند.