как проверить целое ли число язык си
мне нужно что бы пользователь ввел три целых чисел а если числа не целые то программа закрывалась я пытался делать проверку вот пример только здесь я зделал одно число что бы было проще
забыл сказать нельзя использовать библеотеку 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 шт):
# 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
Мне кажется, что все вышеизложенные предложения больше похожи на гадание на кофейной гуще, а не на нормальное программирование :-)
А нормальный путь решения этой проблемы только один:
- Вводим строку содержащую запись числа
- Проверяем наличие в строке десятичной точки
- Если точки нет - преобразуем в целое.
- Если точка есть - преобразуем в 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;
}