פורסם 2007 באוקטובר 2018 שנים ידוע שCHAR מכיל 128 תווים בגלל זה אפשר ליצג נגיד ציונים כתו.עכשיו הקטע קוד הבא לא מציג מה שהוא אמור להציג, לא יודע אם זה בגלל צורת הקליטה או העבודה של עם STRUCT, אבל אשמח לעזרה.struct studentt{ char name[20]; long ID; char grades[7]; float avg;};int main(){ student s1; scanStud(s1); printStud(s1); getch(); return(0);}int printStud(student s){ int i; printf("Name: %s \n", s.name); printf("ID: %ld \n", s.ID); for(i=0;i<7;++i) { printf("Garde #%d: %d\n", i+1,s.grades[i]); } printf("Average: %.2f\n", s.avg); return(1);}int scanStud(student s){ int i, sum=0; printf("Enter your name:"); scanf("%19s", s.name); printf("\n enter ID:"); scanf("%ld", &s.ID); for(i=0;i<7;++i) { flushall(); printf("\n Enter garde #%d(0-100):", i+1); scanf("%3d",s.grades[i]); sum+=(int)s.grades[i]; } s.avg=sum/7; return(1);}
פורסם 2007 באוקטובר 2018 שנים הבעיה שלך היא בהתייחסות ל-grades כאילו הוא int בשורות של scanf ו- printf.תנסה את זה:printf("Garde #%d: %d\n", i+1,(int)s.grades[i]); /* note the conversion to (int) *//* ... bla bla bla ... */int temp;scanf("%3d",temp);s.grades[i] = temp; /* don't forget to check that the value of temp is in range! */
פורסם 2007 באוקטובר 2018 שנים תיקון - scanf צריך לקבל מצביע ל-int, כלומר:scanf("%3d", &temp);ודווקא ב-printf ההמרה ל-int לא הכרחית, אבל מומלצת.
פורסם 2007 באוקטובר 2018 שנים אני מניח שלא מדובר בשגיאה (ה-C שלי קצת הרבה חלודה), אבל אם לstruct קוראים studentt, איך אתה מגדיר student (כלומר בלי ה-t הנוספת)?
פורסם 2007 באוקטובר 2018 שנים מחבר אממ זה C... לא נראה לי שיש טבלה כמו באסמבלר שמראה לי את הערכים של כל המשתנים, האוגרים והזכרון.. אני טועה?
פורסם 2007 באוקטובר 2018 שנים בכל סביבת עבודה סטנדרטית יש דיבאגר כלשהו.אתה עובד עם VS? תלחץ F10 ותתחיל לדבג.
פורסם 2007 באוקטובר 2018 שנים מחבר בורלנד(אני לא יכול לעבור לVC).יש שם רק WATCH VARIBELSאבל כשאני רושם נגידstudClass[0].grade[0]הוא לא מוצא לי את זה
פורסם 2007 באוקטובר 2018 שנים לבורלנד יש דיבאגר. אבל תמיד אתה יכול גם להדפיס את הערך בקטעים שונים בתוכנית, ולראות מתי הוא נהיה לא תקין.
פורסם 2007 באוקטובר 2118 שנים מחבר לי זה די ברור אבל אולי אני טועהכשאתה מגדיר STRUCT אז בעצם יש לי במשתנה הפנייה לעצם נכון? כמו כמגדירים מערך..
פורסם 2007 באוקטובר 2118 שנים כשאתה יוצר STRUCT הוא נוצר לך על המחסנית, לא בHEAP(כמו מערך רגיל שהגדרת).כדי שהוא יהייה בHEAP אתה צריך ליצור מצביע(ה"הפנייה לעצם"), ולהקצות אותו דינאמית(כמו שמקצים מערך דינאמי עם malloc, רק להכניס גודל שונה).
פורסם 2007 באוקטובר 2118 שנים מחבר אבל כשאתה מגדיר מערך הוא לא יוצר מצביע לתחילה של המערך? אם כן איך זה קשור לSTUCK של התוכנית?ועוד משהו בתוכנית שבהודעה הראשונה שלי אין בעיה בערך שאני מקבל בSCANSTUD? (אולי זה יכול להיות מצביע?)
פורסם 2007 באוקטובר 2118 שנים הוא לא יוצר מצביע למערך, אלא יוצר מערך החל מכתובת כלשהי בSTACK. בגדול, הקומפיילר מתרגם את השם של המערך לOFFSET(אתה יכול להתייחס לזה ככתובת לשם הפשטות), ו"מחליף" את השם של המערך בOFFSET הזה כל פעם שהוא נתקל בו.זה גם מסביר לך למה לא ניתן לרשום את השורות הבאות:int a[50];a++;
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.