c语言判断输入的是不是是数字(不止一位)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言判断输入的是不是是数字(不止一位)相关的知识,希望对你有一定的参考价值。
c语言判断输入的是否是数字(不止一位),帮忙看一下我的程序错在哪儿,为什么输入一个非数字字符并按下回车后程序一直输出input error!please iput again! 的信息(死循环了),而不是像我预期的那样继续等待重新输入?
#include <stdio.h>
void main()
int i ;
int a[10] ;
int r ;
for(i = 0 ; i < 10 ; )
r = scanf("%d", &a[i]) ;
if(r==1)
i++ ;
else
printf("input error!please input again!\n") ;
for(i = 0 ; i < 10 ; i++)
printf("%d\n",a[i]) ;
#include<stdio.h>
intmain()
charc;
c=getchar();
//来判断是否为数字,如果是数字那么会返回非0
if(is digit(c)!=0)
printf("是数字\\n");
//来判断是否为字母,如果是字母那么返回非0
elseif (is alpha(c)!=0)
printf("是字母\\n");
else
printf("是特殊字符\\n");
扩展资料
输入一个字符判断其是字母字符还是数字字符
#include<stdio.h>
int main()
char ch;
printf("Input ch:");
ch=getchar();
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))//判断是不是字母
printf("字母\\n");
else if(ch>='0'&&ch<='9')//判断是不是数字
printf("数字\\n");
else
printf("其他\\n");
return 0;
参考技术A写出一个宏定义,用于判断输入的一个字符是否是数字,若是得1,否则得0。
代码如下:
#include <stdio.h>
#define P(x) x>‘0’&&x<‘9’? 1:0
void main()
char ch;
printf(“请输入一个字符:\\n”);
scanf("%c",&ch);
printf("%d\\n",P(ch));
扩展资料
宏定义的优点:
方便程序的修改
使用简单宏定义可用宏代替一个在程序中经常使用的常量,这样在将该常量改变时,不用对整个程序进行修改,只修改宏定义的字符串即可,而且当常量比较长时, 我们可以用较短的有意义的标识符来写程序,这样更方便一些。
相对于==全局变量==两者的区别如下:
1、宏定义在编译期间即会使用并替换,而全局变量要到运行时才可以。
2、宏定义的只是一段字符,在编译的时候被替换到引用的位置。在运行中是没有宏定义的概念的。而变量在运行时要为其分配内存。
3、宏定义不可以被赋值,即其值一旦定义不可修改,而变量在运行过程中可以被修改。
4、宏定义只有在定义所在文件,或引用所在文件的其它文件中使用。 而全局变量可以在工程所有文件中使用,只要再使用前加一个声明就可以了。换句话说,宏定义不需要extern。
参考技术B1、使用 if(scanf("%d",&h)!=1) 来判断
printf("it's not a number!\\n");
因为scanf是从缓存中读取输入的数据如果输入的不是数字,就会返回0,如果是数字就会返回1;一般人不知道scanf还有返回值,就可以看看头文件中scanf的定义了。
2、例程:
int main()
int h;
while(!scanf("%d",&h))
fflush(stdin);
printf("\\n输入错误,请重新输入:\\n");
//其中fflush(stdin)是清理缓存,就像我上面说的scanf是从缓存取数的,
应该用字符串判断
#include <stdio.h>
bool ok(char s[])
int i;
for(i=0;s[i];i++)
if(s[i]>='0'&&s[i]<='9')//是数字,继续判断
continue;
else return false;//不是数字,就返回假
return true;//都是是数字返回真
int getVal(char s[])
int ret=0,i;
for(i=0;s[i];i++)
ret=ret*10+s[i]-'0';
return ret;
void main()
int i ;
int a[10] ;
int r ;
char s[100];
for(i = 0 ; i < 10 ; )
scanf("%s", s) ;
if(ok(s))
a[i]=getVal(s);//获得S的值
i++ ;
else
printf("input error!please input again!\n") ;
for(i = 0 ; i < 10 ; i++)
printf("%d\n",a[i]) ;
参考技术D #include <stdio.h>
void main()
int i ;
int a[10] ;
int r ;
for(i = 0 ; i < 10 ; )
r = scanf("%d", &a[i]) ;
if(r==1)
i++ ;
else
printf("input error!please input again!\n") ;
flushall(); //加上这行试试!加上这行试试!加上这行试试!
for(i = 0 ; i < 10 ; i++)
printf("%d\n",a[i]) ;
本回答被提问者采纳
急,急,急!!!!C语言判断输入的两个操作数数是不是是数字。(可以为负数),望高手赐教,不胜感激!!!
C语言判断输入的两个操作数数是否是数字。(可以为负数)
比如
#include "stdio.h"
void main()
double num1,num2,result;
char op;
printf("Please input an expression.Ex:1+2");
input:scanf("%f%c%f",&num1,&op,&num2);
if(//就是这里如何判断呢?判断它如果是数字,就进行运算,可以为负数)
switch(op)
case '+': result=num1+num2;
break;
case '-':result=num1-num2;
break;
case '*':result=num1*num2;
break;
case '/':
if(num2!=0)
result=num1/num2;
else
printf("error,input again:");
fflush(stdin);
goto input;
break;
case '%': if(num2!=0)
result=(int)num1%(int)num2;
else
printf("error,input again:");
fflush(stdin);
goto input;
break;
}
printf("%.2lf%c%.2lf=%.2lf",num1,op,num2,result);
goto input; //让程序可以不断执行
else
printf("Error expression,the operator must be numbers!,try again:");
fflush(stdin);
goto input;
判断函数是这个isdigit(),括号内为变量,是数字返回值为真,不是则为假
应该不能,抱歉。这个函数是字符判断函数,分析其ascii码是否在48到57之间,也就是0到9.
如果要实现你所说的,还要再多写一些函数。
对了,用数字转字符串函数,然后在一一判断书不是数字一级负号。 参考技术A 这里的num1和num2是双精度数据类型的变量,你按照%f格式读入数据,无论你输入的数据是什么,系统都是按数值读进来的,只是如果你给的数据类型不对,读进来的数据值是错误的,但是在num1,num2变量当中的内容一定数值,这是不用判断的。
可能你可以判断一下op中的内容是不是+-*/? 参考技术B //判断输入的函数
int keyinput()
char input[20]; //定义字符串接收输入,输入字符也不会错
int i=0;
scanf("%s",input); //接收输入
for(i;i<strlen(input);i++) //strlen 函数在 string.h
//isdigit 函数在 ctype.h 在vc++6.0中 isdigit() 如果是数字返回4
if(isdigit(input[i])!=4)
return 9999;//如果不是数字返回 9999 (这个自己定)
return atoi(input);//返回输入的值
说明:以上代码为代码段,如果使用的引用 (在文件最上方加上:#include “ctype.h” #include"string.h");
引用此函数,只用 调用 " 定义的int 型变量=keyint() "即可;
参考资料:自产
以上是关于c语言判断输入的是不是是数字(不止一位)的主要内容,如果未能解决你的问题,请参考以下文章