reader.ReadString не удаляет начальный разделитель
В попытке создать программу, которая приветствует пользователей по имени Алиса или Боб, разработчик столкнулся с проблемой, из-за которой даже законные имена вызывали нежелательный ответ. Программа ошибочно отказала во входе Алисе и Бобу.
Проблема
Проблема связана с использованием readString('\n') в программе. . Эта функция извлекает символы до тех пор, пока не встретится символ новой строки. Однако он не удаляет разделитель из возвращаемой строки автоматически, что приводит к включению дополнительной новой строки во вводимые пользователем данные.
Решение
Чтобы решить эту проблему , существует два возможных подхода:
1. Обрезать новую строку
Используйте функцию strings.TrimSpace, чтобы удалить любые ведущие или конечные пробелы из входной строки перед ее оценкой. Это эффективно удаляет символ новой строки, вызвавший проблему.
if aliceOrBob(strings.TrimSpace(text)) { fmt.Printf("Hello, ", text) }
2. Используйте ReadLine вместо ReadString
В качестве альтернативы вместо ReadString можно использовать функцию ReadLine. ReadLine извлекает строку текста без включения символа новой строки в возвращаемую строку.
text, _, _ := reader.ReadLine() if aliceOrBob(string(text)) { fmt.Printf("Hello, ", text) }
Объяснение
Причина использования string(text) с ReadLine заключается в том, что ReadLine возвращает фрагмент байта, а aliceOrBob требует строковый аргумент.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3