עבור לתוכן

התנהגות מוזרה של scanf (חדש עם C)

Featured Replies

פורסם

שלום כולם,

יש לי עבודה להגשה ב-C ומאלצים אותי להשתמש בפונקציה scanf (מניח שככה קל למרצים לנסות דברים שונים בקלות).

אני צריך לקלוט 2 שורות, מספר ותו.

ראיתי שזה חוקי להשתמש בפקודה הבאה:

scanf("%s%s%d%c",line1,line2,&num,&c);

במקרה הזה, התו לא נקלט כמו שצריך (אני קולט רווח).

scanf("%s%s%d%1s",line1,line2,&num,&c);

במקרה הזה, התו נקלט כמו שצריך, אך המספר num הוא 0.

חיפשתי ברשת ונראה שמה שכתבתי זה חוקי, מישהו מוכן לעזור עם הפונקציה הזו?

עריכה:

ניסיתי לשים רווחים בין הארגומנטים ומשום מה זה עבד... מישהו יכול להסביר למה עכשיו זה עובד?

scanf("%s %s %d %c",line1,line2,&n,&c);

פורסם

ההתנהגות של scanf עם רווחים (ליתר דיוק, whitespace - שזה רווח, טאב, ירידת שורה וכד') היא קצת לא טריוויאלית במבט ראשון.

כשיש c% אז היא קוראת תו אחד בדיוק, וזהו.

כשיש כל אחד מה-%ים האחרים, הפונקציה קודם כל מדלגת על כל הרווחים ואז קוראת את מה שהיא צריכה מהקלט.

כשיש רווח אחד לפחות, הפונקציה גם כן מדלגת על כל הרווחים.

ככה שדבר כזה:

scanf(" %c", &c);

ידלג על רווחים (גם אם יש יותר מאחד) ויכניס ל-c את התו הראשון שאינו רווח.

לשים רווח לפני d% או s% לא אמור לשנות כלום.

פורסם
  • מחבר

אני אמור לקרוא רק תו שהוא לא white space, האם זה ששמתי רווח זה מספיק טוב? כי אם הוא יקרא תו שהוא ירידת שורה או טאב זו גם בעיה...

תודה!

פורסם

whitespace זה כל תווי הרווח למיניהם, כולל רווח, טאב, וירידות שורה.

ארכיון

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

דיונים חדשים