C 我似乎无法为字符串变量运行数组

C 我似乎无法为字符串变量运行数组,c,arrays,string,C,Arrays,String,我已经运行了无数次这段代码,我不确定它到底出了什么问题。每当我运行代码并选择“1”时,它都不会显示“subc”变量。“显示”选项。我得到的只是错误“除法错误”“异常程序终止”→ ' 这是我的密码: #include <stdio.h> #include <conio.h> char subj[20], name[20], course[20], studentid[20]; float grade[20], hold, gu[20], guadd, gpa, temp,

我已经运行了无数次这段代码,我不确定它到底出了什么问题。每当我运行代码并选择“1”时,它都不会显示“subc”变量。“显示”选项。我得到的只是错误“除法错误”“异常程序终止”→ '

这是我的密码:

#include <stdio.h>
#include <conio.h>

char subj[20], name[20], course[20], studentid[20];
float grade[20], hold, gu[20], guadd, gpa, temp, median, mode, max, a[20];
int z, i, h, n, tu, c, unit[20], count;

void disp(int n, int unit[], float grade[], char subj[], char name[], char studentid[], char course[])
{
    printf("Name: %s\n", name);
    printf("Course: %s\n", course);
    printf("Student ID: %s\n", studentid);
    printf("\n\nSubject\t\t\tUnits\t\t\tFinal Grade\n");

    for(i=0; i<n; i++)
    {
        printf("%s", subj[i]);
        printf("\t\t\t%d\t\t\t", unit[i]);
        printf("\%.2f\n", grade[i]);
    }
    tu=0;
    guadd=0;
    for(i=0; i<n; i++)
    {
        gu[i]=grade[i]*unit[i];
        tu+=unit[i];
        guadd+=gu[i];
    }
    gpa=guadd/tu;
    printf("\n\nSemester Grade Point Average:\t\t\t%.2f\n", gpa);
}

int main()
{
clrscr();
printf("Enter Student Name: ");
scanf ("%s", &name);
printf("Enter Student ID: ");
scanf ("%s", &studentid);
printf("Enter Course: ");
scanf ("%s", &course);
printf("Please Enter the Amount of Subjects Enrolled: ");
scanf ("%d", &n);

    for(i=0; i<n; i++)
    {
        printf("\nPlease Enter the Subject Name: ");
        scanf("%s", &subj[i]);
        printf("Please Enter the Final Grade for this Subject: ");
        scanf ("%f", &grade[i]);
        printf("Please Enter Number of Units for this Subject: ");
        scanf ("%d", &unit[i]);
    }
clrscr();
do
{
printf("\nPlease Choose an Option:\n\n1. Display Grades with GPA\n2. Ascending Order of Grades\n3. Descending Order of Grades\n4. Median and Mode\n5.EXIT\n\nChoice: ");
scanf ("%d", &z);
clrscr();

switch(z)
{
    case 1: disp(n, unit, grade, subj, name, studentid, course);
            break;
    case 2: ascending(n, grade);
            break;
    case 3: descending(n, grade);
            break;
    case 4: medmod(n, grade);
            break;
}
}
while (z!=5);


    getch();
    return 0;

}

顺便说一句,我是新手,所以我真的不知道问题出在哪里。谢谢你的帮助

我对您的代码做了一些更改,它可以正常工作

将char subc[20]替换为char*subc[20],因为您需要的是字符串数组,而不是单个字符串的字符数组。然后,从C的stdlib.h中为每个动态使用的malloc分配内存,比如至少100个字符

此外,gcc编译器生成的警告足够好,可以知道发生了什么,因此很明显可以修复printf和scanf函数的参数

PS:因为conio.h是不可移植的,所以我从代码中删除了它和它的函数

修改代码:

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

char *subj[20];
char name[20], course[20], studentid[20];
float grade[20], hold, gu[20], guadd, gpa, temp, median, mode, max, a[20];
int z, i, h, n, tu, c, unit[20], count;

void disp(int n, int unit[], float grade[], char *subj[], char name[],
      char studentid[], char course[]) {
  printf("Name: %s\n", name);
  printf("Course: %s\n", course);
  printf("Student ID: %s\n", studentid);
  printf("\n\nSubject\t\t\tUnits\t\t\tFinal Grade\n");

  for (i = 0; i < n; i++) {
    printf("%s", subj[i]);
    printf("\t\t\t%d\t\t\t", unit[i]);
    printf("\%.2f\n", grade[i]);
  }
  tu = 0;
  guadd = 0;
  for (i = 0; i < n; i++) {
    gu[i] = grade[i] * unit[i];
    tu += unit[i];
    guadd += gu[i];
  }
  gpa = guadd / tu;
  printf("\n\nSemester Grade Point Average:\t\t\t%.2f\n", gpa);
}

int main() {
  for (i = 0; i < 20; i++)
    subj[i] = malloc(sizeof(char) * 100);
  printf("Enter Student Name: ");
  scanf("%s", name);
  printf("Enter Student ID: ");
  scanf("%s", studentid);
  printf("Enter Course: ");
  scanf("%s", course);
  printf("Please Enter the Amount of Subjects Enrolled: ");
  scanf("%d", &n);
  printf("%s %s %s %d", name, studentid, course, n);

  for (i = 0; i < n; i++) {
    printf("\nPlease Enter the Subject Name: ");
    scanf("%s", subj[i]);
    printf("%s", subj[i]);
    printf("Please Enter the Final Grade for this Subject: ");
    scanf("%f", &grade[i]);
    printf("Please Enter Number of Units for this Subject: ");
    scanf("%d", &unit[i]);
  }
  do {
    printf("\nPlease Choose an Option:\n\n1. Display Grades with GPA\n2. "
       "Ascending Order of Grades\n3. Descending Order of Grades\n4. "
       "Median and Mode\n5.EXIT\n\nChoice: ");
    scanf("%d", &z);

    switch (z) {
      case 1:
        disp(n, unit, grade, subj, name, studentid, course);
        break;
      case 2:
        break;
      case 3:
        descending(n, grade);
        break;
      case 4:
        medmod(n, grade);
        break;
    }
  } while (z != 5);

  return 0;
}

我尝试了get和put,但它给了我一个错误“无法将int转换为char”。您可以使用多维数组存储n个主题、年级和单位。更好的方法是为主题成员创建一个结构数组,其中包含主题名称、等级和单位。当前,如果登记的受试者数量大于1,则最后一个受试者及其输入的详细信息将显示。函数不在此处,它们是否在另一个文件中?scanf%s,&subj[i];只有当SUBK是一个二维数组时,此语句才有意义。但是,您需要预先定义二维数组中每个字符串的最大长度。相反,您可以使用指针。请正确缩进代码。这是为了你自己;是全局变量,主要存储在全局变量中,然后调用disp,不需要char name[20]、course[20]、studentid[20];要传递给disp,它们是全局的。@BobRun是的,正确。虽然我没有把重点放在这一点上,因为这并不是OP迫切需要解决的问题。@jarvis我并不批评你的修复,只是试图告知OP可能对他的项目分数有害的缺陷。