טיפול במספר משתנה של ארגומנטים -- שפת C - עמוד 4 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

טיפול במספר משתנה של ארגומנטים -- שפת C


iem

Recommended Posts

  • תגובות 64
  • נוצר
  • תגובה אחרונה

ניסיתי קצת לשנות, אבל עדיין מדלג על המס' הראשון בקריאה... :nixweiss:


#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;
}

int
main (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;
}

קישור לתוכן
שתף באתרים אחרים

עכשיו הוא מדפיס לי את הספרה 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;
}

int
main (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;
}

קישור לתוכן
שתף באתרים אחרים

אוקיי, אז ככה... תיקנתי את הבעיה ועכשיו התוכנית מתמודדת גם עם המס' הראשון אבל... כאשר הוספתי את שורות ה- 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;
}

int
main (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]

קישור לתוכן
שתף באתרים אחרים

א. :kopfpatsch:

ב. מותר לי לעשות כך ? ומדוע יוצא לי 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;
}

int
main (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]

קישור לתוכן
שתף באתרים אחרים

^

למה אתה עושה:


return (printf("ERROR"));

בגלל זה זה מדפיס לך 5, כי ב MAIN זה מדפיס לך את מה שהפונקציה מחזירה, שזה מה שרשמת , והפונקציה PRINTF מחזירה את מספר התווים שמודפסים על המסך.

אז זה מדפיס לך את ה ERROR שב PRINTF, ואחרי זה ה PRINTF שב MAIN מדפיס לך את מה ש PRINTF החזירה (5 תווים למילה ERROR שהודפסה)

אל תחזיר את הפונקציה PRINTF! תשתמש בקוד שגיאה כלשהו שלא חלק מהערכים וב MAIN תבצע בדיקה האם הפונקציה שלך החזירה קוד שגיאה לפני שאתה מדפיס את מה שהיא מחזירה.

קישור לתוכן
שתף באתרים אחרים

תשתמש בקוד שגיאה כלשהו שלא חלק מהערכים וב MAIN

איזה קוד שגיאה כזה קיים ?

תבצע בדיקה האם הפונקציה שלך החזירה קוד שגיאה לפני שאתה מדפיס את מה שהיא מחזירה.

לא הבנתי למה הכוונה ?....
קישור לתוכן
שתף באתרים אחרים

אתה מחליט מה יהיה קוד השגיאה.

למשל, תחליט שהפונקציה תחזיר את הערך 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");

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.


×
  • צור חדש...