Страница справочника scanf
:
В случае успеха эти функции возвращают число ввода элементов успешно сопоставлено и присвоено ;это может быть меньше, чем предусмотрено, или даже равно нулю, в случае неудачного раннего сопоставления.
Итак, вот пример, который может привести вас к решению вашей проблемы:
#include <stdio.h>
int main (int argc, char* argv)
{
double o;
int res;
// To illustrate, I chose to set up an infinite loop.
// If the input is correct, we'll "break" it
while(1)
{
printf("Enter a double: ");
res = scanf("%lf",&o);
// Success = 1 read input
if (res == 1)
{
printf("Yahoo, got it right: %f\n",o);
break; // We exit the loop
}
// Ah, we failed
printf("Please retry.\n");
// popping the CR character to avoid it to be got by the next scanf()
getchar();
// Here we go for another loop.
}
// Good, we got our double.
printf("Hey, sounds like we got outside this infinite loop.\n");
}
Пример:
user@so:~$ ./a.out
Enter a double: r
Please retry.
Enter a double: f
Please retry.
Enter a double: 6.543
Yahoo, got it right: 6.543000
Имейте в виду, что эта проверка не идеальна.Например, "frg6sgg"
будет успешным и будет отображаться как 6.0000000
на printf()
.