c语言判断输入的是否是数字(不止一位)

c语言判断输入的是否是数字(不止一位),帮忙看一下我的程序错在哪儿,为什么输入一个非数字字符并按下回车后程序一直输出inputerror!pleaseiputagain!... 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]) ;
}
展开
 我来答
小星星教育知识分享
高粉答主

2019-12-04 · 用教师的智慧点燃学生的智慧火花
小星星教育知识分享
采纳数:202 获赞数:67132

向TA提问 私信TA
展开全部

#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
高粉答主

2020-04-29 · 娱乐小八卦,天天都知道
娱乐小八卦啊a
采纳数:256 获赞数:117830

向TA提问 私信TA
展开全部

写出一个宏定义,用于判断输入的一个字符是否是数字,若是得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。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
推荐于2017-09-20 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:868万
展开全部

1、使用 if(scanf("%d",&h)!=1) 来判断
printf("it's not a number!\n");
因为scanf是从缓存中读取输入的数据如果输入的不是数字,就会返回0,如果是数字就会返回1;一般人不知道scanf还有返回值,就可以看看头文件中scanf的定义了。
2、例程:

#include <stdio.h>
int main()
{
int h;
while(!scanf("%d",&h))
{
fflush(stdin);
printf("\n输入错误,请重新输入:\n");
}
}

//其中fflush(stdin)是清理缓存,就像我上面说的scanf是从缓存取数的,

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友28b4182
2012-02-17 · TA获得超过7220个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1797万
展开全部
不能这么做的,你输入了不是数字的东西,输入就已经错误了.
应该用字符串判断
#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]) ;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_siliang
推荐于2017-09-27 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4514万
展开全部
#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]) ;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式