Я не думаю, что есть способ получить строку со знаками доллара и непустую строку между ними, используя семейство функций scanf()
. Наиболее близким подходом, вероятно, будет использование набора сканирования, но наборы сканирования не совпадают с регулярными выражениями, и вам потребуется регулярное выражение для указания искомого шаблона.
На практике вы могли бы получить первый знак доллара в строке, используя:
fscanf(inputSTREAM, " %1[$]%[^$]%*[$]", &out[0], &out[1]);
Вы не можете использовать тот же трюк для последнего знака доллара, даже если знаете точную длину строки. Проблема в том, что вам нужно переписать нулевое значение в конце строки вторым знаком доллара, и вам нужно NUL '\0'
после строки. Добавить последний доллар гораздо проще, чем первый в начале строки. Третий набор содержит подавляющий присвоение '*
' и требует в конце доллар. Ведущий пробел в формате пропускает пробелы.
Это не гарантированное поведение; первое преобразование записывает NUL через out[1]
, а второе преобразование затем записывает строку через out[1]
, но стандарт C не гарантирует, что он будет работать.
#include <stdio.h>
int main(void)
{
char out[20];
scanf(" %1[$]%[^$]%*[$]", &out[0], &out[1]);
printf("<<%s>>\n", out);
return 0;
}