यहां मैं नीचे एसी प्रोग्रामिंग लिखने की कोशिश कर रहा हूं, यहां मैंने एक डेटा प्रकार व्यक्ति बनाया है जिसमें दो तर्क नाम और संख्या है (उम्मीदवार का नाम और उन्हें प्राप्त वोट), और जब इसके लिए संकेत मिलता है इनपुट, यदि उपयोगकर्ता व्यक्ति की सरणी में नाम दर्ज करता है data_type और संख्या उस संख्या से मेल खाती है जो बढ़नी चाहिए, लेकिन मैं नीचे इस त्रुटि में फंस गया।

#include<stdio.h>
#include<cs50.h>
#include<string.h>
//Making person variable
typedef struct
{
    string name;
    int number;

}
person;

int update_vote(string name,person arr);

int main(void)
{
    person cand[4];
    cand[0].name="Brian";
    cand[1].name="David";
    cand[2].name="Obama";
    cand[3].name="Biden";
    
    cand[0].number=0;
    cand[1].number=0;
    cand[2].number=0;
    cand[3].number=0;
    
    //print the candidate names on the screen
    float len=sizeof(cand)/sizeof(cand[0]);
    int yu =(int) len;
    printf("Candidates Who are participating:");
    printf("\n");
    for (int i=0;i<yu;i++)
    {
      printf("%i.%s ",i+1,cand[i].name); 
    }
    printf("\n");
    
    //prompt for voters and take votes and update
    int voters=get_int("Enter the number of voters:");
    
    for (int j=0;j<voters;j++)
    {
        string vote=get_string("Enter your vote:");
        int update=update_vote(vote,cand);
        if (update!=-1)
        {
            cand[update].number++;
        }
        else{
            printf("Invalid name entered");
        }
    }
    
    printf("%d",cand);
    
}

int update_vote(string name,person arr)
{
     float len=sizeof(arr)/sizeof(arr[0]);
     int yu =(int) len;
     for(int i=0;i<yu;i++)
     {
         if (strcmp((name,arr[i].name)==0))
         {
             return i;
         }
     }
     return -1;
}

लेकिन यह पता लगाने में फंस गया कि त्रुटि नीचे क्यों हो रही है

त्रुटि: 'व्यक्ति [4]' को असंगत प्रकार 'व्यक्ति' के पैरामीटर में पास करना इंट अपडेट = अपडेट_वोट (वोट, कैंडिड);

0
Omkar 27 जुलाई 2021, 18:12

2 जवाब

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

त्रुटि इसलिए है क्योंकि आप person* पास कर रहे हैं जहां person एक तर्क के रूप में अपेक्षित है।

आपको तर्क के प्रकार को बदलना चाहिए ताकि वह एक सरणी (एक सूचक) प्राप्त कर सके।

यह भी ध्यान दें कि sizeofका उपयोग तर्क के रूप में पारित सरणियों के तत्वों की संख्या निर्धारित करने के लिए नहीं किया जा सकता है।. आपको तत्वों की संख्या अलग से पास करनी चाहिए।

एक और बात यह है कि printf("%d",cand); अपरिभाषित व्यवहार को लागू करेगा क्योंकि गलत प्रकार वाला डेटा पास हो गया है। %d int की अपेक्षा करता है। यदि आप एक पॉइंटर प्रिंट करना चाहते हैं, तो आपको इसे void* पर डालना चाहिए और %p फॉर्मेट स्पेसिफायर का उपयोग करना चाहिए।

ये कोशिश करें:

#include<stdio.h>
#include<cs50.h>
#include<string.h>
//Making person variable
typedef struct
{
    string name;
    int number;

}
person;

int update_vote(string name,person* arr,int arrSize); /* fix arguments */

int main(void)
{
    person cand[4];
    cand[0].name="Brian";
    cand[1].name="David";
    cand[2].name="Obama";
    cand[3].name="Biden";
    
    cand[0].number=0;
    cand[1].number=0;
    cand[2].number=0;
    cand[3].number=0;
    
    //print the candidate names on the screen
    float len=sizeof(cand)/sizeof(cand[0]);
    int yu =(int) len;
    printf("Candidates Who are participating:");
    printf("\n");
    for (int i=0;i<yu;i++)
    {
      printf("%i.%s ",i+1,cand[i].name); 
    }
    printf("\n");
    
    //prompt for voters and take votes and update
    int voters=get_int("Enter the number of voters:");
    
    for (int j=0;j<voters;j++)
    {
        string vote=get_string("Enter your vote:");
        int update=update_vote(vote,cand,yu); /* pass the number of elements */
        if (update!=-1)
        {
            cand[update].number++;
        }
        else{
            printf("Invalid name entered");
        }
    }
    
    printf("%p",(void*)cand); /* use correct way to print a pointer */
    
}

int update_vote(string name,person* arr,int arrSize) /* fix arguments */
{
     int yu =arrSize; /* use the passed size instead of sizeof */
     for(int i=0;i<yu;i++)
     {
         if (strcmp((name,arr[i].name)==0))
         {
             return i;
         }
     }
     return -1;
}
2
MikeCAT 27 जुलाई 2021, 15:15

क्योंकि व्यक्ति उम्मीदवार[4]; , जब आप " int update=update_vote(vote, cand);" का उपयोग करते हैं। , इसका अर्थ है 'व्यक्ति *' कि यह सूचक है।

0
Y.Jie 27 जुलाई 2021, 15:17