我该如何纠正
我没有故意使用结构 这是一个输入学生姓名,科目和分数的程序。 在最后一个块中,数组(subject + f)的第一个下标返回垃圾值,而其余的下标返回所需的结果。 我还将输出图像作为链接发布。
#include<stdio.h>
#include<string.h>
int main()
{
int size,i,k,sub,a=0,reference;
int temp,sorted;
char temp_s[10];
char temp_sb[10];
printf("enter the size of class\n");
scanf("%d",&size);
printf("how many subjects are there?\n");
scanf("%d",&sub);
reference = sub;
char name[size][20];
char subject[size*sub][20];
int marks[sub*size];
int total,subtotal,retotal;
for(k=0;k<sub;k++)
{
printf("so what's the no. %d subject\n",k+1);
scanf(" %s",(subject[k]));
}
for(i=0;i<size;i++)
{
int j,k=0;
printf("Enter a name of student %d\n",i+1);
scanf(" %s",(name+i));
for(j=a;j<reference;j++)
{
printf("enter marks of %s\n",(subject[k]));
scanf("%d",(marks+j));
k++;
}
a=j;
reference=sub+j;
}
reference=sub;
a=0;
printf("\n list of students and marks:\n");
for(i=0;i<size;i++)
{
int j,f=0;
printf("%s\n",(name+i));
for(j=a;j<reference;j++)
{
printf("%s %d\n",(subject[f]),(marks[j]));
f++;
}
a=j;
reference=sub+j;
}
}
答案 0 :(得分:2)
除了姓名和科目长短的问题外,这是一个主要问题:
(subject+k)
您可能误解了subject[k]
和*(subject + k)
等价物。
变量subject
是一个数组数组。这意味着subject[i]
是一个数组(char
,可以用作以零结尾的字符串)。
表达式(subject + k)
是指向subject[k]
中数组的指针。它等于&subject[k]
,其类型为char (*)[10]
。如果没有解除引用,它不能用作以零结尾的字符串。因此,要么使用*(subject + k)
,要么使用简单的,更少写,更容易阅读的subject[k]
。
答案 1 :(得分:0)
我认为你还需要改变
int marks[sub];
到
int marks[size * sub];
每个学生每个科目一个标记,对吗?