0
この構造体を格納するために作成したが、合計を計算するとガベージ値が得られる。私は何度もそれを経験したが、間違いを見つけられなかった。合計を初期化しますが、答えが必要になることはありませんでした。合計を計算するたびに、以前と同じガベージ値が返されます。Cで構造体の配列を含む関数
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char name[50];
int Assignment[5];
int Test[2];
int Endsem;
int Total;
}student;
void read(student s[],int n)
{
int i,j;
for(i=0;i<n;i++)
{
printf("Enter the name of the student");
scanf("%s",&(s[i].name));
printf("Enter the assignment marks \n ");
for(j=0;j<5;j++)
{
scanf("%d",&(s[i].Assignment[j]));
}
printf("\n Enter the Test marks \n ");
for(j=0;j<2;j++)
{
scanf("%d",&(s[i].Test[j]));
}
printf("\n Enter the EndSem marks \n");
scanf("%d",&(s[i].Endsem));
printf("\n \n ");
}
}
void compute(student s[],int n)
{
int i,j,d=0,m=0;
for(i=0;i<n;i++)
{
s[i].Total=0;
for(j=0;j<5;j++)
{
d+=(s[i].Assignment[j]);
}
for(j=0;j<2;j++)
{
m+=(s[i].Test);
}
s[i].Total=(d+m+(s[i].Endsem));
printf("\n The total is %d out of 100",(s[i].Total));
}
}
void display(student s[],int n)
{
int i,j;
for(i=0;i<n;i++)
{
printf("The entries are");
printf("%s",(s[i].name));
printf("assignment marks \n ");
for(j=0;j<5;j++)
{
printf(" \n %d",(s[i].Assignment[j]));
}
printf("\nTest marks \n ");
for(j=0;j<2;j++)
{
printf("%d \n ",(s[i].Test[j]));
}
printf("\n EndSem marks \n");
printf("%d \n",(s[i].Endsem));
}
}
void main()
{
student s[1];
read(s,1);
display(s,1);
compute(s,1);
}
これを解決するにはどうすればよいですか?
あなたは* before *を表示するので計算しますか?つまり、初期化されていない*変数の値を出力し、その値は* indeterminate *になり、*未定義の動作*になります。 –
ようこそスタックオーバーフロー。あなたはあなたの質問を改善することができます。 [最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)をお読みください。あなたのコードが何も特別な問題であなたの正確な問題を示すとき、あなたはボランティアしてあなたを助ける人たちに敬意を表しています。 – zhon
サイドノート: 'scanf("%s "、&(s [i] .name));' - > 'scanf("%49s "、s [i] .name);' –