פונקציות בשפת C...

ZiPZaP

New member
פונקציות בשפת C...

היי! למדתי מספר של C קצת על פונקציות אבל יש משהו אחד שלא מצליח לי. נגיד ואני מגדיר כמה משתנים. עכשיו, בפונקציה שבאה אחרי הגדרת המשתנים, אני רוצה להכניס למשתנים ערכים. משום מה, הפונקציה לא מוצאת את המשתנים.האם אני צריך להגדיר את אותם המשתנים שהגדרתי לפני הפונקציה גם בתוך הפונקציה עצמה?! לכל-מקרה, אם לא הבנתם, צירפתי את קוד המקור כדי שתוכלו להבין יותר טוב: http://members.lycos.co.uk/zipomri/AGE.C בתודה מראש, עומרי
 

Elk

New member
משתנים מקומיים

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

ihovav

New member
תוספת

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

ZiPZaP

New member
טוב, יעלתי את התוכנית אבל צריך עזרה

היי! כמו שהצעתם, השתמשתי במשתנים גלובליים אף על פי שהספר ממליץ לא להשתמש בהם, ובנוסף חילקתי את הקוד לפונקציות קטנות וכך בעצם הקוד נראה יותר ברור, לדעתי ולדעת מי שרשם את הספר... אבל, כמובן יש עדיין בעיות... 1) יש ב-C פקודה שאיתה אני יכול להציב את הפלט באמצע המסך או בצד השמאלי של המסך או באמצע-ימין המסך? הבנתם את הכוונה, נכון? 2) נגיד ואני נותן בתוכנית שלי בחירה בין 1 ו-2, ישנה אפשרות שכשאר המשתמש ילחץ תשובה, היא לא תיראה והפקודה של התשובה תבוא מיד? 3) משום מה, לא הצלחתי למצוא את הבעיה בקוד שגורמת לבאג בתוכנית... אולי אתם תצליחו למצוא? תוכלו להבין יותר את הבאג אם תעשו כך: א. בחרו באחת מן האפשרויות. ב. בתאריך של היום, הכניסו 28.9.2002 . ג. בתאריך יום ההולדת שלכם, הכניסו 29.9.2002 . ד. אחר-כך תצטרכו להכניס שוב כי יש איזשהו תנאי, אך עכשיו הכניסו 27.9.2002 . ה. אחר-כך תצטרכו לאשר את התאריך, לחצו 1. וכאן מגיעה הבעיה: א. למה הוא מציג את ה-"אשר את תאריך יום ההולדת" עוד-פעם? ב. למה הוא משנה את ערך המשתנה של שנת יום ההולדת מ-2002 ל-1? אם תוכלו לעזור באיזשהי שאלה, אודה לכם מאוד.... הלינקים: http://members.lycos.co.uk/zipomri/AGE.C - קוד המקור. http://members.lycos.co.uk/zipomri/AGE.EXE - התוכנית בתודה מראש, עומרי
 

IgKh

New member
כמה תשובות...

1) לא חושב 2) נסה את getch() 3) לא בטוח, אבל תנסה לעשות משתנה מקומי לשמירת הבחירה בכל פונקצייה שמציגה בחירה.
 

ZiPZaP

New member
תודה, אבל זה לא עבד....

תודה על התשובות.... 1) ניסיתי להגדיר משתנה מקומי אבל גם זה לא עבד... זה בטוח משהו קטן כזה שאני לא שם לב אליו, נקווה שמישהו מכם יעלה על זה. 2) הפקודה getch() לא עוזרת, היא רק מוסיפה שורת רווח לפני ואחר-כך צריכים במילא להכניס עוד-פעם את הבחירה. אולי יש עו פקודה, שמונעת את הצגת הבחירה על המסך ומתי שלוחצים 1 או 2 ישר לוקחת לפקודה של הבחירה? ולגבי הצגת הטקסט, אני משתמש ב- t\ כדי לשים את באמצע המסך, אבל זאת ניראת לי פקודה למשהו אחר בכלל??? בתודה, עומרי
 
למעלה