Вы можете, если хотите сделать немного больше ручной работы.
Семейство функций strtof()
даст вам немного больше информации об ошибках, но они ожидают строку (char*
) в качестве ввода.
Для этого вам нужно сначала прочитать в буфер (scanf("%s", buffer)
будет работать для этого, но, как уже было отмечено, может быть подвержен ошибкам переполнения буфера, fgets()
защитит от этого), затем прочитать ваши два числа с плавающей запятой из этого буфера с strtof()
вот так:
printf("Enter a vector in the format x y: ");
scanf("%s %s", buffer1, buffer2);
char *cursor = buffer1;
temp.x = strtof(cursor, *cursor);
if(cursor < (buffer1 + strlen(buffer1)))
printf(" >Input Failure!\n");
cursor = buffer1;
temp.y = strtof(cursor, *cursor);
if(cursor < (buffer2 + strlen(buffer2)))
printf(" >Input Failure!\n");
Вызов scanf()
здесь читает две строки, разделенные пробелами (пробел, табуляция, символ новой строки и т. Д.), В buffer1
и buffer2
. Учитывая, что это scanf()
, вам нужно убедиться, что достаточно места для чтения двух строк, чтобы компьютер не просто начал писать слишком далеко.
Два вызова strtof()
здесь - каждое чтение начального пробела, за которым следует допустимое число с плавающей запятой, а затем cursor
к первому символу, который больше не является частью этого числа с плавающей запятой. Поэтому, если он попадет в символ, который не является частью действительного числа с плавающей запятой, он не достигнет конца строки, что означает, что был получен неверный ввод.