פורסם 2011 בדצמבר 114 שנים היה לי תרגיל בית שבו הייתי אמור למצוא את ספרת הביקורת בתעודת הזהות הישראלית. (רקע כללי ולא חשוב...)פתרתי את התרגיל ע"י לולאת for שבתוכה היתה פונקציית ה-scanf. לא חשבתי על כך שלאחר כל סיפרה מהתעודת זהות שהמשתמש יקיש הוא גם יצטרך ללחוץ על מקש האנטר. חיפשתי פתרון ואז חשבתי בפוקס אולי לשים את הסיפרה 1 בפונקציית ה-scanf כדלקמן:במקום scanf("%d", &digit);כתבתי scanf("%1d", &digit);ופתאום הדבר הסתדר ולא הייתי צריך להקשי לאחר כל ביפרה של התעודת זהות על מקש האנטר. ניסיתי להבין את ההגיון מאחורי השינוי המינורי ע"י הצבת מספרים אחרים מ-1 במקום הנתון אך לא הבנתי את הההגיון מאחורי הדבר.אשמח אם מישהו יוכל להסביר לי מה ההבדל כשאני רושם את הסיפרה 1 במקום הזה, וגם מה קורה אם אכתוב שם כל סיפרה אחרת.קטע הקוד מצורף:int main(){ int digit=0,sum=0, i=1, j=10000000, check=0, id=0; printf("Please enter ID (8 digits, with no check digit)\n"); for(i=1,j; i<9 ; i++, j=j/10) { scanf("%1d", &digit); id=id+digit*j; if(i%2==0) digit=digit*2; if(digit>9) digit=digit%10+digit/10; sum=sum+digit; } if(sum%10!=0) check= ((sum/10)*10)+10 - sum; else check =0; printf("ID=%d\nCheck digit=%d\n", id, check); return 0;}#include<stdio.h>
פורסם 2011 בדצמבר 214 שנים מחבר תודה רבה נראה לי שקיבלתי תשובה אני רק צריך לשחק עם זה קצת עכשיורק כדי לוודא שהבנתי נכון: ה-width זה המספר שאני הכנסתי פנימה והוא מציין את כמות התווים המקסימלי שיקראו.רק דבר נוסף, מה מסמנת הכוכבית "*" בשורה: %[*][width][modifiers]typeניסיתי לקרוא ולא הבנתיתודה רבה!
פורסם 2011 בדצמבר 214 שנים An optional starting asterisk indicates that the data is to be retrieved from [tt]stdin[/tt] but ignored, i.e. it is not stored in the corresponding argument.דהיינו, אם תעשהscanf("%*d%d", &x);אז הוא ידלג על המספר הראשון ויקרא את השני לתוך x.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.