#c #scanf
#c #scanf
Вопрос:
Я пытаюсь загрузить два значения из строки, разделенной символом » — «.
Я не могу понять, что поместить в scanf, чтобы игнорировать это тире.
Вот упрощенный фрагмент, который иллюстрирует проблему:
char first[3];
char second[3];
char* str = "foo - bar";
sscanf(str, "%s <what should be here> %s", first, second);
printf("%s %s", first, second);
Если в заполнитель ничего не помещено, программа печатает «foo -»
Ответ №1:
Чтобы указать scanf
ожидаемое значение a -
, поместите a -
в строку формата:
sscanf(str, "%s - %s", first, second);
Кроме того, сделайте свои массивы достаточно большими, чтобы содержать ожидаемые символы плюс завершающий нулевой символ:
char first[4];
char second[4];
Вы также должны ограничить scanf
размер принимающих массивов:
sscanf(str, "%3s - %3s", first, second);
Если -
может отсутствовать, вам нужен дополнительный код для обработки этого; простого scanf
недостаточно. Аналогично, если строки могут быть длиннее трех символов, вам потребуется дополнительный код.
Комментарии:
1. Тестирование возвращаемого значения
sscanf()
кажется рекомендуемым, или массивы должны быть инициализированы как пустые строки.2. Я попытался вставить » — » между ними, но не получил правильного ответа, неудивительно, что массивы символов слишком короткие. Спасибо.
3. Убедитесь, что это на самом деле
'-'
(дефис), а не'–'
(тире) (и есть 3-й вариант, имя которого ускользает от меня сейчас)4. @DavidC.Rankin: дефис, короткое тире, тире, цифровая черточка, горизонтальная полоса и горизонтальная развертка — строка 7, по крайней мере.
5.@EricPostpischil — я исправлен. Эти причудливые настройки набора текста намного выше моего уровня оплаты за обработку текста. Я думал о тире en, и я знаю горизонтальную полосу, но цифровая черточка и горизонтальная линия сканирования являются новыми для моего языка. короткое тире. (хороший день — добавлено к нему, теперь для поиска
:)
тире и дефисов: полное руководство