2011-11-28 26 views
5

मुझे नहीं पता कि मैं सिर्फ मूर्ख हूं, शायद मैं हूं, यह एक लंबा दिन रहा है, लेकिन यह काम नहीं कर रहा है जैसा मैं चाहता हूं, और , ठीक है, मैं नहीं देखता क्यों।एक सरणी में पूर्णांक की संख्या की गणना

यह 11 नंबर दर्ज करने में सक्षम होना चाहिए, प्रत्येक पंक्ति पर एक नई संख्या, उन्हें सरणी में जोड़ें, फिर कुल मिलाकर, फिर भी यह काम नहीं कर रहा है। यह लूप से बाहर निकलने के लिए रोक नहीं रहा है, भले ही मैं बढ़ रहा हूं।

कोई भी विचार?

int main(void) { 
int array[10]; 
int i; 
int sum = 0; 
    for (i = 0; i < 11; i++){ 
    scanf("%d", &array[i]); 
    } 
    for (i = 0; i < 11; i++) { 
    sum += array[i]; 
    } 
printf("%d", sum); 

return 0; 

}

+1

आपका सरणी केवल 10 तत्वों के लिए जगह है। – Lee

+0

यदि आप दस पूर्णांक की सरणी घोषित करते हैं, तो वैध अनुक्रमणिका 0 से 9 तक होती हैं; आपके कोड में आप सरणी [10] का भी उपयोग करते हैं जो कि दस की सरणी का 11 वां तत्व है। मुझे सी बिल्कुल नहीं पता लेकिन मुझे लगता है कि यह एक मुद्दा हो सकता है। मेरे 2 सेंट –

+0

यह एक बार या दूसरे में हम में से कई "काटा" है, हमेशा नहीं जब हम रैंक शुरुआती थे। विशेष रूप से उलझन में यदि आप सी-आधारित भाषा और (कुछ) 1-मूल-सरणी भाषाओं में से एक के बीच आगे बढ़ते हैं। –

उत्तर

4

आपके पास सरणी में 10 तत्व हैं, संख्या 0 - 9। आप बफर बह रहे हैं, इसलिए सभी दांव बंद हैं। यह अपरिभाषित व्यवहार है।

+1

आह जेस, मुझे पता था कि यह कुछ बेवकूफ था , मैंने सोचा कि 10 तत्व सरणी 0 से 10 है, इस प्रकार 11 तत्व .. बस मैं मूर्ख हूं – PnP

3

आप एक दस तत्व सरणी के लिए ग्यारह प्रविष्टियों नहीं जोड़ सकते।

+0

लेकिन सरणी 0 से शुरू होती है मैंने सोचा, और 0 से 10 तक, 11 तत्व हैं। – PnP

+0

ओह जीस, मुझे पता था कि यह वास्तव में बेवकूफ था, चीयर्स – PnP

+0

@ user1048116 यह 0-10 नहीं है, हालांकि कुल 10 तत्व हैं, इसलिए 0 से 9 –

3

मेरा अनुमान बफर ओवर-रन है क्योंकि फॉर-लूप 11 नंबरों में पढ़ता है और 11 वें नंबर सरणी के बाहर संग्रहीत हो जाता है, शायद मैं ओवरराइटिंग करता हूं।

लूप के लिए 11 से 10 को बदलने का प्रयास करें।

2

आप ग्यारह संख्याओं को आकार 10 की सरणी में संग्रहीत कर रहे हैं। इस प्रकार आप अंतिम तत्व को सीमाओं से बाहर संग्रहित कर रहे हैं, जो अपरिभाषित व्यवहार का आह्वान करता है।

कारण यह है कि इस अपरिभाषित व्यवहार आपके मामले में अनंत लूप रूप में प्रकट होता शायद उस i आपके सिस्टम पर स्मृति में array के बाद संग्रहीत किया जाता है और जब आप (array[10] में एक नंबर लिखना जो सीमा से बाहर है, जैसा कि मैंने कहा), आप i ओवरराइट कर रहे हैं। इसलिए यदि आपने 11 से कम संख्या में प्रवेश किया है तो यह लूप जारी रहेगा और एक बार इनपुट मांगेगा।

1

यदि कोई सरणी एक [10] है, तो प्रत्येक सरणी इसके सूचकांक संख्या 0 से शुरू होती है, इसलिए यहां 10 तत्व होंगे; यह देखते हुए कि उनकी स्थिति 0 से 9 तक शुरू होगी, गिनती 10 तत्व देती है।

आप इस कोशिश कर सकते हैं:

main()   
{   
    int a[10], i, n, sum=0;  

    printf("enter no. of elements"); 
    scanf("%d",&n); 
    printf("enter the elements"); 

    for(i=0;i<n;i++)  
     scanf("%d",&a[i]); 

    for (i=0;i<n;i++) 
     sum=sum+a[i]; 

    for(i=0;i<n;i++) 
     printf("\n a[%d] = %d", i, a[i]); 

    printf("\n sum = %d",sum); 
    getch(); 

} 
0

आप अपने सरणी घोषणा के साथ समस्या है। आप आकार 10 array[10] की सरणी परिभाषित कर रहे हैं और प्रोग्राम को तत्वों की गणना करने के लिए कह रहे हैं जिसके परिणामस्वरूप मेमोरी ओवरफ्लो होता है।

प्रोग्राम को सही करने के लिए केवल सरणी के आकार को array[11] के रूप में बढ़ाएं। अगर आप चाहें तो recursive approach to find sum of array elements देख सकते हैं।

-1
int main() 
{ 
    int a[10]; 
    int i,j; 
    int x=0; 
    printf("Enter no of arrays:"); 
    scanf("%d",&j); 
    printf("Enter nos:"); 
    for(i=0;i<j;i++) 
    { 
     scanf("%d",&a[i]); 
    } 
    for (i=0;i<j;i++) 
    { 
     x=x+a[i]; 
    } 
    printf("Sum of Array=%d",x); 
    return 0; 
} 
0

इस प्रयास करें:

void main() { 
int array[10]; 
int i; 
int sum = 0; 

    for (i = 0; i < 11; i++){ 
    scanf("%d", &array[i]); 
    } 
    for (i = 0; i < 11; i++) { 
    sum = sum + array[i] ; 
    } 
printf("%d", sum); 

return 0; 
} 
संबंधित मुद्दे