עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

פונקציית ה-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.

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.