Sunday, 15 June 2014

c - fgets() isn't prompting user a second time -


यहां कोड लिखा गया है।

  int main () {char enteredName [30 ]; चार स्ट्रिंग न्यू [4]; Char continuLetter = 0; Int continuProgram = 0; इं प्रवेश किया गया; Int i; करो {मिस्सेट (दर्ज किए गए नाम, '\ 0', 30); Printf ("कृपया एक नाम दर्ज करें:"); Fgets (प्रविष्ट नाम, 29, stdin); Printf ("\ n \ n अब अपनी उम्र दर्ज करें:"); Fgets (स्ट्रिंगनम, 3, स्टेडीन); के लिए (i = 0; i & lt; 30; i ++) {यदि (दर्ज किया गया नाम [i] == '\ n') {डाला गया [i] = '\ 0'; टूटना; }} के लिए (i = 0; i & lt; 4; i ++) {यदि (स्ट्रिंगनम [i] == '\ n') {stringNum [i] = '\ 0'; टूटना; }} दर्ज किए गए हैं = एटोल (स्ट्रिंगनम); } जबकि();   

जब मैं दूसरी बार पाश के माध्यम से चलाता हूँ, मैं चार सरणी में एक नया नाम दर्ज करने में सक्षम नहीं हूं, यह सिर्फ अगले संकेत (आयु) पर जाता है। जब तक इस मुद्दे में लिंक्ड सूचियां शामिल नहीं होती हैं, समस्या कुछ और ही होती है क्या आप मुझे त्रुटि ढूंढने में सहायता कर सकते हैं? धन्यवाद!

आपका दूसरा fgets कॉल पात्रों को छोड़ देता है (विशेष रूप से नई लाइन) प्रतीक्षा stdin से पढ़ने के लिए यदि आप दो अंक की आयु दर्ज करते हैं।

सरणी आकार से मिलान करने के लिए लंबाई पैरामीटर बढ़ाएं:

  fgets (stringNum) , 4, स्टडिन);   

या बेहतर: <पूर्व> fgets (स्ट्रिंगनम, साइज़न स्ट्रिंगन, स्टैडिन);

आप शायद दर्ज किए गए नाम के लिए ऐसा करना चाहते हैं।

< मजबूत> fgets () फ़ंक्शन आकार द्वारा दिए गए स्ट्रीम और स्टोर से वर्णित वर्णों की संख्या से कम से कम एक पर पढ़ता है उन्हें स्ट्रिंग str में

आप की तरह निरर्थक टर्मिनेटर के लिए अतिरिक्त सरणी प्रविष्टि को आरक्षित करने की आवश्यकता नहीं है। फिर से कर रहा है - fgets वह स्वयं को सही तरीके से संभालता है।

No comments:

Post a Comment