//Getting student details. There are 2 classes and each class has 5 students.
#include<stdio.h>
#include<string.h>

struct student
{
    int rollNo;
    char name[20];
    int subjects[4][3];
};

int main()
{
    struct student s1[3][5]={
        {{1,"Vvvv",{{90,95,111},{85,94,111},{99,98,100}}},
         {2,"Mmmm",{{90,95,97},{85,94,100},{99,98,100}}},
         {3,"Innn",{{90,95,97},{85,94,100},{99,98,100}}},
         {4,"Ssnn",{{90,95,97},{85,94,100},{99,98,100}}},
         {5,"Kkkk",{{90,95,98},{85,94,97},{99,98,100}}}
        },
        {{11,"Arrr",{{90,95,99},{85,94,100},{99,98,100}}},
         {12,"Maaa",{{90,95,99},{85,94,99},{99,98,100}}},
         {13,"Mooo",{{90,95,97},{85,94,100},{99,98,100}}},
         {14,"Mnnn",{{90,95,97},{85,94,100},{99,98,100}}},
         {15,"Arii",{{90,95,99},{85,94,99},{99,98,100}}}
        }
    };
    
    printf("%d %d\n",sizeof(s1),sizeof(struct student));
    printf("---Student Details---\n");
   
    
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<5;j++)
        {
            printf("Roll No. : %d\n",s1[i][j].rollNo);
            printf("Name : %s\n",s1[i][j].name);
    
            for(int i=0;i<3;++i)
            {
                printf("\nSubject%d :\n",i+1);
                for(int j=0;j<3;++j)
                {
                    printf("Exam%d = %d ",j+1,s1[i][j].subjects[i][j]);
                }
                printf("\n");
            }
            printf("\n");
        }
        
        printf("\n\n");
    }
    
    return 0;
}

-> आउटपुट:

1080 72
Student Details---
Roll No. : 1
Name : Vvvv

Subject1 :
Exam1 = 90 Exam2 = 95 Exam3 = 97

Subject2 :
Exam1 = 85 Exam2 = 94 Exam3 = 100

Subject3 :
Exam1 = 0 Exam2 = 0 Exam3 = 0

Roll No. : 2
Name : Mmmm

Subject1 :
Exam1 = 90 Exam2 = 95 Exam3 = 97

Subject2 :
Exam1 = 85 Exam2 = 94 Exam3 = 100

Subject3 :
Exam1 = 0 Exam2 = 0 Exam3 = 0

Roll No. : 3
Name : Innn

Subject1 :
Exam1 = 90 Exam2 = 95 Exam3 = 97

Subject2 :
Exam1 = 85 Exam2 = 94 Exam3 = 100

Subject3 :
Exam1 = 0 Exam2 = 0 Exam3 = 0

Roll No. : 4
Name : Ssnn

Subject1 :
Exam1 = 90 Exam2 = 95 Exam3 = 97

मेरे प्रश्न हैं कि मुझे subjects[2][0], subjects[2][1] और subjects[2][2] के लिए 0 क्यों मिल रहा है?

लेकिन जब मैं आयामों की घोषणा करता हूं यदि सरणी विषयों को 3 x 2 (स्मृति आवंटन में त्रुटि से बचने के लिए अतिरिक्त पंक्ति) और स्ट्रुक छात्र चर s1 को 3 x 3 x 2 (यहां अतिरिक्त पंक्ति और तालिका के रूप में) के रूप में घोषित किया जाता है। इसलिए, जब मैं इस तरह की घोषणा करता हूं तो मुझे सही आउटपुट मिल रहा है।

कृपया कोई मुझे कारण बता सकता है कि मुझे सही आउटपुट क्यों नहीं मिल रहा है और सही आउटपुट प्राप्त करने के लिए मुझे क्या करना चाहिए?

शुक्रिया

1
INDHUJA G 13 जुलाई 2021, 19:20
कृपया अपना कोड सही ढंग से प्रारूपित करें (कोई डबल स्पेसिंग नहीं)।
 – 
fpiette
13 जुलाई 2021, 19:23
कृपया आप बता सकते हैं कि मुझे सही फॉर्मेटिंग कहां करनी चाहिए।
 – 
INDHUJA G
13 जुलाई 2021, 19:25
किसी ने यह आपके लिए किया है (@barmar)।
 – 
fpiette
13 जुलाई 2021, 19:26
धन्यवाद @barmar.
 – 
INDHUJA G
13 जुलाई 2021, 19:29
आपको क्या लगता है कि स्मृति आवंटन में त्रुटि से बचने के लिए आपको एक अतिरिक्त पंक्ति की आवश्यकता क्यों है?
 – 
fpiette
13 जुलाई 2021, 19:30

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा इसलिए हो रहा है क्योंकि आपने लूप के लिए आंतरिक में समान चर i,j असाइन किए हैं। मान लीजिए, बाहरी लूप में, किसी क्षण, i = 2, j = 3, लेकिन आंतरिक लूप में जाने के बाद, यह फिर से 0 हो जाता है क्योंकि (int i=0, int j=0)। और स्थिति जाँच के साथ परिदृश्यों का उल्लेख नहीं करना है।

 for(int i=0;i<2;i++)
    {
    for(int j=0;j<5;j++)
    {
        printf("Roll No. : %d\n",s1[i][j].rollNo);
        printf("Name : %s\n",s1[i][j].name);
        // HERE IS THE ERROR
        for(int i=0;i<3;++i)
        {
            printf("\nSubject%d :\n",i+1);
        // ALSO HERE
            for(int j=0;j<3;++j)
            {
                printf("Exam%d = %d ",j+1,s1[i][j].subjects[i][j]);
            }
            printf("\n");
        }
        printf("\n");
    }
    
    printf("\n\n");
}  

यहां आपके कोड का सही संस्करण है।

0
Daoist Paul 14 जुलाई 2021, 04:58
इस प्रश्न का उत्तर देने के लिए अपना समय देने के लिए आपका बहुत-बहुत धन्यवाद। मैं इसे ठीक कर दूंगा।
 – 
INDHUJA G
16 जुलाई 2021, 13:28