如何在不使用isdigit的情况下检查数字是否不是C中的整数?

时间:2016-11-06 07:11:45

标签: c loops while-loop fibonacci

我一直在编写Fibonacci序列的代码(迭代地)。它扫描一个数字n,它输出F(n)直到我输入-1。问题是首先,我需要检查数字是否不是整数。如果它不是整数,则应输出“error”。

#include<stdio.h>
#include<ctype.h>

int main(){
    float n=0;
    int x=0,ver=0,Fn=0,last1=0,last2=0;

    scanf("%f",&n);
    ver=n;
    while(n!=-1){
        if(n-ver!=0 || !isdigit(ver)){
            printf("Error\n");
        }
        else if(n==1 || n==2){
            printf("1\n");
        } else{
            last1=1;
            last2=1;
            for(x=3;x<=n;x++){
                Fn=last1+last2;
                last1=last2;
                last2=Fn;
            }
            printf("%d\n",Fn);
        }
        getchar();
        scanf("%f",&n);
        ver=n;
    }
return 0;
}

我尝试过使用isdigit和!isdigit,但我仍然输出错误的输出。当我输入.11 $,1.-,1.23,KDhf等信息时,它应输出错误。

1 个答案:

答案 0 :(得分:0)

要查找斐波那契数字,您不需要nfloat类型。您可以使用任何整数类型。

要查找号码是否已成功扫描,请检查scanf()的返回值。

int n = 0;
if (scanf("%df",&n) != 1) {
    printf("Error\n");
    exit(EXIT_FAILURE);
}

删除此部分:

    if(n-ver!=0 || !isdigit(ver)){
        printf("Error\n");
    }

isdigit()只能处理一位数字。