اذهب إلى المحتوى

السؤال

نشر (معدل)

Hello,i'm learning c and i have a problem with my cod.

.i want to calculate the average for every exam, but it returns randomly numbers 

could you take a look

i'm sorry for english, i dont have arabic keybord.

#include<stdio.h>
#include<stdlib.h>

struct Student MStudent(struct Student std);
void CalcAvrg(struct Student std);

struct Student{
   int mark[5][5];
   
};

struct Student MStudent(struct Student std){
int i,j;

for(i=0;i<5;i++){
	for(j=0;j<5;j++){
	printf("%d. Student's mark for %d. exam :\n", i+1,j+1);
	scanf("%d", &std.mark[i][j]);	
}   
}

return std;
}
 
void CalcAvrg(struct Student std){
	int i;
	for(i=0;i<5;i++){
		printf("%d. Exam's average is: %d\n", i+1,
		(std.mark[0][i] +std.mark[1][i] + std.mark[2][i]+ std.mark[3][i]+ std.mark[4][i])/5);
	}
}

int main(){
      struct Student dene;
      MStudent(dene);
      CalcAvrg(dene);

	return 0;
}

 

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال

Recommended Posts

  • 0
نشر

مرحبا،

أنت تضيف الكلمة المفتاحية struct في كل مكان و هذا خاطئ.

نستخدمها فقط عند تعريف سجل جديد ثم نستخدم اسم هذا السجل مكان تعريف المتحولات التي من نوعه.

استخدمت التمرير بالعنوان & لا أعرف إذاكنت قد درسته وتعرفه من قبل.

عند تعريف المصفوفة mark قمت بإسناد قيمة إبتدائية لها بالقيمة 0 لجميع العناصر.

بما أنك تقوم بتعريف ترويسة للتوابع نكتبهم أسفل الدالة main وإلا اكتب جسم التابع كاملا قبل main.

في التابع CalcAvrg يمكنك استخدام حلقة مثل التي استخدمتها لإدخال العلامات أفضل من هذا الشكل الذي كتبت به.

#include<stdio.h>
#include<stdlib.h>

struct Student
{
    int mark[5][5] = {{0}};
};

void MStudent( Student& myStruct);
void CalcAvrg( Student& myStruct);

int main()
{
    struct Student dene;
    MStudent(dene);
    CalcAvrg(dene);
    return 0;
}
void MStudent( Student& myStruct)
{
    int i,j;
    for(i=0; i<5; i++)
    {
        for(j=0; j<5; j++)
        {
            printf("%d. Student's mark for %d. exam :\n", i+1,j+1);
            scanf("%d", &myStruct.mark[i][j]);
        }
    }
}

void CalcAvrg( Student& myStruct)
{
    int i;
    for(i=0; i<5; i++)
    {
        printf("%d. Exam's average is: %d\n", i+1,

        (myStruct.mark[0][i] + myStruct.mark[1][i] +
         myStruct.mark[2][i] + myStruct.mark[3][i] +
         myStruct.mark[4][i])/5);
    }
}

في حال لا تريد التمرير بالعنوان علينا إعادة إسناد القيمة المعادة من كل دالة إلى المتحول في الدالة main.

حتى نحتفظ بآخر نسخة من قيم السجل فيها.

بالتوفيق

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...