आप %d
विनिर्देशक है, और %c
विनिर्देशक साथ char
के साथ conjuction में int
प्रकार का उपयोग करने की जरूरत है। और %u
बिना हस्ताक्षर किए पूर्णांक के साथ।
#include<stdio.h>
int main()
{
unsigned int one=0; unsigned int two=0;
printf("Quantity 1 = ");scanf("%u",&one);
printf("Quantity 2 = ");scanf("%u",&two);
printf("The value is %u",one);
return 0;
}
मूल रूप से, scanf
इनपुट से पूर्णांक को पढ़ने के लिए कोशिश करेंगे और यह स्मृति स्थान कि इतना बड़ा नहीं है, तो आप अपरिभाषित व्यवहार होगा अंदर यह स्टोर करने के लिए कोशिश करेंगे।
आपको अच्छा संदर्भ here मिल सकता है।
हालांकि, यदि आप इनपुट प्रकार के लिए चरित्र का उपयोग करने का प्रयास करते हैं, तो आप खुद से पूछ सकते हैं कि आपको दूसरी मात्रा में प्रवेश करने का मौका क्यों नहीं मिलेगा (यदि आप 4
टाइप करते हैं और एंटर दबाते हैं)। ऐसा इसलिए है क्योंकि दूसरा scanf
एक वर्ण के रूप में एंटर कुंजी पढ़ेगा। इसके अलावा, यदि आप 21
(बीस के लिए) टाइप करने का प्रयास करते हैं, तो यह 2
और 1
(साथ ही, उनके ASCII मानों के साथ) के साथ पहला मान भर देगा।
तो, सावधान रहें - सुनिश्चित करें कि आप हमेशा अपने चर के लिए सही प्रकार चुनते हैं।
स्रोत
2013-08-21 19:00:56
में आपका स्वागत है अतः करने के लिए। अच्छा सवाल आपके प्रश्न का प्रदर्शन। – chux
नीचे @Shade द्वारा दिए गए लिंक पर दिए गए अनुसार, यदि आप 'हस्ताक्षरित char' को चर प्रकार के रूप में उपयोग करना चाहते हैं, तो आप '% c' या'% hhu' प्रारूप निर्दिष्ट कर सकते हैं –
मूल कारण यहां एक ही समस्या है [ जब चरित्र को पढ़ने और int पढ़ने के लिए, मूल्य 4096 + ascii क्यों है] (http://stackoverflow.com/q/4973125/1281433)। 'scanf' मानों को स्टोर कर सकता है, लेकिन चूंकि एक' हस्ताक्षरित चार 'एक' int' (जो '% d' अपेक्षाओं के समान) के समान आकार नहीं है, इसलिए 'printf' प्राप्त होता है उस स्थान पर' printf' की अपेक्षा करता है। यह भी देखें [स्कैनफ और चार को एक पूर्णांक के रूप में रखते हुए] (http://stackoverflow.com/q/17643453/1281433)। –