繁体   English   中英

C 中的结构和数组

[英]Structures and arrays in C

我必须创建一个专注于结构使用的程序。

该程序将要求用户输入他稍后将为其添加特定信息(姓名、平均成绩)的学生人数。

出于某种原因,当我启动程序时,我输入了我想要的学生人数,然后输入第一个学生的信息,然后程序终止。

这是我尝试过的。

#include <stdio.h>
#include <stdlib.h>

struct student
    {
        char *name;
        char *surname;
        float *average;
    };

    void inputs(struct student *a, int size);


int main()
{
    int size;

    printf("Enter the number of students: ");
    scanf("%d", &size);

    struct student *data;
    data = (struct student *)malloc(size*sizeof(struct student));
    if(data==NULL) {
        printf("Cannot allocate memory. The program will now terminate.");
        return -1;
    }

    inputs (data, size);

    return 0;
}

void inputs(struct student *a, int size)
{
    int j=0;
    int i;
    for(i=0; i<size; i++) {
        printf("Enter the name of the student number %d: ", j+1);
        scanf("%s", a->name);
        printf("Enter the surname of the student number %d: ", j+1);
        scanf("%s", a->surname);
        printf("Enter the average grade of the student number %d: ", j+1);
        scanf("%f", a->average);
        j++;
        a++;
        }
}


此代码有效:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student
    {
        char name[30];
        char surname[30];
        float average;
    };

    void inputs(struct student *a, int size);


int main()
{
    int size;
    int i=0; // we need i
    char string[100];

    printf("Enter the number of students: ");
    // scanf can be tricky lets use fgets
    fgets( string , 99 , stdin );
        size= atoi(string);

    struct student **data; // array of struct

    // get memory for the pointers to pointer
    data=(struct student **) calloc( size , sizeof(char *));
    // now each struct need space
    for( i=0 ; i<size ; i++)
    {
    data[i] = malloc(sizeof(struct student));
    if(data[i]==NULL) {
        printf("Cannot allocate memory. The program will now terminate.");
        return -1;
    }// end if
    }// end for loop

    // input each student
    for( i=0 ; i<size ; i++)
    inputs (data[i], i );

    return 0;
}

void inputs(struct student *a, int num)
{
    int j=0;
    char string[100];

    // scanf can be tricky lets use fgets
    printf("Enter the name of the student number %d: ", num+1);
    fgets(a->name, 29, stdin);
    printf("Enter the surname of the student number %d: ", num+1);
    fgets( a->surname , 29, stdin);
    printf("Enter the average grade of the student number %d: ", num+1);
    fgets( string , 99, stdin);
    a->average=atof(string);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM