"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا لا يقوم "reader.ReadString" بإزالة المحدد الأولي؟

لماذا لا يقوم "reader.ReadString" بإزالة المحدد الأولي؟

تم النشر بتاريخ 2024-12-21
تصفح:615

Why Doesn't `reader.ReadString` Remove the Initial Delimiter?

reader.ReadString لا يزيل المحدد الأولي

في محاولة لإنشاء برنامج يرحب بالمستخدمين المسمى أليس أو بوب، المطور واجه مشكلة حيث تسببت الأسماء الشرعية في استجابة غير مرحب بها. رفض البرنامج بشكل غير صحيح دخول كل من أليس وبوب.

المشكلة

تنبع المشكلة من استخدام Reader.ReadString('\n') في البرنامج . تقوم هذه الوظيفة باسترداد الأحرف حتى يتم العثور على حرف السطر الجديد. ومع ذلك، فإنه لا يقوم تلقائيًا بإزالة المحدد من السلسلة التي تم إرجاعها، مما يؤدي إلى تضمين سطر جديد إضافي في إدخال المستخدم.

الحل

لحل هذه المشكلة ، هناك طريقتان محتملتان:

1. قم بقص السطر الجديد

استخدم الدالة strings.TrimSpace لإزالة أي مسافة بيضاء بادئة أو لاحقة من سلسلة الإدخال قبل تقييمها. يؤدي هذا إلى إزالة حرف السطر الجديد الذي تسبب في المشكلة بشكل فعال.

if aliceOrBob(strings.TrimSpace(text)) {
    fmt.Printf("Hello, ", text)
}

2. استخدم ReadLine بدلاً من ReadString

بدلاً من ذلك، يمكن استخدام وظيفة ReadLine بدلاً من ReadString. يقوم ReadLine باسترداد سطر من النص دون تضمين حرف السطر الجديد في السلسلة التي تم إرجاعها.

text, _, _ := reader.ReadLine()
if aliceOrBob(string(text)) {
    fmt.Printf("Hello, ", text)
}

شرح

سبب استخدام السلسلة (النص) مع ReadLine هو أن ReadLine يُرجع شريحة بايت، بينما يتطلب aliceOrBob وسيطة سلسلة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3