【发布时间】:2016-08-30 15:53:43
【问题描述】:
我创建了这个结构来存储条目,但是当我计算总数时,我得到一个垃圾值。我经历了很多次,但仍然找不到错误。我也尝试初始化总数,但无法得到他需要的答案。每次我计算总数时,它都会给出与之前相同的垃圾值。
#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);
}
如何解决?
【问题讨论】:
-
因为您在计算之前显示?这意味着您将打印 uninitialized 变量的值,该变量的值将是 indeterminate 并导致 undefined behavior。
-
欢迎来到 Stack Overflow。你可以改进你的问题。请阅读Minimal, Complete, and Verifiable example。当您的代码不加赘述地显示您的确切问题时,您就是在尊重那些自愿帮助您的人。
-
旁注:
scanf("%s",&(s[i].name));-->scanf("%49s",s[i].name); -
...即使这样,第一个空格也会结束扫描,因此
Weather Vane将被截断为Weather。
标签: c arrays pointers structure