সম্ভবত খুব সুস্পষ্ট উপায়ে নিউলাইন চরিত্রটি সরানোর পদক্ষেপগুলি:
- হেডার
NAME
ব্যবহার করে স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ করুন । নোট যে সমাপ্তি গণনা করে না ।strlen()
string.h
strlen()
\0
size_t sl = strlen(NAME);
- দেখুন যদি স্ট্রিংটি শুরু হয় বা কেবল একটি
\0
অক্ষর (খালি স্ট্রিং) দিয়ে থাকে। এই ক্ষেত্রে sl
হবে 0
যেহেতু strlen()
আমি doesn't উপরে বলেন গণনা \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()
স্ট্রিংয়ের অনুরোধে এন্টার টিপেন (স্ট্রিং সামগ্রীটি কেবলমাত্র একটি নতুন লাইন চরিত্রের সমন্বিত ছিল) তবে 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
এবং সেই নাল চরিত্রটি না হওয়া পর্যন্ত স্ট্রিংটি নেয়।
নিজে থেকে প্রশ্ন বাদে। ডবল negations যে আপনার কোড unclearer করা এড়াতে চেষ্টা করুন: if (!(fgets(Name, sizeof Name, stdin) != NULL) {}
। আপনি সহজভাবে করতে পারেন if (fgets(Name, sizeof Name, stdin) == NULL) {}
।
if (!fgets(Name, sizeof Name, stdin))
(খুব কম সময়ে দুটি প্রত্যাখ্যানগুলি ব্যবহার করবেন না! এবং!)