C语言怎么控制输入

C语言如何控制输入
C语言怎么控制输入

请大家帮帮忙,求n!.

上面的代码也可以运行,但是我想控制输入。
即只能输入大于等于1的整数,输入其他任何元素都报错(字符、 实型、负数等),请问怎么控制?
------解决方案--------------------
使用头文件ctype.h中的isdigit
if(isdigit(n)){
   //......
}

------解决方案--------------------
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

仅供参考
#include <stdio.h>
int main() {
    int IP[4];
    int i;
    char c;

    printf("请输入一个ip地址:");fflush(stdout);
    while (1) {
        rewind(stdin);
        if (5==scanf("%d.%d.%d.%d%c",&IP[0],&IP[1],&IP[2],&IP[3],&c)) {
            if (0<=IP[0] && IP[0]<=255
             && 0<=IP[1] && IP[1]<=255
             && 0<=IP[2] && IP[2]<=255
             && 0<=IP[3] && IP[3]<=255
             && '\n'==c) {
                break;
            } else printf("输入的ip地址格式不对!\n请重新输入:\n");
        } else printf("输入的ip地址格式不对!\n请重新输入:\n");
    }
    for (i=0;i<4;i++) {
        printf("IP[%d]=%d\n",i,IP[i]);
    }
    return 0;
}


------解决方案--------------------
#include <stdio.h>

int main()
{
int ip[4]={0};
double n;
int x=1,i;
while(1){
printf("请输入n值:");
fflush(stdout);
    while (1)
{
        rewind(stdin);
scanf("%lf",&n);
        
if(n/10>=0  &&(int)n==n) 
{
break;

else 
printf("输入n不对!\n请重新输入:\n");
    }
for(i=(int)n;i>0;i--)
{
x=x*i;
}
printf("!%.1lf=%d\n",n,x);
x=1;
}
return 0;

}

引用了一下楼上的赵四老师的思想
在输入字符或者负数是n/10>=0就足够了 但是我不大明白怎么判断是否为整型,我之前定义的是int n,但是在输入2.3时判断条件(int)n==n不适用 ,于是我就定义了一个double型的n,不影响输入只是输出时会带一个小数点
------解决方案--------------------
哦 可以再输出时强制转换n为int型 
printf("!%d=%d\n",(int)n,x);
这样就可以了
------解决方案--------------------
控制不了输入,能做的就是收集全部输入,然后判断是否合法。
------解决方案--------------------
不断解决判断输入是否合法这种问题可以让程序员吃一辈子!C语言怎么控制输入