Есть две неотложные проблемы, которые нужно решить:
scanf("%[^/]/%d", X);
Как написано, это будет демонстрировать неопределенное поведение, так как он попытается проанализировать первую строку в X
, затем он читает '/'
, который разделяет, но затем он будет читать следующий набор цифр как номер без переменной для их хранения. Я бы посоветовал избавиться от конечного %d
в строке спецификатора формата.
Вам также следует проверить возвращаемое значение scanf()
, так как оно сообщит вам, сколько значений было проанализировано. Знание этого очень аккуратно ведет к решению главной проблемы: почему он обрабатывает только первое число?
Это потому, что вы вызываете scanf()
один раз, читаете номер, обрабатываете его, выводите результат, а затем прекращаете выполнение.
Что вам нужно сделать, это заключить большую часть кода в цикл while
и использовать следующую строку в качестве условия проверки цикла:
while (scanf("%[^/]/", X) == 1)
Это убивает двух зайцев одним выстрелом: он правильно проанализирует следующий набор цифр и войдет в цикл, если найдет что-нибудь, а если ничего нет, он должен вернуть 0, что приведет к прекращению цикла.