בשם רון....

בשם רון....

יש לי כאן פונקציה של atoi, הפיכת מחרוזת לinteger:
atoi(s) char s[]; { int i, n, sign; for (i=0; s==´ ´|| s==´\n´ || s==´\t´; i++) ; /* skip white space */ sign = 1; if (s == ´+´ || s == ´-´) /*sign*/ sign = (s[i++]=´+´) ? 1 : -1; for (n = 0; s >= ´0´ && s <= ´9´; i++) n = 10 * n + s - ´0´; return(sign * n) }

אז ככה, למי שהצליח להבין את הקוד, מישהו יכול להסביר לי על הפונקציה ואת השורה:
sign = (s[i++]=´+´) ? 1 : -1; |סקוד​
 

galke

New member
דוגמא נפלאה לתכנות מגעיל

זו אכן הסיבה למה כל הספרים מזהירים מלכתוב קוד בצורה כזו. ולשאלתך, sign=(s=´+´)?1:-1 פירושו אם s הוא + אז sign מקבל 1, אחרת -1. ה-++ שנמצא שם מקדם את i ב1 אחרי ביצוע הפעולה.
 

galh

New member
מה מגעיל בדיוק?

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

שאתה רואה שם, היא בעצם דרך אחרת לכתוב תנאי:
logical expression?iftrue:iffalse;​
לדוגמאות יותר פשוטות (הנח שמוגדר משתנה בוליאני שנקרא found):
found?return true:return false; return found?1:0;​
 

ke

New member
== ולא =

זה כנראה טעות העתקה, אבל צריך להיות
s == ´+´

ולא
s = ´+´
 
למעלה