簡體   English   中英

在C中包含結構數組的函數

[英]Functions containing Array of Structures in 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);
}

如何解決呢?

問題出在

  m+=(s[i].Test);

Test是一個數組,而不是一個普通( 標量 )變量。 它指向(或衰減到)數組第一個元素的起始地址。 這里將其添加到int沒有意義。

你可能想寫

 m+=(s[i].Test[j]);

就是說,正如我已經評論過的,您應該為以下代碼重寫scanf()語句:

  • 包括防止緩沖區溢出的最大字段寬度,例如對於數組大小為50的參數,如scanf("%49s",...)
  • 傳遞數組名稱,而不是數組地址,因為%s需要一個指向字符數組的指針,例如scanf("%49s",s[i].name);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM