עבור לתוכן

זקוק לעזרה בסוויצ' שנמצא בתוך while. שפת C.

Featured Replies

פורסם
  • מחבר

כי בקוד הקודם הוא קיבל תוצאה של pow, אז הכרזתי עליו כדאבל.

אבל זה כזה משמעותי?

פורסם

כן, שים לב איך אתה מנסה להדפיס אותו.

אם אתה רוצה להדפיס d%, אתה חייב לתת לו int (או שמראש b10 יהיה int, או שתמיר אותו לפני ההדפסה).

פורסם
  • מחבר

תודה שניצל, זה אכן פתר את הבעיה. ועוד בעיה שיש לי (אחרונה בהחלט, אני בטוח שלכולכם כבר נמאס ממני).

היא שהקומפיילר עושה עיגול כלפי מטה של חילוק בין שני שלמים למספר שלם, למרות שאני שומר אותו כדאבל.

	int x,sum,counter,temp;
double avg;
counter = 0;
sum = 0;
scanf("%d",&x);
scanf("%d",&temp);
while (temp != 999)
{
if (temp>x)
{
sum = sum + temp;
counter = counter + 1;
}
scanf("%d",&temp);
}
if(counter == 0)
{
printf("0\n");
}
else
{
avg = sum/counter;
printf("%f\n",avg);
}

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

עבור הקלט:

8

9

10

999

הפונקציה מדפיסה:

9.00000

במקום 9.50000

למה העיגול?

פורסם

כי כל שאר המשתנים שלך הם int.

תנסה עם:

avg = (double)sum/counter

פורסם
  • מחבר

אכן עובד. תודה לך ידידי.

זה מוזר, הרי חילוק ע"י / אמור לתת לפעמים תוצאה לא שלמה לא?

פורסם

זה תלוי מהו סוג המשתנים שאתה מחלק, התוצאה תמיד תהיה מסוג המשתנה הגדול יותר.

לדוגמה חילוק של char בint יתן int, או חילוק של float בint יתן float.

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

ארכיון

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

דיונים חדשים