शायद सबसे स्पष्ट तरीके से newline वर्ण को हटाने के लिए कदम:
- हेडर
NAME
का उपयोग करके स्ट्रिंग की लंबाई अंदर निर्धारित करें । ध्यान दें कि समाप्ति को गिनना नहीं है ।strlen()
string.h
strlen()
\0
size_t sl = strlen(NAME);
- देखें कि क्या स्ट्रिंग के साथ शुरू होता है या केवल एक
\0
वर्ण (खाली स्ट्रिंग) शामिल है। इस मामले में sl
हो सकता है 0
के बाद से strlen()
के रूप में मैं नहीं करता है ऊपर कहा गिनती \0
और यह की पहली आवृत्ति पर रुक जाता है:
if(sl == 0)
{
// Skip the newline replacement process.
}
- जांचें कि क्या उचित स्ट्रिंग का अंतिम वर्ण एक नया रेखा वर्ण है
'\n'
। यदि यह मामला है, \n
एक के साथ बदलें \0
। ध्यान दें कि इंडेक्स काउंट्स शुरू होते हैं 0
इसलिए हमें करने की आवश्यकता होगी NAME[sl - 1]
:
if(NAME[sl - 1] == '\n')
{
NAME[sl - 1] = '\0';
}
ध्यान दें कि यदि आपने केवल fgets()
स्ट्रिंग अनुरोध में दर्ज किया है (स्ट्रिंग सामग्री केवल एक newline वर्ण से मिलकर थी) NAME
स्ट्रिंग इसके बाद एक रिक्त स्ट्रिंग होगी।
- हम
if
तर्क ऑपरेटर का उपयोग करके चरण 2 और 3. को एक साथ केवल एक-संयोजन में जोड़ सकते हैं &&
:
if(sl > 0 && NAME[sl - 1] == '\n')
{
NAME[sl - 1] = '\0';
}
- समाप्त कोड:
size_t sl = strlen(NAME);
if(sl > 0 && NAME[sl - 1] == '\n')
{
NAME[sl - 1] = '\0';
}
यदि आप इस तकनीक का उपयोग करने के लिए एक फंक्शन पसंद करते fgets
हैं, तो सामान्य रूप से प्रत्येक और हर बार रीपिट किए बिना आउटपुट स्ट्रिंग्स को संभाल कर , यहाँ है fgets_newline_kill
:
void fgets_newline_kill(char a[])
{
size_t sl = strlen(a);
if(sl > 0 && a[sl - 1] == '\n')
{
a[sl - 1] = '\0';
}
}
आपके दिए गए उदाहरण में, यह होगा:
printf("Enter your Name: ");
if (fgets(Name, sizeof Name, stdin) == NULL) {
fprintf(stderr, "Error reading Name.\n");
exit(1);
}
else {
fgets_newline_kill(NAME);
}
ध्यान दें कि यदि इनपुट स्ट्रिंग इसमें एम्बेडेड है, तो यह विधि काम नहीं करती \0
है। अगर ऐसा होगा strlen()
तो केवल पहले तक ही पात्रों की राशि वापस होगी \0
। लेकिन यह बहुत सामान्य दृष्टिकोण नहीं है, क्योंकि अधिकांश स्ट्रिंग-रीडिंग फ़ंक्शन आमतौर पर पहले बंद हो जाते हैं\0
और स्ट्रिंग को उस अशक्त चरित्र तक ले जाते हैं।
अपने आप से सवाल के अलावा। अपने कोड को अस्पष्ट बनाने वाले दोहरे नकारों से बचने का प्रयास करें if (!(fgets(Name, sizeof Name, stdin) != NULL) {}
:। आप बस कर सकते हैं if (fgets(Name, sizeof Name, stdin) == NULL) {}
।
if (!fgets(Name, sizeof Name, stdin))
(बहुत कम से कम दो नकारात्मक का उपयोग नहीं करते; और! =)