"ব্যাকস্পেস" পালানোর চরিত্র '\ বি': অপ্রত্যাশিত আচরণ?


101

সুতরাং আমি শেষ পর্যন্ত কে ও আর এর মাধ্যমে পড়ছি , এবং আমি প্রথম কয়েকটি পৃষ্ঠার মধ্যে কিছু শিখেছি যে সেখানে ব্যাকস্পেসের পালানোর চরিত্র রয়েছে \b,।

তাই আমি এটি পরীক্ষা করে দেখতে যাই, এবং এখানে খুব অদ্ভুত আচরণ রয়েছে:

#include <stdio.h>

main ()
{
    printf("hello worl\b\bd\n");
}

আউটপুট হয়

hello wodl

কেউ কি এই ব্যাখ্যা করতে পারেন?

উত্তর:


146

আপনি কী ধরণের টার্মিনাল বা কনসোল প্রোগ্রাম করছেন তার উপর নির্ভর করে আপনার ফলাফলটি পরিবর্তিত হতে পারে তবে হ্যাঁ, বেশিরভাগ \bক্ষেত্রেই একটি অনন্যতম ব্যাকস্পেস। এটি কার্সারটিকে পিছনে সরিয়ে দেয়, তবে সেখানে কী মুছে যায় না।

সুতরাং hello worlঅংশ জন্য, কোড আউটপুট

হ্যালো পোকা
          ^

... (যেখানে ^কর্সারটি কোথায় তা দেখায়) তারপরে এটি দুটি \bঅক্ষরকে আউটপুট দেয় যা কার্সারটিকে দুটি স্থানে মুছে না ফেলে (আপনার টার্মিনালে) পিছনে নিয়ে যায় :

হ্যালো পোকা
        ^

মনে রাখবেন কার্সারটি এখন চালু আছে r। তারপরে এটি আউটপুট d, যা ওভাররাইট করে rএবং আমাদের দেয়:

হ্যালো wodl
         ^

অবশেষে, এটি আউটপুট হয় \n, যা একটি অ-ধ্বংসাত্মক নিউলাইন (আবার বেশিরভাগ টার্মিনালগুলিতে, আপাতদৃষ্টিতে আপনার সহ) থাকে, সুতরাং এটি lঅপরিবর্তিত রেখে যায় এবং কার্সারটি পরবর্তী লাইনের শুরুতে সরানো হয়।


4
যদি তা মুছে না যায় তবে "আর" কেন চলে গেল?
সিসয়েড

4
@ এসোসইড: "আপনি কী ধরণের টার্মিনাল বা কনসোল প্রোগ্রামের উপর নির্ভর করে আপনার ফলাফলটি পরিবর্তিত হবে"
টিজে ক্রাউডার

এটি ঠিক যে আপনার উদাহরণ আউটপুট ফিট করে না, সুতরাং এটি কোনও সম্ভাব্য ব্যাখ্যার উদাহরণ নয়।
সিসয়েড

4
@ এসোইড দ্য rপ্রতিস্থাপন করা হয় d। ব্যাখ্যাটি এখনও ফিট করে।
সোকোকিত

4
@ এসোসয়েড: টার্মিনালটি সম্পর্কে আকর্ষণীয়। উইন্ডোজে, cmd.exeএবং command.comটার্মিনালগুলি সর্বদা sertোকায় না (আপনি আচরণটি টগল করার জন্য ইন কীটি ব্যবহার করতে পারেন)। আমি অবাক হয়ে জানতে পেরেছিলাম যে আমার মূল * নিক্স কম্পিউটারে জিনোম টার্মিনাল সর্বদা সন্নিবেশ করায়, এমনকি ইনস কী-এর উপর ভিত্তি করে এর চেয়ে কম টগল করার পছন্দও মনে হয় না। এর আগে কখনই লক্ষ্য করিনি। স্পষ্টতই আমি প্রায় টাইপওভার চাই না। :-)
টিজে ক্রাউডার

122
..........
print <= "মুদ্রণ মাথা" নির্দেশক
            /* part1 */
            printf("hello worl");
হ্যালো পোকা
          print <= "মুদ্রণ মাথা" নির্দেশক
            /* part2 */
            printf("\b");
হ্যালো পোকা
         print <= "মুদ্রণ মাথা" নির্দেশক
            /* part3 */
            printf("\b");
হ্যালো পোকা
        print <= "মুদ্রণ মাথা" নির্দেশক
            /* part4 */
            printf("d\n");
হ্যালো wodl

^ <= পরের লাইনে "মুদ্রণ শিরোনাম" নির্দেশক

পার্ট 4 এর পরে কার্সারটি 'l' বর্ণে থাকলে, এটি '\ n' দ্বারা প্রতিস্থাপন করা উচিত নয়? (ফলস্বরূপ "হ্যালো
ওয়ার

@ লুকাশ_তুরসি: জিনিসটি হ'ল '\n'পর্দায় তার প্রতিনিধিত্ব নেই। ইতিমধ্যে যা আছে তা একই থাকে; কোনও স্থান বা অন্য কোনও চরিত্রের উপস্থাপনা দ্বারা প্রতিস্থাপন করা হয়নি।
pmg

44

আপনি যদি একটি ধ্বংসাত্মক ব্যাকস্পেস চান তবে আপনার মতো কিছু দরকার

"\b \b"

অর্থাত্ একটি ব্যাকস্পেস, একটি স্থান এবং অন্য ব্যাকস্পেস।


এটি এখনও স্থানের অক্ষর ছেড়ে দেয় তাই না?
পেসারিয়ার

ঠিক আছে, হ্যাঁ, তবে \bপরবর্তীটির অর্থ পরবর্তী আউটপুট চরিত্রটি ওভাররাইট করবে।
পিটার কে।

4
পরবর্তী কোনও চরিত্র না থাকলে কী হবে ?
পেসারিয়ার

তাহলে ব্যাপার না, তাই না?
পিটার কে।

4
হুঁ। আপনার ডিভাইসটি "সর্বশেষ অক্ষর মুছুন" বিকল্পটি প্রয়োগ না করে (যেমন ডেল / 0x7f), আমি স্ট্যাম্পড।
পিটার কে।

8

ব্যাখ্যা করা খুব কঠিন নয় ... এটি টাইপ করার মতো hello worl, বাম-তীর কীটি দু'বার dআঘাত করা , টাইপ করা এবং ডাউন-তীর কীটি হিট করার মতো।

কমপক্ষে, আমি এভাবেই অনুমান করি যে আপনার টার্মিনালটি কোডগুলি \bএবং ইন্টারপেট করছে ing\n

আউটপুটটিকে কোনও ফাইলে পুনর্নির্দেশ করুন এবং আমি বাজি ধরছি আপনি সম্পূর্ণ অন্য কিছু পান। যদিও আপনাকে পার্থক্যটি দেখতে ফাইলের বাইটগুলি দেখতে হবে।

[সম্পাদনা]

কিছুটা বিশদভাবে printfজানাতে , এটি বাইটের ক্রমটি প্রকাশ করে: hello worl^H^Hd^Jযেখানে ^HASCII অক্ষর # 8 এবং ^Jএটি ASCII অক্ষর # 10। আপনার স্ক্রিনে আপনি যা দেখছেন তার উপর নির্ভর করে আপনার টার্মিনাল কীভাবে এই নিয়ন্ত্রণ কোডগুলি ব্যাখ্যা করে।


1

প্রতিটি চরিত্রের পরে একটি একক ব্যাকস্পেস ব্যবহার করুন printf("hello wor\bl\bd\n");


"হ্যালো wod \ n"? ওটার মানে কি?
ইলিয়াস হাসলে

উত্তরদাতা কেবল ওপি প্রত্যাশিত আচরণটি কীভাবে উত্পাদন করবেন তা দেখাতে চায়।
ইয়োলোমপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.