runtime error

lillitush

New member
runtime error

printf("the ratio is %7f",k/frc); כשהמשתנים k ו-frc הם int. מה עושים?יש דרך לעשות המרה או משהו כדי שזה יעבור?
 

annefan

New member
מריח לי מוכר

printf("the ratio is %7f",(float)k/frc);​
ככה זה עובד?
 

annefan

New member
ואתה תקבל שלושים נקודות

אם תצליח להבין מאיפה באה לך הודעת הטעות הזו!! זו שאלה לא פשוטה, ששאלתי כחידה פה בפורום לפני הרבה זמן!
 

lillitush

New member
איזה הודעת טעות?

אם אתה מתכוון למה שאני שאלתי אז זה היה בגלל המרה מ-int ל-float לא?
 

annefan

New member
אז מה אם יש המרה?

זו המרה סטנדרטית ב-C. נסה אתה להגדיר פונקציה שמקבלת float ולשלוח לה int ותראה האם יש לך את הודעת טעות (רמז: לא).
 

annefan

New member
ממש לא קשור

בפלטפרומות של היום הגודל של float ושל int הוא אותו גודל (4 בתים). חוץ משה, כבר אמרתי לך, C עושה המרות כאלו בלי בעיה, בדרך כלל. תסתכל על הקוד:
#include <stdio.h> int func(float a) { return 3; } int main() { int i = 3; func(3); printf("%f", i); // What happens here?? return 0; }​
 

annefan

New member
../images/Emo6.gif

שני דברים. א. ה-prototype של printf הוא:
int printf (const char *, ...);​
כיוון שהפונקציה מקבלת מחרוזת לפורמט, ומספר לא מוגבל של משתנים להדפסה. לכן, לא נעשה ה-cast לטיפוס המתאים. ב. בהרבה מאוד מערכות, הטיפול בין שלמים לבין נקודה צפה הוא שונה לגמרי (רגיסטרים שונים, לדוגמא). כשאתה אומר ל-Printf להדפיס int (לפי ה-format), הוא מחפש את המשתנה ברגיסטרים של ה-Integers, או קורא את המשתנים מהמחסנית כאילו הם int וכד'. אבל, אם המשתנה ששלחת הוא בעצם float, אז all bets are off. הוא יכול לקרוא זבל, לקרוא רגיסטר לא מאותחל ולזרוק הודעות מטורפות. ב-gcc יש warning על זה.
 
למעלה