दिलचस्प पोस्ट
पिक्चरबॉक्स पर पारदर्शी नियंत्रण MvcSiteMap ने ब्रेडकंबों को गड़बड़ किए बिना एक मेनू का निर्माण किया एसक्यूएल रिकरेज़िव क्वेरी पर स्वयं रिफ़्रेंसिंग टेबल (ओरेकल) मूल्य प्रारंभ और गैर पीओडी प्रकार मोंगोडीबी के साथ एक "पसंद" मतदान प्रणाली को कैसे तैयार किया जाए डीकॉमपाइल। एसएमली एपीके पर फाइल सीएसएस लेआउट 2-कॉलम निश्चित-तरल पदार्थ PyQt4: रनटाइम पर QWidget ऑब्जेक्ट को बदलें जावा के साथ वाव फ़ाइलें कैसे खेलेंगी पूर्णांकों के अनुक्रम के लिए सर्वश्रेष्ठ संपीड़न एल्गोरिथ्म जावा 8 में नया जावा। सिक्युरिटी। एक्सेस कंट्रोल ईक्सेप्शन सीएसएस क्या हैं -मोज़- और -विबिट-? 32 बिट पूर्णांक के साथ कम टक्कर दर के साथ फास्ट स्ट्रिंग हैशिंग एल्गोरिथम अजगर – कैसे एक स्थानीय चर (एक समारोह के अंदर) बनाने के लिए वैश्विक कोणीय- UI राउटर: नेस्टेड दृश्य कार्य नहीं करना

सी में एकल वर्ण के लिए scanf कैसे करें

सी में: मैं scanf साथ उपयोगकर्ता से चारों को पाने की कोशिश कर रहा हूं और जब मैं इसे चलाऊँ तो प्रोग्राम यूजर को कुछ टाइप करने के लिए इंतजार नहीं करता …

यह कोड है:

 char ch; printf("Enter one char"); scanf("%c", &ch); printf("%c\n",ch); 

काम क्यों नहीं कर रहा है?

Solutions Collecting From Web of "सी में एकल वर्ण के लिए scanf कैसे करें"

%c रूपांतरण विनिर्देशक स्वचालित रूप से किसी भी अग्रणी व्हाइटस्पेस को नहीं छोड़ देगा, इसलिए यदि इनपुट स्ट्रीम में एक आवर्ती नई लाइन (उदाहरण के लिए पिछले प्रविष्टि से) है, तो scanf कॉल तुरंत इसे उपभोग करेगा

समस्या के चारों ओर एक रास्ता प्रारूप स्ट्रिंग में कनवर्ज़न विनिर्देशक से पहले रिक्त स्थान डालना है:

 scanf(" %c", &c); 

प्रारूप स्ट्रिंग में रिक्त स्थान को scanf करने के लिए scanf को अग्रणी व्हाइटस्पेस छोड़ना होता है, और पहले गैर-व्हाट्सपेस वर्ण %c रूपांतरण विनिर्देशक के साथ पढ़ा जाएगा।

सबसे पहले, scanf() से बचें इसका उपयोग करना दर्द के लायक नहीं है

देखें: क्यों हर कोई स्कैन एफ का उपयोग नहीं करता है? इसके बजाय मुझे क्या करना चाहिए?

scanf() में एक व्हाइसेस स्पेस का उपयोग इनपुट स्ट्रीम में छोड़े गए किसी भी अधिक सफेद स्पेस वर्णों को अनदेखा कर देगा, यदि आपको अधिक इनपुट पढ़ने की आवश्यकता है तो क्या होगा? विचार करें:

 #include <stdio.h> int main(void) { char ch1, ch2; scanf("%c", &ch1); /* Leaves the newline in the input */ scanf(" %c", &ch2); /* The leading whitespace ensures it's the previous newline is ignored */ printf("ch1: %c, ch2: %c\n", ch1, ch2); /* All good so far */ char ch3; scanf("%c", &ch3); /* Doesn't read input due to the same problem */ printf("ch3: %c\n", ch3); return 0; } 

जबकि 3 scanf () एक अग्रणी सफेद स्थान का उपयोग कर उसी तरह तय किया जा सकता है, यह हमेशा ऊपर की तरह सरल नहीं रहा है। एक और बड़ी समस्या यह है कि scanf() इनपुट स्ट्रीम में कोई भी इनपुट नहीं छोड़ेगा यदि यह प्रारूप से मेल नहीं खाता है। उदाहरण के लिए, यदि आप एक int लिए abc इनपुट करते हैं जैसे: scanf("%d", &int_var); फिर abc को पढ़ना होगा और त्याग दिया जाना चाहिए। विचार करें:

 #include <stdio.h> int main(void) { int i; while(1) { if (scanf("%d", &i) != 1) { /* Input "abc" */ printf("Invalid input. Try again\n"); } else { break; } } printf("Int read: %d\n", i); return 0; } 

एक अन्य आम समस्या scanf() और fgets() विचार करें:

 #include <stdio.h> int main(void) { int age; char name[256]; printf("Input your age:"); scanf("%d", &age); /* Input 10 */ printf("Input your full name [firstname lastname]"); fgets(name, sizeof name, stdin); /* Doesn't read! */ return 0; } 

fgets() को कॉल इनपुट के लिए प्रतीक्षा नहीं करता है क्योंकि पिछली scanf () कॉल द्वारा छोड़ी गई नई लाइन को पढ़ा जाता है और fgets () एक नई लाइन का सामना करते समय इनपुट पढ़ना बंद कर देता है

scanf() जुड़े कई अन्य समान समस्याएं हैं यही कारण है कि आम तौर पर इसे से बचने के लिए सिफारिश की है।

तो, वैकल्पिक क्या है? एक एकल वर्ण को पढ़ने के लिए निम्न फ़ैशन में fgets() फ़ंक्शन का fgets() करें:

 #include <stdio.h> int main(void) { char line[256]; char ch; if (fgets(line, sizeof line, stdin) == NULL) { printf("Input error.\n"); exit(1); } ch = line[0]; printf("Character read: %c\n", ch); return 0; } 

fgets() का fgets() करते समय एक विस्तार से पता होना चाहिए कि इनट बफर में पर्याप्त जगह है तो नए अक्षरों में पढ़ा जाएगा। यदि यह वांछनीय नहीं है तो आप इसे हटा सकते हैं:

 char line[256]; if (fgets(line, sizeof line, stdin) == NULL) { printf("Input error.\n"); exit(1); } line[strcpsn(line, "\n")] = 0; /* removes the trailing newline, if present */ 

fflush(stdin); डाल fflush(stdin); बफर साफ़ करने के लिए

यहाँ एक समान बात है जिसे मैं साझा करना चाहूंगा,

जबकि आप विजुअल स्टूडियो पर काम कर रहे हैं, आपको एक त्रुटि मिल सकती है: 'scanf': फ़ंक्शन या चर असुरक्षित हो सकता है। इसके बजाय scanf_s का उपयोग करने पर विचार करें। बहिष्कार को अक्षम करने के लिए, _CRT_SECURE_NO_WARNINGS का उपयोग करें

इसे रोकने के लिए, आपको इसे निम्न प्रारूप में लिखना चाहिए

एक एकल वर्ण को निम्नानुसार पढ़ा जा सकता है:

 char c; scanf_s("%c", &c, 1); 

जब गैर-निरर्थक समाप्त स्ट्रिंग्स के लिए एकाधिक वर्ण पढ़े जाते हैं, तो पूर्णांक को चौड़ाई विनिर्देश और बफर आकार के रूप में उपयोग किया जाता है।

 char c[4]; scanf_s("%4c", &c, _countof(c)); 

सादर,

getchar () का उपयोग करने का प्रयास करें; बजाय

वाक्य – विन्यास:

 void main() { char ch; ch = getchar(); } 

% C रूपांतरण विनिर्देशक से पहले एक स्थान प्रदान करता है ताकि कंपाइलर सफेद स्थान को अनदेखा कर सके। कार्यक्रम नीचे लिखा जा सकता है:

 #include <stdio.h> #include <stdlib.h> int main() { char ch; printf("Enter one char"); scanf(" %c", &ch); /*Space is given before %c*/ printf("%c\n",ch); return 0; } 

char तरह तार की बजाय स्ट्रिंग का उपयोग करें

 char c[10]; scanf ("%s", c); 

मैं इसे अच्छा काम करता है belive

यह मेरे लिए उपयुक्त है:

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

पता नहीं क्यों आपका कोड काम नहीं करता है मैं जीसीसी के साथ कोडेलीट का इस्तेमाल करता हूं