פורום קהילת הסטודנטים בטכניון

טכניוני => עזרה בפיתרון תרגילים => נושא נשלח על ידי: snorlax על נובמבר 09, 2012, 23:07:42 PM

כותרת: שאלת נוב במבוא למדמח
תגובה על ידי: snorlax על נובמבר 09, 2012, 23:07:42 PM
אני צריך לקלוט מספר ללא סימן גדול ממש מ-2,
יש דרך לקלוט עם scanf מספר unsigned int ולוודא שבאמת נקלט מספר כזה? כי זה ללא ממש עובד לי

קוד: [Select]
unsigned int x = 0;
scanf("%u", &x);
while (x <= 2 ) {
  scanf("%u", &x);
}

יש עם זה 2 בעיות:
אם מכניסים תו כלשהו שהוא לא מספר יש לולאה אינסופית (הוא נשאר בSTDIN וכל פעם הSCANF לא באמת קולט?)
ואם מכניסים למשל -1 אז זה כן עובר  :?
כותרת: בעניין: שאלת נוב במבוא למדמח
תגובה על ידי: radagast על נובמבר 09, 2012, 23:12:50 PM
בעיה עם scanf... הייתי מציע לך לקלוט מחרוזת, כך שזה תמיד יעבוד, ואז לבדוק האם זה מתאים.
כנראה שיש דרכים אחרות.
כותרת: בעניין: שאלת נוב במבוא למדמח
תגובה על ידי: פרומתאוס על נובמבר 10, 2012, 01:13:53 AM
אם המספר לא גרנדיוזי תקלוט עם char, חיובי בהגדרה.
כותרת: בעניין: שאלת נוב במבוא למדמח
תגובה על ידי: Mr.T על נובמבר 10, 2012, 18:01:07 PM
אתה בטוח שיכול להיות קלט שהוא לא מספר?  בד"כ במבוא די מגבילים את הקלטים
כותרת: בעניין: שאלת נוב במבוא למדמח
תגובה על ידי: ohad על נובמבר 10, 2012, 19:02:29 PM
scanf מחזיר את מספר הארגומנטים שהוא קלט בהצלחה או 1- במקרה של כישלון.
לכן בדיקה כזו אמורה לעבוד:
קוד: [Select]
int check;
unsigned int x;
check = scanf("%u", x);
while (check=!1)
check = scanf("%u", x);