как проверить целое ли число язык си

мне нужно что бы пользователь ввел три целых чисел а если числа не целые то программа закрывалась я пытался делать проверку вот пример только здесь я зделал одно число что бы было проще забыл сказать нельзя использовать библеотеку math.h

int main()
{
   int num1 = 0;
   scanf("%d", &num1);
   if (num1 % 1 != 0){
       printf("eror");
   }
   printf("%d", num1);
}

только здесь оно округляет число сразу после ввода а это мне не нужно дальше я поменял переменную на double но компилятор стал ругать меня

int main()
{
    double num1;
    scanf("%lf", &num1);
    if (num1 % 1 !=0) {
        printf("eror");
    }
    printf("%lf", num1);
}

помогите решить эту проблему


Ответы (3 шт):

Автор решения: AlexGlebe
# include <stdio.h>
# include <stdint.h>
# include <stdbool.h>

static inline bool isint ( double d ) {
    return d == (int64_t)d ;
}

int main(){
    printf("isint(3) = %d\n",isint(3));
    printf("isint(3.1) = %d\n",isint(3.1));
}

isint(3) = 1
isint(3.1) = 0
→ Ссылка
Автор решения: Sergey

Мне кажется, что все вышеизложенные предложения больше похожи на гадание на кофейной гуще, а не на нормальное программирование :-)

А нормальный путь решения этой проблемы только один:

  1. Вводим строку содержащую запись числа
  2. Проверяем наличие в строке десятичной точки
  3. Если точки нет - преобразуем в целое.
  4. Если точка есть - преобразуем в double

В изложенном подходе соблюдается дисциплина работы с типами и нет тникаких неочевидных преобразований.

→ Ссылка
Автор решения: Генс
/*
В случае ввода вещественного числа: "ERROR" 
Без <math.h>  Всем добра! 
*/
#include<stdio.h>

int main(void)
{
int num, num1, i, da;
    printf("Введите целое число:\n");
for(i=0; i<3; )
{
da=scanf(" %d.%d", &num,&num1);
   if(da==1)
      i++;
   else 
      break;
}
if(da==2) 
    printf("ERROR\n");
return 0;
}
→ Ссылка