用C语言存储学生姓名和成绩的数组

用C语言存储学生姓名和成绩的数组,c,arrays,pointers,dynamic-memory-allocation,C,Arrays,Pointers,Dynamic Memory Allocation,我正在尝试用C语言编写一个小程序,它将存储用户输入的学生人数的名字、姓氏和分数。到目前为止,我最大的问题是如何让每个学生的名字和成绩打印在新的一行上。使用字符串操作符,我得到一个错误,而使用char操作符,我只得到第一个字母和分数。我怎样才能把这些名字全部打印出来呢?提前谢谢你的帮助 #include <stdio.h> #include <stdlib.h> int main(){ int classsize,i; printf("Please ind

我正在尝试用C语言编写一个小程序,它将存储用户输入的学生人数的名字、姓氏和分数。到目前为止,我最大的问题是如何让每个学生的名字和成绩打印在新的一行上。使用字符串操作符,我得到一个错误,而使用char操作符,我只得到第一个字母和分数。我怎样才能把这些名字全部打印出来呢?提前谢谢你的帮助

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


int main(){
  int classsize,i;

  printf("Please indicate number of records you want to enter (min 5, max 15):\n");
  scanf("%d", &classsize);

  char *first, *last;
  double *mark;

  first=(char*)malloc(classsize*sizeof(char));
  last=(char*)malloc(classsize*sizeof(char));
  mark=(double*)malloc(classsize*sizeof(double));



  printf("Please input records of students (enter a new line after each record), with following format 1. first name 2. last name 3. score.\n");
  for (i=0; i<classsize; i++) {
    scanf("%s", &first[i]);
    scanf("%s", &last[i]);
    scanf("%lf", &mark[i]);
  }

  for (i=0; i<classsize; i++) {
    printf("%s, %s has a %lf\n", *(first+i), *(last+i), *(mark+i));
  }
}

变量中只能存储1个字符串,因为C中的字符串是char*。第一个是char*,第一个[i]是char,所以您有与此相关的错误。您希望第一个是char**,第一个[i]是char*

你想要

char **first, **last;
并更改分配,以说明您不需要键入malloc

然后在for循环中为first和last中的每个char*分配内存,然后再读取其中的名称

first[i] = malloc(some_size * sizeof(char));
...
//---------------------------------v
first=malloc(classsize*sizeof(char *));
first[i] = malloc(some_size * sizeof(char));
...