2017-05-29 59 views
-3
#include <stdio.h> 
#include <math.h> 
#include <stdlib.h> 
#include <ctype.h> 

int main() 
{ 
    float a; 
    float b; 
    float gr; 

    gr = (1 + sqrt(5))/2; 
    gr = floorf(gr*1000 + 0.5)/1000; 
    printf("Enter two numbers: "); 
    scanf("%f %f", &a, &b); 


    if(isalpha(a) || isalpha(b)) 
    { 
     printf("\nInvalid input.\n"); 
     exit(0); 
    } 

    float result = a/b; 

    if(floorf(result*1000+0.5)/1000 != gr) 
    { 
     float temp; 
     temp = a; 
     a= b; 
     b = temp; 
     result = a/b; 
    } 

    result = floorf(result*1000+0.5)/1000; 

    if(result == gr) 
    { 
     printf("\nGolden ratio!\n"); 
    } else if(result != gr) { 
     printf("\nMaybe next time.\n"); 
    } 
    return 0; 

} 

一切正常,除了「如果(因而isalpha(一)||因而isalpha(B))」的部分.. 罰款我要讓程序檢查用戶輸入是否是數字 但是當我運行它並輸入a和b時,它打印出「可能下一次」, 不是「無效輸入」... 任何幫助將感激!如何檢查,如果它是一個數字或不是在C

+2

一個好的開始將是看看['scanf'](http://en.cppreference.com/w/c/io/fscanf)*返回*。 –

+1

可能重複[如何檢查輸入是否是一個數字或不在C?](https://stackoverflow.com/questions/17292545/how-to-check-if-the-input-is-a-number -or-in-c) – jkp

+0

我還沒有得到如何解決這個問題......你能給我一個主意嗎? –

回答

1

讓我們假設你輸入2個字母,而不是數字:

Enter two numbers: x y 

因爲你用%fscanf預計數字。但由於第一個字母是x,它會立即停止。 ab都未改動。這意味着兩兩件事:

  • 由於ab是未初始化的,比較它們的值是沒有意義的。

  • 使用isalphaab是沒有意義的,因爲在所有的函數需要字符,不浮動

幸運的是,scanf返回成功轉換次數。所以改變你的測試

printf("Enter two numbers: ");  
if(scanf("%f %f", &a, &b) != 2) // 2 conversions expected 
{ 
    printf("\nInvalid input.\n") 
+0

哇..非常感謝你! –

相關問題