פורסם 2010 בינואר 2215 שנים מחבר ניסיתי קצת לשנות, אבל עדיין מדלג על המס' הראשון בקריאה... #include <stdarg.h>#include <stdio.h>int lowest_ever (int frst,...){ va_list mylist; static int lowest_num; static int next_num; va_start (mylist, frst); /*Initialize the argument list*/ next_num= va_arg(mylist, int); while (next_num!=-1) { if (frst <lowest_num) lowest_num= frst; next_num = va_arg(mylist, int); } va_end (mylist); /*Clean up */ return lowest_num;}intmain (void){ /*This call prints 5*/ printf ("%d\n", lowest_ever (5, 78, 100, 20, -1)); /*This call prints 2*/ printf ("%d\n", lowest_ever (70, 40, 2, -1));/*This call prints 2*/ printf ("%d\n", lowest_ever (40, 30, -1)); return 0;}
פורסם 2010 בינואר 2215 שנים אבל עכשיו בכל איטרציה אתה מתעלם מ-next_num ובודק רק את frst. מה ההגיון בזה?
פורסם 2010 בינואר 2215 שנים למה אתה חושב שהבעיה היא בלולאה?הבעיה היא שיש לך ארגומנט אחד שאתה לא בודק - frst.
פורסם 2010 בינואר 2215 שנים מחבר עכשיו הוא מדפיס לי את הספרה 5 עבור כל אחת מהקריאות. הוא כאילו מתייחס רק לקריאה הראשונה אפילו שהוא מסתכל גם על האיבר הראשון... :'(הקוד:#include <stdarg.h>#include <stdio.h>int lowest_ever (int frst,...){ va_list mylist; static int lowest_num=101; static int next_num; va_start (mylist, frst); /*Initialize the argument list*/ next_num= va_arg(mylist, int); if (frst <lowest_num) lowest_num= frst; while (next_num!=-1) { if (frst <lowest_num) lowest_num= frst; next_num = va_arg(mylist, int); } va_end (mylist); /*Clean up */ return lowest_num;}intmain (void){ /*This call prints 5*/ printf ("%d\n", lowest_ever (5, 78, 100, 20, -1)); /*This call prints 2*/ printf ("%d\n", lowest_ever (70, 40, 2, -1));/*This call prints 2*/ printf ("%d\n", lowest_ever (40, 30, -1)); return 0;}
פורסם 2010 בינואר 2215 שנים מחבר אוקיי, אז ככה... תיקנתי את הבעיה ועכשיו התוכנית מתמודדת גם עם המס' הראשון אבל... כאשר הוספתי את שורות ה- ADDON (כולל הקריאה הנוספת שהוספתי), אני מקבל את המצ"ב. לא מצליח להבין מה אני עושה לא טוב עכשיו? ???הקוד:#include <stdarg.h>#include <stdio.h>int lowest_ever (int frst,...){ va_list mylist; static int lowest_num=101; static int next_num; va_start (mylist, frst); /*Initialize the argument list*/ next_num= va_arg(mylist, int); if (frst <lowest_num) lowest_num= frst; if (frst = -1) /* ADDON*/ printf("ERROR"); /* ADDON*/ while (next_num!=-1) { if (next_num <lowest_num) lowest_num= next_num; next_num = va_arg(mylist, int); } va_end (mylist); /*Clean up */ return lowest_num;}intmain (void){ /*This call prints 5*/ printf ("%d\n", lowest_ever (5, 78, 100, 20, -1)); /*This call prints 2*/ printf ("%d\n", lowest_ever (70, 40, 2, -1));/*This call prints 2*/ printf ("%d\n", lowest_ever (40, 30, -1)); /*This call prints error*/ printf ("%d\n", lowest_ever (-1)); /* ADDON*/ return 0;}[attachment deleted by admin]
פורסם 2010 בינואר 2215 שנים מחבר א. ב. מותר לי לעשות כך ? ומדוע יוצא לי ERROR5 במקום ERROR ? #include <stdarg.h>#include <stdio.h>int lowest_ever (int frst,...){ va_list mylist; static int lowest_num=101; static int next_num; va_start (mylist, frst); /*Initialize the argument list*/ next_num= va_arg(mylist, int); if (frst <lowest_num) lowest_num= frst; if (frst == -1) { return (printf("ERROR")); } while (next_num!=-1) { if (next_num <lowest_num) lowest_num= next_num; next_num = va_arg(mylist, int); } va_end (mylist); /*Clean up */ return lowest_num;}intmain (void){ /*This call prints 5*/ printf ("%d\n", lowest_ever (5, 78, 100, 20, -1)); /*This call prints 2*/ printf ("%d\n", lowest_ever (70, 40, 2, -1));/*This call prints 2*/ printf ("%d\n", lowest_ever (40, 30, -1)); /*This call prints error*/ printf ("%d\n", lowest_ever (-1)); /* ADDON*/ return 0;} [attachment deleted by admin]
פורסם 2010 בינואר 2215 שנים ^למה אתה עושה:return (printf("ERROR")); בגלל זה זה מדפיס לך 5, כי ב MAIN זה מדפיס לך את מה שהפונקציה מחזירה, שזה מה שרשמת , והפונקציה PRINTF מחזירה את מספר התווים שמודפסים על המסך.אז זה מדפיס לך את ה ERROR שב PRINTF, ואחרי זה ה PRINTF שב MAIN מדפיס לך את מה ש PRINTF החזירה (5 תווים למילה ERROR שהודפסה)אל תחזיר את הפונקציה PRINTF! תשתמש בקוד שגיאה כלשהו שלא חלק מהערכים וב MAIN תבצע בדיקה האם הפונקציה שלך החזירה קוד שגיאה לפני שאתה מדפיס את מה שהיא מחזירה.
פורסם 2010 בינואר 2215 שנים מחבר תשתמש בקוד שגיאה כלשהו שלא חלק מהערכים וב MAINאיזה קוד שגיאה כזה קיים ?תבצע בדיקה האם הפונקציה שלך החזירה קוד שגיאה לפני שאתה מדפיס את מה שהיא מחזירה. לא הבנתי למה הכוונה ?....
פורסם 2010 בינואר 2315 שנים אתה מחליט מה יהיה קוד השגיאה.למשל, תחליט שהפונקציה תחזיר את הערך 9999 שמבחינתך זה שגיאה (במקום שהיא תחזור PRINTF).ב MAIN, תבדוק מה היא החזירה, אם היא החזירה 9999 אז תדפיס הודעת שגיאה מתאימה.אני לא מבין למה עשית return printf("error");זה פשוט לא נכון, שוב, מה שהפונקציה תחזיר במקרה כזה זה את מספר התווים ש PRINTF הדפיסה, במקרה שלך, שהוא חסר כל משמעות לערך שהיא אמורה להחזיר..לדוגמא, בתוך ה MAIN אתה יכול לעשות כזה דבר לפני שאתה מדפיס ישירות את מה שהפונקציה מחזירה:result=lowest_ever (70, 40, 2, -1);if (result!=9999) printf ("%d\n", result);else printf ("ERROR\n");
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.