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

时间:2014-11-03 05:14:18

标签: c arrays pointers dynamic-memory-allocation

我正在尝试用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 个答案:

答案 0 :(得分:2)

char *first, *last;

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

你想要

char **first, **last;

并将分配更改为(请注意,您不需要进行类型转换malloc

//---------------------------------v
first=malloc(classsize*sizeof(char *));

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

first[i] = malloc(some_size * sizeof(char));
...