C 我似乎无法为字符串变量运行数组
我已经运行了无数次这段代码,我不确定它到底出了什么问题。每当我运行代码并选择“1”时,它都不会显示“subc”变量。“显示”选项。我得到的只是错误“除法错误”“异常程序终止”→ ' 这是我的密码: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,
#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可能对他的项目分数有害的缺陷。