c语言中如何判断输入的是不是数字?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中如何判断输入的是不是数字?相关的知识,希望对你有一定的参考价值。
这个程序不难写,我告诉你思路和算法,你根据这个编写代码就可以了。1.由于你输入的这一串数据可能都为数字,也可能包含其它字符,所以首先用一字符数组存放这个字符串。
2.用strlen函数计算这个字符串的长度,在此基础上借助for循环或while循环实现数组元素的遍历。
3.遍历每一个元素的同时用if语句判断这个元素的ascii码所在的范围是否在48~57之间,如果不在则中止循环,输出判断结果(即不是数字)。
4.如果最后一个元素仍然是数字,则整个字符串则为一个大数。 参考技术A 你写的这个有太多的错误。至于定义数组的时候a[n]这种错误我就不讲了
还有在循环里面(i=1;i<n;i++)
n没赋值就调用的错误我也不讲了
讲你的死循环问题
你没有给循环加一个限制条件
根据你continue的意思我暂时理解为
如果输入的不是数字
那么一直循环
重新输入
一直到你输入的是数字为止跳出循环
对吗?
while(1)
printf("请输入要查的值\n");
ret=scanf("%d",&n);
printf("ret=%d\n",ret);
if(ret==0)
printf("输入错误,请重新输入\n");
continue;
break;
这样就可以
如果输入的是数字
scanf的返回值为1
那么循环的第一次
不会进入if(ret==0)
也就是说
如果输入的是数字
直接执行break跳出循环
如果输入的不是数字
循环的时候执行语句if(ret==0)
然后执行continue
continue的意思是跳出当前循环继续下一次循环
即执行到continue之后从新循环而不会执行到break
以此类推
只要你输入的不是数字
则永远循环
输入的如果是数字
跳出循环
执行完毕。
大哥
如果小弟回答正常
给点分吧
多谢
=================================================================
另外对于一楼的同学
我必须有好的提醒你scanf()的用法以及返回值的相关问题
我想你肯定不知道
scanf("%d",&i)
如果你输入的是int型则返回1
否则返回0
换句话说即你输入的类型和scanf()里面预先定义的类型一致
则返回1
否则返回0
thank
you 参考技术B #include<stdio.h>
void
main()
unsigned
short
int
y;
printf("请输入1~3000年的任意一年:");
while(scanf("%u",&y)==1)
scanf("%u",&y);
if
(y<1||y>3000)printf("\n输入年份错误!\n\n");
else
if
((y%4==0&&y%100!=0)||(y%100==0&&y%400==0))printf("\n%u年是闰年!\n\n",y);
else
printf("\n%u年不是闰年!\n\n",y);
printf("请输入1~3000年的任意一年:");
C语言中如何实现验证输入的是不是为数字?
isalpha isdigit isalnum 之类的函数就算了 行不通...
输入的数字可能为0~9999之间的数字,要判断输入的是否是这一范围的数还是其他字符
输入符合要求的进入下一语句
输入不符合的,给出提示,要求重新输入,直到输入正确为止
我知道这些函数包含在ctype.h里
另外,三楼的高手,你这个程序符合判定要求了,但如果输入的不是数字,输出ERROR以后不能再输入呀,然后再判断...直到输入正确为止
-----------------------
四楼大侠,用你的代码,比如随便输入dsk,不符合条件不能再次输入呀
先按字符串输入,然后对字符串进行检查,判定是否符合条件,若符合条件,则转为数值输出。代码如下:
#include <stdio.h>#include <string.h>
#include <stdlib.h>
int chk_data( char *num )
int i;
for( i=0;num[i];i++ )
if ( num[i] >'9'|| num[i] <'0' ) //只要有非数字,就返回错误
return 0;
if ( i>4 ) //都是数字,但长度超过4位,返回错误
return 0;
return 1;
void main()
char str[100];
while ( 1 )
printf("input :");
scanf("%s", str );
if ( chk_data( str )==0 )
printf("输入数据错误,请重新输入!\\n");
else
break;
printf("%d\\n", atoi(str) );
参考技术A 在头文件ctype.h中有很多验证变量的函数
所以你要验证字符的话要包含这个头文件 #include<ctype.h>
验证数字的函数是int isdigit(int c),C语言里面所区分大小写的.
下面我给一个例子
#include<ctype.h>
int main()
char *str = "2343#fd$%df34343dfsadkj";
int i;
for (i=0; str[i]!='\0'; i++)
if (isdigit(str[i]))
printf("%c is a digit\n", str[i]);
return 0;
参考技术B 那要看你的变量数据类型是什么?如果是字符型,那么可以用字符测试函数(就是你提到的这些),如果是数值数据类型,可以根据scanf()的返回值进行判断:
***********************************************
加一个循环不就可以了吗?如下:
//---------------------------------------------------------------------------
#include <stdio.h>
int main(void)
int a,fok=1;
do
if (scanf("%d",&a)&&a>=0&&a<10000) fok=0;
else puts("ERROR! re-input:\n");
fflush(stdin); /*清空缓冲区,避免遗留的字符影响后续的读取*/
while (fok);/*如果不满足要求,就重新输入*/
printf("%d\n",a);/*如果满足要求,就输出该数字*/
return 0;
//--------------------------------------------------------------------------- 参考技术C LZ要在C中实现这个功能比较麻烦,需要首先要用字符型输入来判断,之后把字符型转化为整型,我写了一段代码,给LZ参考:
----------------------------------------------------------
#include <stdio.h>
#define MAX 100 //最大输入长度为100
int CharToInt(char *a,int l); //把字符型转化为int型
int Ten(int k); //10的k次幂
int main()
char a[MAX];
int b; //最终输入的整数存放在b中
int i,l,flag;
while(1) //输入
for(i=0;i<MAX;i++)
scanf("%c",&a[i]);
if(a[i]=='\n')
break;
l=i;
if(l>4) //长度超过4位,非法输入
printf("输入非法,请重新输入\n");
continue;
flag=0;
for(i=0;i<l;i++) //判断每个字符是否在0~9之间
if(a[i]<'0' || a[i]>'9')
flag=1;
break;
if(flag==1) //其中有一个不在,则输入非法
printf("输入非法,请重新输入\n");
continue;
break;
b=CharToInt(a,l); //把字符型转化为int型
//继续执行下面程序
return 0;
int CharToInt(char *a,int l)
int i=0;
int b=0;
for(i=l-1;i>=0;i--)
b+=(a[i]-'0')*Ten(i);
return b;
int Ten(int k)
int i=0;
int b=1;
for(i=0;i<k;i++)
b*=10;
return b;
----------------------------------------------------------------
可以再次输入啊~~我试了dsk可以的本回答被提问者采纳 参考技术D c标准函数库里面提供了一个叫做isdigit的函数就可以用来了,使用前必须包含头文件ctype.h
以上是关于c语言中如何判断输入的是不是数字?的主要内容,如果未能解决你的问题,请参考以下文章