
02-12-2007, 18:01
|
|
|
|
חבר מתאריך: 30.07.05
הודעות: 949
|
|
אוקי, אז המקרה שלנו פה הוא קצת יותר מורכב: קודם כל אתה מקבל קלט כלשהו שהוא יכול להיות גם לא מספרי בכלל.
scanf יכולה להכשל - אם היא מקבלת קלט שהוא אינו הקלט המצופה היא פשוט לא קוראת אותו והוא נשאר ב-input buffer.
לכן כשאתה מנסה לקרוא שוב, אתה נכשל מאותה סיבה בדיוק.
אם הקריאה של scanf נכשלת, אתה צריך לנקות את ה-buffer ע"י קריאה של כולו לתוך שום דבר, לדוגמא.
אז מה אנחנו צריכים?
stdio.h מכילה את כל הפונק' שאנו נזדקק להן.
אנו נשתמש ב-scanf וב-getchar בשביל לטפל בבעיה שלנו.
נזכור שכל קלט נגמר למעשה בתו סיום השורה n\
קוד:
int num = -1; // Initialize to a negative number.
while (num < 0) { // This is why the initialization, at least make 1 iteration!
printf("Please enter a positive number: ");
if (scanf("%d", &num) != 1) // scanf returns the ammount of successful inputs it read.
while (getchar() != '\n'); // Clear the buffer, cool eh?
}
למה זה בעצם יעבוד?
כי scanf משנה את המשתנה שהיא מקבלת רק אם היא מצליחה, והיא מצליחה רק אם הקלט עונה על הציפיות שלה.
מה שאני עושה זה:
אני בודק האם הקלט הצליח, אם לא אני מנקה את ה-buffer ומנסה שוב.
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
נערך לאחרונה ע"י Dark Knight בתאריך 02-12-2007 בשעה 18:05.
|