সম্ভবত খুব সুস্পষ্ট উপায়ে নিউলাইন চরিত্রটি সরানোর পদক্ষেপগুলি:
- হেডার
NAMEব্যবহার করে স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ করুন । নোট যে সমাপ্তি গণনা করে না ।strlen()string.hstrlen()\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))(খুব কম সময়ে দুটি প্রত্যাখ্যানগুলি ব্যবহার করবেন না! এবং!)