שלום, יש לי בעיה בשפת c

MaorCS

New member
שלום, יש לי בעיה בשפת c

כתבתי פונקציה מאוד פשוטה שאמורה למלא מטריצה באיזשהו ערך: #include <stdio.h> #define N 6 #define M 6 void init_matrix(char a, char value); void main() { char a[N][M]; char value = 'm'; init_matrix(a[N][M], value); } void init_matrix(char a[N][M], char value) { int i, j; for (i = 0 ; i < N ; i++) { for (j = 0 ; j < M ; j++) { a[j] = value; } } } השגיאה שאני מקבל היא בשורה אחת מתחת למימוש של הפונקציה, כלומר הוא מסמן לי את הפתיחת סוגריים של הפונקציה, וכותב: type mismatch in redacleration of 'matrix_init' למישהו יש מושג מה הבעיה? תודה.
 

sbennys

New member
תשובה

בפונקציה init_matrix אין התאמה בין ההצהרה שלה(prototype) למימוש שלה, אם לא שמת לב, הכוונה איך אתה רושם בהצהרה char a ובמימוש [][]char a , אתה צריך שהם יהיו זהים .
 

MaorCS

New member
צדקת, זאת הייתה הבעיה, רק שעכשיו..

הפונקציה לא מתקשרת עם התוכנית הראשית.. כלומר התוכנית רצה בלי שגיאות והכל.. אבל הפונקציה לא ממלאת את המטריצה אני יודע מ-2 סיבות: 1. כי ניסיתי לעשות printf בתוכנית הראשית סתם על איזשהו מקום במטריצה וכל מקום שאני מנסה להדפיס הוא מראה לי שיש שם סתם זבל (כל מיני סימנים). 2.ניסיתי להעתיק את התוכן של הפונקציה לתוכנית הראשית (כדי לראות אם יש שגיאות בכתיבה שלי) אבל כשאני מריץ את התוכן של הפונקציה בתוכנית הראשית, זה עובד, והלולאות כן ממלאות את המטריצה. כאילו שהפונקציה לא מתפקדת...
 

sbennys

New member
O.K

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

MaorCS

New member
באמת לא הבנתי איך לא חשבתי על זה..

ניסיתי לעשות ByReference והתחלתי לקבל שגיאות מוזרות (כאלה שהיו לי בהתחלה ולקח לי בערך 3 שעות לתקן אותם) עשיתי undo, ועדיין קיבלתי את השגיאות האלה (דברים כמו: type mismatch parameter 'game_board' in call to init_matrix) בדיוק אחר כך ראיתי שלא עשיתי גיבוי לקובץ אז התייאשתי, ומחר אני ינסה שוב מהתחלה.. תודה רבה לך בכל זאת.. :) (ותמיד תעשו גיבוי לקבצים ברגע שהם עובדים בפעם הראשונה!!!)
 

sbennys

New member
טעות

נראה לי שמקודם הטעתי אותך זה כן אמור לעבוד , אבל יש משהו שפיספסתי ראיתי בקוד שלך שרשמת בקריאה לפונקציה init_matrix(a[][],value); אין לי מושג איך זה עובד לך אתה צריך בקריאה לפונקציה (ב -main) לשלוח רק את שם המטריצה במקרה שלך הגדרת כ a ייראה כך init_matrix(a,value); בלי [][]
 

MaorCS

New member
תגובה למה שכתבת

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

gafni

New member
מערך עובר לפונקציה באמצעות

כתובתו להלן : a שאר משתנים עוברים לפי ערך. זה לא סינטקס מוזר . זה הבסיס .
 

MaorCS

New member
ברוך השם זה עובד..

מ-8 בבוקר שקמתי כתבתי את זה מהתחלה, וסופסוף זה עובד הפונקציה משנה את המטריצה והכל. נתקלתי בעוד כמה בעיות קטנות, אבל עוד מעט גם אותם אני יכתוב מהתחלה.. :) תודה לכולם
 
למעלה