פורסם 2012 בנובמבר 513 שנים שלום כולם,יש לי עבודה להגשה ב-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);
פורסם 2012 בנובמבר 513 שנים ההתנהגות של scanf עם רווחים (ליתר דיוק, whitespace - שזה רווח, טאב, ירידת שורה וכד') היא קצת לא טריוויאלית במבט ראשון.כשיש c% אז היא קוראת תו אחד בדיוק, וזהו.כשיש כל אחד מה-%ים האחרים, הפונקציה קודם כל מדלגת על כל הרווחים ואז קוראת את מה שהיא צריכה מהקלט.כשיש רווח אחד לפחות, הפונקציה גם כן מדלגת על כל הרווחים.ככה שדבר כזה:scanf(" %c", &c);ידלג על רווחים (גם אם יש יותר מאחד) ויכניס ל-c את התו הראשון שאינו רווח.לשים רווח לפני d% או s% לא אמור לשנות כלום.
פורסם 2012 בנובמבר 513 שנים מחבר אני אמור לקרוא רק תו שהוא לא white space, האם זה ששמתי רווח זה מספיק טוב? כי אם הוא יקרא תו שהוא ירידת שורה או טאב זו גם בעיה...תודה!
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.