ABA


"שאלה בC, מבנים הקצאות זיכרון ומערכים.."
גירסת הדפסה        
קבוצות דיון לימודים, מדע ותרבות נושא #11377 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 11377
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   17:47   30.01.12   
אל הפורום  
  שאלה בC, מבנים הקצאות זיכרון ומערכים..  
 
   היי,
יש לי תרגיל שאומר כך:
מוגדר המבנה הבא:

struct person
{
char *name;
int gender;
};

כאשר name מכיל את שם האדם ו- gender מכיל 1 אם זו אישה , ואם גבר 0 .
עליכם לכתוב את הפונקציה הבאה:

void inputPersons (person* arr, int size, int &curSize)

הפונקציה תקרא צמדי
נתונים של שם ומין ותכניס אותם למערך לפי סדר קליטתם.
הקריאה תעשה עד לקלט של שם ריק או מקסימום size צמדים.
הפונקציה תחזיר את מס' האנשים שנקלטו במשתנה הפלט curSize

עכשיו הפונק' כתובה כי בטעות חשבתי שמדובר בMAIN, ורק אז קלטתי שצריך לעשות את כל הקלט בפונק',
הבעיה שלי שאני מנסה להעביר לפונקציה אני נתקל בשגיאה ולא יודע לאן להתקדם משם, איך אני אמור להגדיר את הperson* arr ולשלוח אותו למערך??
הגדרתי אותו כstruct person arr[SIZE או כ struct person * arr ועדיין כשאני מנסה לשלוח אותו הוא כותב שהשליחה שלי היא כאילו המשתנה
person ** arr (דאבל כוכבית כאילו), מה עושים?? איך שולחים אותו לפונק'?


תודה


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  מכתב Net_Boy  30.01.12 18:19 1
     העניין הוא, שהמבנה והכל מוקצה בשאלה בגלל זה שאלתי, איציק2 30.01.12 18:30 2
         מכתב TheKid 30.01.12 19:24 3
             צריך לבצע הקצאה דינאמית על הname כל פעם מחדש איציק2 30.01.12 21:07 4
                 אני מאמין שזה עבד לי כי כתבתי בC++ TheKid 30.01.12 21:42 5
                     תודה רבה על העזרה, וויתרתי על התרגיל הזה יש עוד מלא להס איציק2 30.01.12 22:55 6

       
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   18:19   30.01.12   
אל הפורום  
  1. מכתב  
בתגובה להודעה מספר 0
 
   הstruct שלך לא מוגדר כמו שצריך
אתה צריך להגדיר אותו כך:
typedef struct
{
...
}person;

ואז הטיפוס של המערך הוא person * arr.

אבל בגלל שאתה צריך להקצות אותו בתוך הפונקציה, הפרמטר שאמור לעבור לפונקציה הוא : person**.

ומספר האנשים שנקלטו צריך להיות מסוג : int*


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   18:30   30.01.12   
אל הפורום  
  2. העניין הוא, שהמבנה והכל מוקצה בשאלה בגלל זה שאלתי,  
בתגובה להודעה מספר 1
 
   שיניתי את זה לצורה :
void inputPersons (struct person *arr, int size, int *curSize);

זה הקריאה של הפונק' כאילו
והבעיה של מה שאתה אומר לי זה שהם אומרים את הגדלים מראש, הם לא מבקשים הקצאות דינמיות אז זה נראה לי בעיה טיפה..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheKid לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.10.07
17978 הודעות, 1 פידבק
   19:24   30.01.12   
אל הפורום  
  3. מכתב  
בתגובה להודעה מספר 2
 
   ערכתי לאחרונה בתאריך 30.01.12 בשעה 19:29 בברכה, TheKid
 

struct person
{
char *name;
int gender;
};
void inputPersons (struct person* arr, int size, int &curSize){
int i=0;
char name[50];
int gen=0;
scanf("%s %d",&name,&gen);
while (i<=size && name!=""){
arr[i].name=name;
arr[i].gender=gen;
scanf("\n%s %d",&name,&gen);
i++;
}
curSize=i-1;

}

int _tmain(int argc, _TCHAR* argv[])
{
struct person per[5];
int size=6;
int curSize=0;
inputPersons (per, size,curSize);

return 0;
}


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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   21:07   30.01.12   
אל הפורום  
  4. צריך לבצע הקצאה דינאמית על הname כל פעם מחדש  
בתגובה להודעה מספר 3
 
   לפי מה שהבנתי הם רוצים בעצם מערך של פויינטרים, שכל אחד יצביע פשוט למשהו אחר, מה שאמרת עשיתי למרות שהאמפרסנט הזה בזימון לפונק' נותן בכלל שגיאה,
ככה ששיניתי אותו פשוט לפויינטר וזהו, נראה לי עשו טעות בכתיבת תרגיל זה משו לא הגיוני ככ..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheKid לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.10.07
17978 הודעות, 1 פידבק
   21:42   30.01.12   
אל הפורום  
  5. אני מאמין שזה עבד לי כי כתבתי בC++  
בתגובה להודעה מספר 4
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   22:55   30.01.12   
אל הפורום  
  6. תודה רבה על העזרה, וויתרתי על התרגיל הזה יש עוד מלא להס  
בתגובה להודעה מספר 5
 
   להספיק חבל על הזמן, תודה על הזמן שהקדשת


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net