scanf
возвращает количество параметров, успешно обработанных, поэтому вам нужно сохранить его возвращаемое значение и проверить его.
Следовательно, вместо этого вы можете сделать if (scanf("%d", &x)) { ... } else {... }
, так как scanf
вернет либо 0 (целое число не найдено), либо 1 (если целое число было найдено)
EDIT
if (scanf("%d", &x)) {
/* an integer was read into x, so what do you want to do here? */
} else {
/* what the user typed was not an integer, so normally you want to write some error message or something */
}