程序在c中声明变量后返回垃圾值

时间:2018-02-21 09:03:04

标签: c multidimensional-array

我该如何纠正

  

我没有故意使用结构   这是一个输入学生姓名,科目和分数的程序。   在最后一个块中,数组(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;

        }
}

2 个答案:

答案 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];

每个学生每个科目一个标记,对吗?