Если вы уверены, что у вас всегда будет четыре входа, вы можете использовать что-то вроде:
scanf("%[^,],%[^,],%[^,],%[^,]", p[0], p[1], p[2], p[3]);
если вы не знаете количество входов, вы, вероятно, вместо этого выполняете чтение в цикле:
for (i=0; i<limit; i++)
if (!scanf("%[^,],", p[i]))
break;
if (i<limit)
scanf("%[^\n]", p[i]);
или, если хотите, вы можете написать цикл следующим образом:
for (i=0; i<limit && scanf("%[^,],", p[i]); i++)
;
В любом случае, это считывает данные, которые не содержат запятую, за которой следует запятая (то есть чтение, чтобы проверить ее наличие), пока не произойдет сбой. Предполагая, что данные в правильном формате, произойдет сбой, если есть данные без запятой. Затем мы делаем еще одно чтение после цикла, чтобы прочитать остаток строки в последнем элементе.
Обратите внимание, что если ваши данные также могут содержать запятую, что-то вроде:
(ааа, ГЭБ), (ссс, ддд)
где первый элемент данных должен быть "(aaa, bbb)", а второй "(ccc, ddd)", это будет не работать - для чего-то подобного вы можете переписать преобразование для отдельного ввода что-то вроде: «% [^)])» для чтения до закрывающей скобки, за которой следуют скобки и запятая.