Если sscanf
считывает данные успешно, возвращается количество заполненных переменных. Если вы хотите, чтобы меньше чем 4
переменных было заполнено, чтобы считаться успешным, вы должны сказать:
if (sscanf(input,"%1[^,\n], %1[^,\n], %1[^,\n], %[^,\n]",a1, a2, a3, a4)<=4) {
printf("In");
}
Кроме того, при ошибке sscanf
вернет EOF
, но не вернет число больше 4
.
(обратите внимание, что для a4[1]
у вас нет места для терминатора. Используйте по крайней мере a4[2]
.)
и, поскольку вы хотите больше 4 заполненная переменная, которая будет рассматриваться как ошибка, вы можете добавить одну переменную к sscanf
, если она заполнена, это означает, что было взято более 4 входных данных, что неверно, и вы напечатаете ошибку
edit : если вам нужна переменная 4
, используйте следующий код:
char input[60];
char a1[42], a2[42], a3[42], a4[2],a5[42];
printf("Enter info");
fgets(input, 60, stdin);
if (sscanf(input, "%1[^,\n], %1[^,\n], %1[^,\n], %1[^,\n], %[^,\n]", a1, a2, a3, a4,a5) == 4) {
printf("In");
}
else
{
printf("error");
exit(EXIT_FAILURE);
}
}
сейчас, если вы введете a,b,c,d,e
, вы напечатаете ошибку, потому что теперь заполнено более 4 переменных.