gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:17:00 24 4
gpt4 key购买 nike

您好,我必须创建一个数据库来存储学生编号、姓名,并用 C 编程语言存储一系列类(class)分数 (1-N)。

一切正常,直到我开始为类(class)分数数组编码。然后每次我编译代码时,只要要求输入类(class)分数,它就会崩溃。

能否请您告诉我我在为这项任务编写的程序中哪里出错了?我已将其附加到此消息中。

该程序可用于输入姓名、学号,但我无法让该程序输入标记数组。我问过要输入多少类(class)标记,然后在“void insert(void)”函数中使用 for 循环来继续将类(class)标记输入到数组 *marks 中。我特别指的是我的编程代码中的第 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");
}
}
}

最佳答案

除了其他人指出的,我想提请您注意以下几点:

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); 似乎您将 & 运算符放在不需要的地方,而忽略了需要的地方。下次提问前先阅读课本。

您似乎很难理解数组和指针的概念。在进入指针世界之前,请通读您的教科书。如果你没有正确使用它们,即使编译器也帮不了你。

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

关于C:结构数组(在结构数组中输入 int 数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35253901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com