משהו מוזר

zbobo

New member
משהו מוזר

אני משתמש בקומפילר של בורלנד ניסיתי להשים את הספרות שאחרי הנקודה במספר עשרוני במחרוזת כלומר ניקח לדוגמא את המספר 156.235 יוצר לי מחרוזת שיהיה בה 235 דרך אגב אני מנסה את זה בסי אז קלטתי את המספר העשרוני וכדי להפריד את הספרות שאני צריך לקחתי את המספר והעברתי אותו למשתנה מסוג אינט ואז חיסרתי את המספר הנקלט במספר מסוג אינט עכשיו זה אמור לפעול עקבתי אחרי זה בדיבג וזה מראה לי לדוגמא עבור הקלט הבא: 123.122 במשתנה מסוג אינט יש לי 123 ושאני מחסר 123.122 אמור לצאת לי 0.122 ולא יוצא לי, יוצא 0.1219999999 משהו כזה תראו מה רשמתי אולי זה בעייה אצלי float num,adot=0; int l; printf("enter the num \n"); scanf("%f",&num); l=num; adot=num-l; אחרי הפעולה של הקוד הזה צריך להיות בADOT את המספרים שאני רוצה לבדוק וזה לא פועל תודה לעוזרים
 

vinney

Well-known member
בגלל float

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

zbobo

New member
ואיך אני עושה את זה?

המחרוזת שלי היא בגודל 20 איך אני יכול להגיד למחשב לדייק?
 

vinney

Well-known member
נורא פשוט

תעשה strlen(strstr(number_string,".")) התוצאה היא מספר הספרות אחרי הנקודה את המספר הזה תשימי בתוך הformat string של printf משהו כזה יצא לך בסוף: %.3f אם יש לך 3 ספרות אחרי הנקודה
 

vinney

Well-known member
היישור נוראי, מצטער לא הולך אחרת../images/Emo10.gif

 

zbobo

New member
לא ממש הבנתי

איך אני יכול להפעיל פונקציות של מחרוזות על מספר? אני חייב לקלוט מספר עשרוני לא מחרוזת אז איך אני לוקח ממספר עשרוני את הספרות אחרי הנקודה?
 

vinney

Well-known member
מה זאת אומרת?

אתה קולט מחרוזת, כי זה מה שהמשתמש נותן לך. עוד לא פגשתי משתמש שמסוגל להכניס FLOAT כקלט. במקום לעשות scanf בקלט, תעשה gets, והנה - יש לך מחרוזת. אחרי שעשית את מה שהיית צריך לעשות איתה, תמשיך עם sscanf כאילו כלום לא קרה.
 

zbobo

New member
אבל הבעייה שיש לי מחייבת אותי

לקלוט בצורה של SCANF אז מה אני עושה?
 

vinney

Well-known member
למה?

חוצמזה, אתה תמיד יכול לעשות scanf לתוך מחרוזת. לחלופין, אתה יכול לקבוע סף רגישות שלך (נגיד 5-6 ספרות אחרי הנקודה) באופן קבוע.
 
למעלה