2016-07-26 8 views
5

यहाँ नीचे दिए गए कोड हैस्ट्रिंग के अंत में ' b' क्यों प्रभाव नहीं पड़ता है?</p> <pre><code>#include <stdio.h> int main(int argc, char* argv[]) { printf("WORDbb WORDbb"); return 0; } </code></pre> <p>जो इस उत्पादन उत्पन्न करता है:

WO WORD 

सवाल यह है कि क्यों पिछले \b अधिक विशेष रूप से, जब वे अंत में कर रहे हैं दूसरा शब्द पर प्रभाव नहीं पड़ता है स्ट्रिंग का?

+0

आप किस ओएस और टर्मिनल का उपयोग कर रहे हैं? – dbush

+5

मुझे लगता है कि ऐसा इसलिए है क्योंकि '\ b' केवल कर्सर को एक चरण में ले जाता है, और किसी भी वर्ण को हटा नहीं रहा है। कारण 'आर' और 'डी' पहले 'शब्द' से चला गया है क्योंकि आप उन्हें अंतरिक्ष और 'डब्ल्यू' के साथ ओवरराइट कर रहे हैं। – gurka

+1

'WORD \ b \ b WORD \ b \ b "' के साथ क्या होता है? मुझे संदेह है कि आपका टर्मिनल कर्सर को वापस ले जाता है लेकिन चरित्र को मिटा नहीं देता है। – Quentin

उत्तर

4

इसका कोई असर पड़ता है, प्रभाव कर्सर को वापस ले जा रहा है, लेकिन '\b' किसी भी वर्ण को तब तक नहीं हटाएगा जब तक आप उन्हें ओवरराइट नहीं करते।

यदि आप बाद में कुछ और प्रिंट करना चाहते हैं, तो प्रिंटिंग वर्तमान कर्सर स्थिति से फिर से शुरू हो जाएगी।

नोट: यह व्यवहार उस टर्मिनल पर निर्भर है जिसका उपयोग आप टेक्स्ट प्रदर्शित करने के लिए करते हैं।

2

यह मुख्य रूप से आपके द्वारा उपयोग किए जा रहे खोल/टर्मिनल पर निर्भर करता है और यह बैकस्पेस वर्णों को कैसे व्याख्या करता है।

ऊपर वर्णित व्यवहार विंडोज पर कमांड प्रॉम्प्ट में होता है। यह टर्मिनल स्पष्ट रूप से कर्सर को बैकस्पेस पर एक स्थान पर ले जाता है लेकिन चरित्र को हटा नहीं देता है। बैकस्पेस के बाद मुद्रित कोई भी वर्ण पहले लिखित वर्णों को ओवरराइट करता है।

उदाहरण के लिए

, यदि आप ऐसा करने के लिए किए गए:

printf("WORD\b\b WORD\b\bx"); 

आपका आउटपुट इस होगा:

WO WOxD 

विपरीत, निम्न में बैश परिणाम के तहत एक Ubuntu मशीन पर अपने कोड चल रहा आउटपुट:

WO WO 
संबंधित मुद्दे