C:结构数组(在结构数组中输入到int数组)

时间:2016-02-07 13:11:55

标签: c arrays data-structures struct static-members

您好我必须创建一个数据库,用于存储学生编号,姓名,并在C编程语言中存储一系列课程标记(1-N)。

一切顺利,直到我开始编写课程标记数组。然后每当我编译代码时,它一旦要求输入课程标记就会一直崩溃。

你可以告诉我在我的编程中我遇到了什么问题吗?我已将其附加到此消息中。

该程序用于输入姓名,学号,但是我无法让程序输入标记数组。我已经询问要输入多少个课程标记,然后在" void insert(void)"中使用for循环。功能,以保持输入课程标记到数组*标记。我在编程代码中特指第24到30行。

此时程序始终崩溃,我无法继续输入更多名称或打印存储的学生详细信息。

我认为这部分存在问题:

for (i= 0; i < num_marks; i++)
{
    printf("Enter Course Mark: \n");
    scanf("%d", &(list[num_students].marks[num_marks]));
}

无论如何,这里是完整的代码:

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

struct student{
    int number;
    char name[10];
    int marks[5];
};
struct student list[10];

int num_students = 0;
int num_marks = 0;
int *p;

void insert(void)
{
    int student_number;
    int i;
    printf("Enter number: \n");
    scanf("%d", &list[num_students].number);
    printf("Enter NAME: \n");
    scanf("%s", &list[num_students].name);
    printf("Enter NO of courses: \n");
    scanf("%d", num_marks);
    for (i= 0; i < num_marks; i++)
    {
        printf("Enter Course Mark: \n" );
        scanf("%d", &(list[num_students].marks[num_marks]));
    }
    num_students++; // HOW DO WE INPUT ARRAY MARKS??? MARK1: , MARK2: , MARK3 ,
}

void printtest(void)
{
    int i;
    for (i=0; i < num_students; i++)
    {
        printf("Name: \n");
        puts(list[i].name);
        printf("Number: %d \n", list[i].number);
        printf("Mark: %d /100 \n", list[i].marks);
        printf("\n");
    }
}

int main(void)
{
    int code;
    int opt1;
    int courses, i, k, j, counter;
    for (;;){
        printf("Enter operation code: \n");
        printf("(1) ADD NEW STUDENT DETAILS: \n");
        printf("(2) DISPLAY REPORT OF ALL STUDENTS: \n");
        scanf(" %d", &code);
        switch (code){
            case 1 :
                insert();
                break;
            case 2 :
                printtest();
                break;
            default:
                printf("Illegal code\n");
                printf("\n");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

似乎是一个错误:

for (i= 0; i < num_marks; i++)
{
    printf("Enter Course Mark: \n" );
    scanf("%d", &(list[num_students].marks[num_marks]));
}

崩溃可能是因为num_marks作为数组之外的索引索引。改为:

for (i= 0; i < num_marks; i++)
{
    printf("Enter Course Mark: \n" );
    scanf("%d", &(list[num_students].marks[i]));
}

答案 1 :(得分:1)

除了其他人指出的内容之外,我还想提请你注意以下几点:

void insert(void)
    {
        int student_number;
        int i;
        printf("Enter number: \n");
        scanf("%d", &list[num_students].number);
        printf("Enter NAME: \n");
        scanf("%s", &list[num_students].name);
        printf("Enter NO of courses: \n");
        scanf("%d", num_marks);
        for (i= 0; i < num_marks; i++)
        {
            printf("Enter Course Mark: \n" );
            scanf("%d", &(list[num_students].marks[num_marks])); 
        }
        num_students++; 
    }

    void printtest(void)
    {
        int i;
        for (i=0; i < num_students; i++)
        {
        printf("Name: \n");
        puts(list[i].name);
            printf("Number: %d \n", list[i].number);
            printf("Mark: %d /100 \n", list[i].marks);
        printf("\n");
        }
    }

有三个有问题的陈述:

  1. scanf("%s", &list[num_students].name);这就是为什么初学者应该使用启用了所有警告的编译器。
  2. printf("Mark: %d /100 \n", list[i].marks);您首先声明marks是什么意思?
  3. scanf("%d", num_marks);似乎您将&运算符放在不需要的位置,并忽略所需的位置。在下次提问之前阅读您的教科书。
  4. 看起来你很难理解数组和指针的概念。在冒险进入指针世界之前,请仔细阅读您的教科书。如果你没有正确使用它们,即使编译器也无法帮助你。

    此外,即使我不希望您的程序具有强大的输入机制,至少需要进行数组边界检查。从一开始就学好习惯。他们将在以后调试时节省大量时间。