Я пробую этот код, и он показывает некоторые странные результаты

#c

Вопрос:

 #include lt;stdlib.hgt; #include lt;stdio.hgt; #include lt;conio.hgt;   struct Sabjek {  int bm;  int bi;  int math;  int sains; };  struct Pelajar {  char studId[10];  char studName[20];  char clsRoom[20];  struct Sabjek subMark;  int totalMark; };  void displays(struct Pelajar studs[]) {  int i;  printf("ttSTUDENTS INFO");   for(size_t i=0;ilt;2;i  )  {  printf("nStudent ID: %s", studs[i].studId);  printf("nStudent's name: %s", studs[i].studName);  printf("nClassroom: %s", studs[i].clsRoom);  printf("nSubject Marks:- ");  printf("nBahasa Melayu: %d", studs[i].subMark.bm);  printf("nBahasa Inggeris: %d", studs[i].subMark.bi);  printf("nMatematik: %d", studs[i].subMark.math);  printf("nSains: %d", studs[i].subMark.sains);  printf("n---------------------------------n");  } }  int calcTtlMark(struct Pelajar studs[]) {  int i, total;  total= studs[i].subMark.bm studs[i].subMark.bi studs[i].subMark.math studs[i].subMark.sains;  return total; }  int main() {  struct Pelajar studs[2];  int i, sum;    for(size_t i=0;ilt;2;i  )  {  printf("nStudent ID: ");  scanf("%s", amp;studs[i].studId);  printf("nStudent's name: ");  scanf("%s", amp;studs[i].studName);  printf("nClassroom: ");  scanf(" %[^n]s", amp;studs[i].clsRoom);  printf("nSubject Marks:- ");  printf("nBahasa Melayu: ");  scanf("%d", amp;studs[i].subMark.bm);  printf("nBahasa Inggeris: ");  scanf("%d", amp;studs[i].subMark.bi);  printf("nMatematik: ");  scanf("%d", amp;studs[i].subMark.math);  printf("nSains: ");  scanf("%d", amp;studs[i].subMark.sains);  }   system("cls");  displays(amp;studs[i]);   printf("ttSTUDENTS TOTAL MARKS");    for(size_t i=0;ilt;2;i  )  {  printf("nTotal marks for student name: %s is ", studs[i].studName);  sum=calcTtlMark(amp;studs[i]);  printf("%d", sum);  }  printf("n---------------------------------n");  }  

и результат, который я получаю, выглядит так:

 STUDENTS INFO Student ID: CB1917 Student's name: man Classroom: mena Subject Marks:- Bahasa Melayu: 90 Bahasa Inggeris: 90 Matematik: 90 Sains: 90 ---------------------------------  Student ID: HA3421 Student's name: to Classroom: yaya an Subject Marks:- Bahasa Melayu: 40 Bahasa Inggeris: 40 Matematik: 40 Sains: 40 ---------------------------------  STUDENTS TOTAL MARKS Total marks for student name: man is1970359234 ---------------------------------  Total marks for student name: to is18494757 ---------------------------------  

Я хочу, чтобы результат выглядел так:

 STUDENTS INFO Student ID: CB1917 Student's name: man Classroom: mena Subject Marks:- Bahasa Melayu: 90 Bahasa Inggeris: 90 Matematik: 90 Sains: 90 ---------------------------------  Student ID: HA3421 Student's name: to Classroom: yaya an Subject Marks:- Bahasa Melayu: 40 Bahasa Inggeris: 40 Matematik: 40 Sains: 40 ---------------------------------  STUDENTS TOTAL MARKS Total marks for student name: man is 360 ---------------------------------  Total marks for student name: to is 160 ---------------------------------  

Как я могу устранить проблему внизу? Я пытался найти решения в Интернете, но не смог найти никаких ответов

Ответ №1:

Ваша i переменная in calcTtlMark неинициализирована, поэтому она возвращает мусор. Честно говоря, вам это даже не нужно i , потому что вы уже передаете указатель на нужный элемент. Поэтому измените его на:

 int calcTtlMark(struct Pelajar *stud) {  return stud-gt;subMark.bm   stud-gt;subMark.bi   stud-gt;subMark.math   stud-gt;subMark.sains; }  

Эта строка также обращается к неинициализированному i :

 displays(amp;studs[i]);  

Тебе повезло, что i здесь оказалось ноль. Вы все равно должны изменить его на:

 displays(studs);