הכנסת מספר עד 100 כתו בC - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


SweeT_EviL

Recommended Posts

ידוע ש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! */

קישור לתוכן
שתף באתרים אחרים

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

קישור לתוכן
שתף באתרים אחרים

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

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


int a[50];
a++;

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...