תוֹכֶן
סעיפים אחריםהאם נתקלת אי פעם ב- "פורמטים של נקודה צפה לא מקושרים" שגיאה בתוכנית C או C ++? להלן מובאת הסיבה לשגיאה זו וגם הפיתרון לה. שימו לב: המהדר המשמש הוא Turbo C / Borland C.
צעדים
ניתוח רשימת התוכניות הבאה ולאחר בנייה מוצלחת של התוכנית, מופיעה שגיאת זמן הריצה הנ"ל.
תוכנית אחת
- רשימת התוכנית אחת למטה.
- int main () {
struct תלמיד {
int rollno;
char stdname;
אחוז צף;
} * s1;
printf (" הזן פרטי תלמיד:");
scanf ("% d% s% f",
& s1-> rollno,
s1-> stdname,
& s1-> אחוזים);
printf (" n הפרטים שהוזנו הם:");
printf ("רול:% d, שם:% s, אחוז:% f",
s1-> rollno,
s1-> stdname,
s1-> אחוזים);
getch ();
החזר 0;
} - תוכנית C הנ"ל נכתבת ומורכבת בטורבו C. כאשר תוכנית זו מבוצעת, המהדר מציג את השגיאה הבאה,
Scanf: פורמטים של נקודה צפה לא מקושרים והתוכנית מסתיימת באופן חריג. - זה קורה בגלל המשתנה * s1, המהווה מצביע למבנה "תלמיד", בו הגדיר מתכנת משתנה "צף" בשם "אחוז". פירוש הדבר ששגיאה נמצאה כאשר התוכנית ניסתה לקרוא ערך עבור סוג נתונים צף באמצעות מצביע למבנה. כאשר התוכנית מבוצעת, המהדר הציג שגיאת זמן ריצה בשורת scanf ("% f", ...% s1-> אחוז).
- זה יכול לקרות כאשר אנו משתמשים ב- Borland C / C ++ או TurboC / C ++ כמהדר. "פורמטים של נקודה צפה לא מקושרים" היא שגיאת זמן ריצה של בורלנד (Borland C או C ++, Turbo C או C ++). המהדרים של בורלנד אינם מקשרים בספריית הנקודה הצפה (f-p) אלא אם כן אנו זקוקים לה. לכן בכוח עלינו להוסיף כל פונקציית נקודה צפה (f-p) כשיש לנו "% f" או פורמטים אחרים של נקודה צפה (f-p) בשיחות scanf () או printf ().
- int main () {
כדי לתקן שגיאה זו, התקשר לפונקציה נקודה צפה (f-p) או פשוט הוסף קישור לקובץ המכיל לפחות פונקציית נקודה-צפה אחת (f-p). לשם כך, פיתרון גרוע יכול להיות להגדיר פונקציית דמה אי שם בקובץ המקור, אך לא לקרוא לה:- בטל ריק (צף * א) {
לצוף b = * a; // לבצע גישה צפה
דמה (& b); // קורא לפונקציה של נקודה צפה
} - זה לא חייב להיות במודול עם התוכנית הראשית, כל עוד זה במודול שייכלל בקישור. לכן יש לכתוב את התוכנית שלעיל באופן הבא:
- בטל ריק (צף * א) {
תכנית רישום שתיים
רשימת התוכנית שתיים למטה.- בטל ריק (צף * א) {
לצוף b = * a; // לבצע גישה צפה
דמה (& b); // קורא לפונקציה של נקודה צפה
}
int main () {
struct תלמיד {
int rollno;
char stdname;
אחוז צף;
} * s1;
printf (" הזן פרטי תלמיד:");
scanf ("% d% s% f",
& s1-> rollno,
s1-> stdname,
s1-> אחוזים);
printf (" n הפרטים שהוזנו הם:");
printf ("רול:% d, שם:% s, אחוז:% f",
s1-> rollno,
s1-> stdname,
s1-> אחוזים)
getch ();
החזר 0;
} - בתוכנית שלעיל, "דמה" היא פונקציה המוגדרת על ידי המשתמש. אתה יכול לתת כל שם לפונקציה זו במקום "דמה". באופן דומה, "a" ו- "b" הם שמות משתנים, שאותם תוכלו לשנות.
- הסיבה לכך היא כי מהדרי טורבו ו- Borland C / C ++ לעיתים משאירים תמיכה בנקודות צפות ומשתמשים בגרסת נקודה לא צפה של printf ו- scanf כדי לחסוך מקום במערכות קטנות יותר. קריאת הדמה לפונקציה של נקודה צפה תאלץ את המהדר לטעון את התמיכה בנקודה צפה ולפתור את הבעיה המקורית.
- בטל ריק (צף * א) {
אפשרות נקייה יותר היא לאפשר קישור ספריית נקודות צפות בטורבו C / C ++ או Borland C / C ++ מאפשרויות קישור לספרייה לכלול נקודה צפה.