संख्या के अंकों को दोबारा जोड़कर एक अंक को दिए गए नंबर को कम करने के लिए कोड निम्नलिखित है।कोड को तार्किक रूप से गलत होने पर भी मुझे सही आउटपुट क्यों मिल रहा है
उदाहरण के लिए यदि इनपुट 845
आउटपुट 8
है। 8+4+5 = 17 -> 1+7 = 8
if (sum > 9)
ब्लॉक में (उत्पादन)
#include <stdio.h>
#define TRUE 1
int reduceToSingle(int numb);
int main()
{
int numb;
scanf("%d",&numb);
printf("Original = %d Single digit = %d\n", numb, reduceToSingle(numb));
return TRUE;
}
int reduceToSingle(int numb)
{
int sum = 0, digit = 0;
for (digit = numb % 10; numb != 0; numb = numb/10)
{
digit = numb % 10;
sum += digit;
}
if (sum > 9)
reduceToSingle(sum);
else
return sum;
}
उपरोक्त कोड में मैं समारोह मान दिया नहीं किया है। मैंने बस इसके बजाय समारोह बुलाया। तर्कसंगत रूप से इस फ़ंक्शन को गलत मान देना चाहिए। लेकिन जब मैंने अपने सिस्टम में उपरोक्त प्रोग्राम चलाया तो मुझे आउटपुट में अंकों का सही योग मिला। मैं इस व्यवहार के पीछे तर्क को समझने में असमर्थ हूं।
यदि आप अपने डीबगर का उपयोग करके कोड के माध्यम से कदम उठाते हैं तो आप देखेंगे कि क्या हो रहा है। –
इसके पीछे तर्क नहीं है। अपरिभाषित व्यवहार वाले एक कार्यक्रम में * किसी भी * परिणाम हो सकते हैं, जिसमें आप उम्मीद करते हैं। –
इस अन्य प्रश्न में, 5 उत्तरों में से केवल 1 "सही" है [किसी संख्या के अंकों की गणना करने के लिए रिकर्सिव फ़ंक्शन से गलत आउटपुट] (http://stackoverflow.com/questions/7045189/incorrect-output-from- रिकर्सिव-फ़ंक्शन-टू-कंप्यूट-सम-ऑफ-ऑफ-ए-नंबर) –