עבור לתוכן

הכנסת מספר עד 100 כתו בC

Featured Replies

פורסם

ידוע ש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);
}

פורסם

הבעיה שלך היא בהתייחסות ל-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! */

פורסם

תיקון - scanf צריך לקבל מצביע ל-int, כלומר:

scanf("%3d", &temp);

ודווקא ב-printf ההמרה ל-int לא הכרחית, אבל מומלצת.

פורסם
  • מחבר

לא עובד....

פורסם

אני מניח שלא מדובר בשגיאה (ה-C שלי קצת הרבה חלודה), אבל אם לstruct קוראים studentt, איך אתה מגדיר student (כלומר בלי ה-t הנוספת)?

פורסם
  • מחבר

כנראה ששכחתי להוסיף עוד שורה

typedef struct studentt student;

פורסם

למה שלא תתחיל לדבג ותבדוק איפה הערכים מתחילים להתחרבש לך?

פורסם
  • מחבר

אממ זה C... לא נראה לי שיש טבלה כמו באסמבלר שמראה לי את הערכים של כל המשתנים, האוגרים והזכרון.. אני טועה?

פורסם

בכל סביבת עבודה סטנדרטית יש דיבאגר כלשהו.

אתה עובד עם VS? תלחץ F10 ותתחיל לדבג.

פורסם
  • מחבר

בורלנד(אני לא יכול לעבור לVC).

יש שם רק WATCH VARIBELS

אבל כשאני רושם נגיד

studClass[0].grade[0]

הוא לא מוצא לי את זה

פורסם

לבורלנד יש דיבאגר. אבל תמיד אתה יכול גם להדפיס את הערך בקטעים שונים בתוכנית, ולראות מתי הוא נהיה לא תקין.

פורסם
  • מחבר

לי זה די ברור אבל אולי אני טועה

כשאתה מגדיר STRUCT אז בעצם יש לי במשתנה הפנייה לעצם נכון? כמו כמגדירים מערך..

פורסם

כשאתה יוצר STRUCT הוא נוצר לך על המחסנית, לא בHEAP(כמו מערך רגיל שהגדרת).

כדי שהוא יהייה בHEAP אתה צריך ליצור מצביע(ה"הפנייה לעצם"), ולהקצות אותו דינאמית(כמו שמקצים מערך דינאמי עם malloc, רק להכניס גודל שונה).

פורסם
  • מחבר

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

ועוד משהו בתוכנית שבהודעה הראשונה שלי אין בעיה בערך שאני מקבל בSCANSTUD? (אולי זה יכול להיות מצביע?)

פורסם

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

זה גם מסביר לך למה לא ניתן לרשום את השורות הבאות:


int a[50];
a++;

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים