c - Is my Switch statement incorrect when using strtol? -
# अधिकतम 100 पूर्णांक * पी परिभाषित करें; Int * tos; Int * bos; शून्य पुश (इंट आई); इंट पॉप (शून्य); Int main () {int a, b; चारों [80]; P = (int *) malloc (अधिकतम आकार * (int)); / * स्टैक मेमोरी * / if (! P) {printf ("आवंटन विफलता \ n"); बाहर निकलने के (1); } Tos = p; बोस = पी + मैक्स -1; Printf ("\ n आरपीएन कैलक्यूलेटर \ n"); Printf ("पूर्णांक मोड के लिए 'आई दर्ज करें \ n"); Printf ("फ्लोटिंग प्वाइंट मोड के लिए 'एफ' दर्ज करें \ n"); Printf ("छोड़ने के लिए 'q' दर्ज करें \ n"); Char * endptr; करना {printf ("& gt;"); Scanf ("% s", s); इंट वेल = स्ट्रॉटल (एस एंड एंडप्टर, 10); If (* endptr == '\ 0') {// printf ("केवल पूर्णांक:% d \ n", val) मिला; } अन्य {printf ("ऑपरेटर:% s \ n", एंडप्टर); Printf ("पूर्णांक मिला:% d \ n", val); } / * परीक्षण * / स्विच (* एंडिप्ट) {केस 'आई': प्रिंटफ़ ("(पूर्णांक मोड) \ n"); टूटना; मामले 'एफ': printf ("(फ्लोटिंग पॉइंट मोड) \ n"); टूटना; मामले '+': ए = पॉप (); बी = पॉप (); printf ( "% d \ n", एक); printf ( "% d \ n", ख); प्रिंटफ़ ("% d \ n", ए + बी); धक्का (ए + बी); टूटना; मामले '-': a = pop (); बी = पॉप (); Printf ("% d \ n", बी-ए); धक्का (ख-एक); टूटना; मामले '*': ए = पॉप (); बी = पॉप (); Printf ("% d \ n", एक * ख); धक्का (एक * ख); टूटना; मामले '/': a = pop (); बी = पॉप (); यदि (a == 0) {printf ("शून्य से विभाजित नहीं किया जा सकता है \ n"); टूटना; } Printf ("% d \ n", b / a); धक्का (ख / एक); टूटना; मामले '।': A = pop (); (क) धक्का; Printf ("स्टैक के शीर्ष पर वर्तमान मान:% d \ n", a); टूटना; डिफ़ॉल्ट: पुश (एटियो (एस)); }} जबकि (* s! = 'Q'); // एंड लूप लूप रिटर्न 0; } // स्टैक शून्य पुश (इंट आई) पर एक एंटेंट रखें {if (p & gt; bos) {printf ("स्टैक फ़ुल \ n"); वापसी; } * P = i; पी ++; } // स्टैक इंट पॉप (शून्य) के शीर्ष से तत्व प्राप्त करें {p--; अगर (पी एंड एलटी; 0) {printf ("स्टैक अंडरफ्लो \ n"); वापसी 0; } वापसी * पी; }
मुझे लगता है कि मेरा स्विच स्टेटमेंट गलत है I मैं पूर्णांक को पार्स करने के लिए strtol
का उपयोग करता हूं और मैं देख सकता हूँ कि यह काम कर रहा है:
2++ ऑपरेटर: ++ को पूर्णांक मिला: 2
लेकिन अगर मैं यह कोशिश करता हूं:
1 + 2 +
मुझे मिल रहा है:
< ब्लॉकक्वाइट> ऑपरेटर: +
पूर्णांक समझे: 2
1
1
मुझे 0 के बजाय 2 और 2 1 की राशि के बजाय 1। किसी भी विचार?
आपको यह जांचना होगा कि क्या endptr
इनपुट पॉइंटर के समान है यह निर्धारित करने के लिए कि कोई रूपांतरण नहीं हुआ है:
यदि (endptr == s) {/ * कोई भी पूर्णांक नहीं मिला} /
Comments
Post a Comment