#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);