2016-11-06 19 views
-1

私はフィボナッチシーケンスのコードを(繰り返して)書いてきました。それは数nを走査し、-1を入力するまでF(n)を出力する。問題はまず、数値が整数でないかどうかを確認する必要があることです。整数でなければ、 "error"を出力するはずです。isdigitを使わずにCで整数が整数でないかどうかチェックする方法は?

#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などを入力するとエラーが出力されるはずです

+0

整数を読んでみませんか?そうでないものを与えると、 'scanf'は失敗します。 –

+0

@Someprogrammerdudeあなたはどういう意味ですか?申し訳ありませんが、私の英語は良くありません – Marelisse

+0

'scanf'の戻り値を確認してください。 – BLUEPIXY

答えて

0

フィボナッチ数を見つけるには、をfloatにする必要はありません。任意の整数型を使用できます。

数値が正常にスキャンされたかどうかを調べるには、戻り値を確認します。

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

そして、この部分を削除します。

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

isdigit()は唯一の1桁の数を扱うことができます。

関連する問題