c语言如何判断从键盘输入的是符号还是数字呢?

c语言如何判断从键盘输入的是符号还是数字呢?救命啊!悬赏分:0-离问题结束还有14天22小时c语言编程的时候,想弄这样一个程序。如果从键盘输入的是数字,包括正数与负数的时... c语言如何判断从键盘输入的是符号还是数字呢?救命啊!
悬赏分:0 - 离问题结束还有 14 天 22 小时
c语言编程的时候,想弄这样一个程序。如果从键盘输入的是数字,包括正数与负数的时候,继续执行后面的计算程序;如果从键盘输入的是数字以外的符号,比如26个英语字母或者问号?等等的符号的时候,要求重新输入。怎么编写这个判断语句?
问题补充:main()
{
float x, y;

reinput: printf("Please input x\n");
scanf("%f", &x);

(在此处插入判断x是不是数字的语句,如果不是数字goto: reinput;)

y = x;
printf("%f\n", y);
}

qian mian de 回答太简略了。我干脆又写了一个程序,希望高人能教我,如何补充上面这个程序(括号内)。请高人不吝赐教。
展开
 我来答
kaixingui2012
2015-09-24 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6481万
展开全部

C语言中,可以根据scanf()函数的返回值,判断输入的数据是否符合程序要求,该函数说明如下:

int scanf(const char *format, ...);

this functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even  zero  in  the event of an early matching failure. 该函数返回成功匹配并赋值给变量的个数,有可能少于想读的数据个数,甚至有可能是0(如果第一个格式串就匹配失败的情况下)。

如果格式串是%d,则,当用户输入一个非数字字符时,scnaf()就会匹配失败,返回0

利用这个特点,可以在程序中进行输入数据的有效判断。因为系统不会自动清理缓存中的数据,所以,在读入错误数据时,要及时清理缓存,以免造成死循环。如:

void main()
{
    int n;
    while( scanf("%d%*c", &n)!= 1 ) //用%*c来清除回车确认符和不合适的字符
    {
        printf("input error,please re-in:");
        fflush(stdin); //清除缓存,但此命令在linux下不起作用。windows可用。前面的%*c可以控制不会死循环。
    }
    printf("ur input is :%d\n", n );
}
luosiyong
2008-10-07 · TA获得超过3256个赞
知道大有可为答主
回答量:1090
采纳率:0%
帮助的人:1631万
展开全部
#include <stdio.h>

void main()
{
float x,y;
while(! scanf("%f",&x)) //如果没有正确读入
{
fflush(stdin); //清除输入流的错误信息
printf("Please input a float number:\n");
}
printf("%f\n",x);
}

给你简单的写了一下,从scanf返回值来判断是否成功读入数据,如果没有,就重新输入。
用了while循环,建议你不要用goto语句,goto语句是一个不好的习惯。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pzhaoyang
2008-10-07 · TA获得超过129个赞
知道小有建树答主
回答量:280
采纳率:0%
帮助的人:206万
展开全部
输入的东西要存在变量里,而变量的类型是决定了,是什么,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f55fe7cf1
2008-10-07
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

static int EnsureInt()
{
char a[100] = {0};
int i = 0,j = 1;
printf("Please input you want to set-num : \n");
scanf("%s", a);
printf("before while\n");

while(i < strlen(a))
{
if(a[0] != 45)
{
if((a[i] >= 48) && (a[i] <= 57))
{
i++;
}
else
{
break;
}
}
else if(a[0] == 45)
{

if((a[j] >= 48) && (a[j] <= 57))
{
j++;
i = j;
}
else
{
break;
}
}
}
printf("after while\n");
if(i < strlen(a))
{
printf("Input number invalid!\n");
return EnsureInt();
}

return atoi(a);
}
int main()
{
int x;

x=EnsureInt();
printf("x=%d\n", x);
return 0;
}

这段程序是保证输出为整数的,你参考一下吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zzzhiv
2008-10-07 · TA获得超过5101个赞
知道大有可为答主
回答量:1万
采纳率:0%
帮助的人:4003万
展开全部
判断ASCII值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式