עבור לתוכן

פונקציית ה-scanf בשפת C

Featured Replies

פורסם

היה לי תרגיל בית שבו הייתי אמור למצוא את ספרת הביקורת בתעודת הזהות הישראלית. (רקע כללי ולא חשוב...)

פתרתי את התרגיל ע"י לולאת 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>

פורסם
  • מחבר

תודה רבה נראה לי שקיבלתי תשובה אני רק צריך לשחק עם זה קצת עכשיו

רק כדי לוודא שהבנתי נכון: ה-width זה המספר שאני הכנסתי פנימה והוא מציין את כמות התווים המקסימלי שיקראו.

רק דבר נוסף, מה מסמנת הכוכבית "*" בשורה:

%[*][width][modifiers]type

ניסיתי לקרוא ולא הבנתי

תודה רבה!

פורסם
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.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים