בעיה מוזרה עם SCANF

harisson

New member
בעיה מוזרה עם SCANF

שלום! הפונקצייה משפת סי SCANF עושה לי בעיות... הבעייה היא שאני הפונקצייה אמורה לקלוט מספר שלם. כמובן שאם מכניסים מספר ממשי (שבר) הפונקצייה לא אמורה לפעול, ולהחזיר אפס, אבל מה שקורה הוא שהפונקצייה פועלת, מתבצעת פעולת קאסטינג ורק החלק השלם של המספר נקלט והפונקצייה מחזירה 1, ורק בפעם הבאה שאני מנסה להפעיל את הפונקצייה - הפונקצייה לא תפעל כלל ותחזיר 0... מה שקורה זה שבעצם הפונקצייה מגיבה לטעות רק בקריאה הבאה... למה זה קורה? מתן נ.ב. אל תנסו לחשוב למה אני לא מגדיר את הפונקציה לקבל מספר ממשי, זה הכל חלק מתרגיל בית...
 

תמר,

New member
לדעתי

זה קורה בגלל שבפעם הראשונה הפונקציה קוראת מספר שלם בלבד. ברגע שהיא נתקלת בתו שאינו שייך לעניין - היא מפסיקה את הקלט ועוברת לשלב הבא. ולכן, התו הבא שהיא תקלוט לאחר העיבוד הוא התו שבו הפסיקה, ז"א נקודה עשרונית
 

harisson

New member
אולי, אבל...

זה עדיין מוזר, הרי מה הקשר בין שתי הקריאות העוקבות לפונקצייה? כל קריאה אמורה להפעיל את הפונקצייה שקולדת קלט שהוקלד ע"י המשתמש, כלומר, אין קשר בין קריאה לקריאה וכל קריאה עומדת בפני עצמה... תודה בכל מקרה
מתן
 

תמר,

New member
ככה אתה חושב

אבל ה-buffering של הקלט עובד כך... מה לעשות. אולי צריך לרוקן את ה-buffer בין קריאה לקריאה
 

yair24

Member
ולדעתי

בשאלה מהסוג הזה חשוב לצרף קטע קוד כדי שנראה מה באמת קורה שם אל תשכח שהפונקציה SCANF מחכה לENTER הרבה פעמים זה גורם לבעיות שאתה לא מאמין בכלל שהם קשורות לבעיה שאתה מתאר גם תמר כתבה פה שיכול להיות שצריך לרוקן את הבאפר בקיצור תעלה קוד כדי שנוכל לראות יאיר
 

antidot

New member
מתוך MSDN

Return Value Both scanf and wscanf return the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned. The return value is EOF for an error or if the end-of-file character or the end-of-string character is encountered in the first attempt to read a character.​
Antid0t
 
למעלה