Чтобы получить эффект, который вам нужен, %[^\n]*c
должно быть %[^\n]%*c
. Вам нужен спецификатор для первого шаблона, а затем спецификатор для одного символа. То, как вы это написали, теперь заставляет scanf
сопоставить все до новой строки, а затем прочитать последовательность *c
.
Он не может прочитать эту последовательность, но соответствует первому спецификатору. Таким образом, вы получите неиспользованный символ новой строки, который, вероятно, отключит ваш другой ввод.
Существует также потенциальная проблема вашего for (i=1;i>=1;i++)
, это условие подозрительно и может продолжаться некоторое время.
Теперь, хотя это все, вероятно, забавное упражнение, я предлагаю вам бросить scanf
и переключиться на fgets
, чтобы прочитать строки ввода. Он менее загадочный и заставляет вас передавать размер буфера, что делает его использование несколько проще и безопаснее по сравнению с scanf
.