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

请大家帮帮忙,求n!.
上面的代码也可以运行,但是我想控制输入。
即只能输入大于等于1的整数,输入其他任何元素都报错(字符、 实型、负数等),请问怎么控制?
------解决方案--------------------
使用头文件ctype.h中的isdigit
------解决方案--------------------
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
仅供参考
------解决方案--------------------
引用了一下楼上的赵四老师的思想
在输入字符或者负数是n/10>=0就足够了 但是我不大明白怎么判断是否为整型,我之前定义的是int n,但是在输入2.3时判断条件(int)n==n不适用 ,于是我就定义了一个double型的n,不影响输入只是输出时会带一个小数点
------解决方案--------------------
哦 可以再输出时强制转换n为int型
printf("!%d=%d\n",(int)n,x);
这样就可以了
------解决方案--------------------
控制不了输入,能做的就是收集全部输入,然后判断是否合法。
------解决方案--------------------
不断解决判断输入是否合法这种问题可以让程序员吃一辈子!
请大家帮帮忙,求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);
这样就可以了
------解决方案--------------------
控制不了输入,能做的就是收集全部输入,然后判断是否合法。
------解决方案--------------------
不断解决判断输入是否合法这种问题可以让程序员吃一辈子!