मैं यह पता लगाने के लिए फ़ंक्शन targetSum का उपयोग करने का प्रयास कर रहा हूं कि उपयोगकर्ता द्वारा दर्ज किए गए लक्ष्य मान से मेल खाने वाले सरणी में दो मान हैं या नहीं। यह सरणी, लक्ष्य, 2 सूचकांकों और सरणी के आकार को लेता है। जब मैं परिणाम को मुख्य फ़ंक्शन में आउटपुट करने का प्रयास करता हूं, तो इंडेक्स का मान नहीं बदलता है (भले ही मैं संदर्भ के रूप में गुजर रहा हूं)। मदद की सराहना की! [नीचे कोड]
int targetSum(int arr[], int size, int target, int index1, int index2)
{
int max, min, sum;
index1 = 0;
index2 = size - 1;
min = arr[index1];
max = arr[index2];
while (index1 != index2) {
sum = max + min;
if (sum == target) {
return 1;
}
else if (sum < target) {
index1++;
min = arr[index1];
}
else if (sum > target) {
index2--;
max = arr[index2];
}
}
return -1;
}
int index1, index2 = 0;
int target;
if(target == -999){ // the program exits if the user enters target as -999
printf("Good Bye");
break;
}
if (targetSum(toArr, size, target, &index1, &index2) == 1) {
printf("Output: Success! Elements at indices ");
printf("%d", index1);
printf(" and ");
printf("%d", index2);
printf(" add up to ");
printf("%d", target);
printf("\n");
}
else {
printf("Output: Target sum failed!\n");
}
2 जवाब
आप जो फ़ंक्शन में पास कर रहे हैं वह उसकी अपेक्षा से मेल नहीं खाता है।
targetSum
के अंतिम दो पैरामीटर int
प्रकार के हैं लेकिन आप int *
प्रकार के मान पास कर रहे हैं। आपके कंपाइलर को आपको इसके बारे में चेतावनी देनी चाहिए थी।
फ़ंक्शन पैरामीटर को पॉइंटर्स में बदलें:
int targetSum(int arr[], int size, int target, int *index1, int *index2)
फिर उन्हें फ़ंक्शन के शरीर में आवश्यक रूप से हटा दें।
फ़ंक्शन परिभाषा में, इंडेक्स 1 और इंडेक्स 2 चर से पहले हर जगह पॉइंटर ऑपरेटर (*) जोड़ें