दिलचस्प पोस्ट
पीडीओ के साथ पंक्ति गिनती स्ट्रेस कैसे इस्तेमाल किया जाना चाहिए? सेकेंड में अधिक मानव पठनीय रूप में दिए गए समय अंतराल कन्वर्ट करें फ़ंक्शन फ़ील्ड के स्टोर पैरामीटर का उपयोग कैसे करता है? एंड्रॉइड – लोड पीडीएफ / पीडीएफ व्यूअर Google ने ओपनसीएल के बजाय रेंडरस्क्रिप्ट का चयन क्यों किया क्या एसक्यूएललेमी के पास डीजांगो के गेट_ओआरएक्रेट के बराबर है? AngularJS: त्रुटि रोकें $ $ पहले से ही प्रगति पर है जब $ दायरे को कॉल करते हैं। $ लागू होते हैं () संदर्भ जावास्क्रिप्ट बिना वस्तु क्लोन करें संग्रहीत कार्यविधि परिणाम सेट के लिए स्तंभ परिभाषा को पुनर्प्राप्त करें HTTP त्रुटि 500.19 – आंतरिक सर्वर त्रुटि J2ME के ​​लिए JSON पार्सर नेविगेशन ड्रॉवर में एक चेक किए गए मेनू आइटम का रंग बदलें जावा सीरियल करने योग्य वस्तु बाइट अर्रे से PHP में समानांतर प्रसंस्करण – आप इसे कैसे करते हैं?

क्यों मेरे scanf बयान में एक स्थान एक फर्क पड़ता है?

जब मैं नीचे कोड चलाता हूँ, यह काम करता है उम्मीद के अनुसार

#include <stdio.h> int main() { char c; scanf("%c",&c); printf("%c\n",c); scanf(" %c",&c); printf("%c\n",c); return 0; } 

अगर मैं दूसरे scanf कॉल ( scanf("%c",&c); ) में स्थान निकालता हूं, तो प्रोग्राम दूसरे scanf स्कैनिंग के अवांछनीय व्यवहार के साथ बर्ताव करता है जो '\n' स्कैन करता है और उसी को आउटपुट करता है।

ऐसा क्यों होता है?

Solutions Collecting From Web of "क्यों मेरे scanf बयान में एक स्थान एक फर्क पड़ता है?"

इसका कारण यह है कि जब आपने पहली बार scanf कॉल के लिए अपना चरित्र दर्ज किया था, तो चरित्र को दर्ज करने के अलावा, आपने "एंट" (या "रिटर्न") भी दबाया था। "एन्टर" कुंजीप्रेस मानक इनपुट को '\ n' भेजता है जो कि आपके दूसरे scanf कॉल द्वारा स्कैन किया गया है।

तो दूसरा scanf अभी आपके इनपुट स्ट्रीम में अगले अक्षर जो कुछ भी हो जाता है और आपके वेरिएबल को निर्दिष्ट करता है (अर्थात यदि आप इस scanf कथन में स्थान का उपयोग नहीं करते हैं)। इसलिए, उदाहरण के लिए, यदि आप अपने दूसरे scanf में जगह का उपयोग नहीं करते हैं और

तुम इसे करो:

 a<enter> b<enter> 

पहला scanf "a" को निर्दिष्ट करता है और दूसरा scanf "\ n" असाइन करता है।

लेकिन जब आप ऐसा करते हैं:

 ab<enter> 

लगता है कि क्या होगा? पहला scanf "a" प्रदान करेगा और दूसरा scanf "b" (और नहीं "\ n") निर्दिष्ट करेगा।

एक अन्य समाधान scanf("%c\n", &c); अपने पहले scanf कथन के लिए

जब आप चार पंक्तियों को रिक्त स्थान और खाली स्थान रिक्त करना चाहते हैं, तो उपयोग करें

 scanf("\n%c",&c); 

यह एक सम्मोहन की तरह काम करता है।

अपना पहला स्कैन करें: scanf("%c\n",&c); ताकि यह रिटर्न भी उठा सके।