2017-01-20 212 views
0

目的:檢查用戶輸入()

如果用戶輸入bfloat打印張數floor(b), round(b), ceil(b)

其他打印scanf error: (%d)\n

該指令(由我們的老師提供)有這樣的代碼,我不明白。

這裏是我的代碼: `

#include <stdio.h> 
#include <math.h> 

int main(void) { 
    float b; 
    printf("Eneter a float number"); 
    int a=0; 
    a=5; 
    a=scanf("%d", &b); 
    if (a=0) 
    { 
     printf("scanf error: (%d)\n",a); 
    } 
    else 
    { 
     printf("%g %g %g",floor(b), round(b), ceil(b)); 
    } 
    return 0 
} 
+0

也許讀這可能有助於 - [man scanf](https://linux.die.net/man/3/scanf) –

+2

您不能使用「%d」作爲浮點數。 – stark

+0

@EdHeal:也可以用'-Wall'編譯(或者等價的,取決於編譯器)。 GCC'-Wall'會挑出'a = 0'和'%d'錯誤。 –

回答

4

錯誤#1

if (a=0) // condition will be always FALSE 

必須

if (a==0) 

或更好

if (0 == a) 

錯誤#2

scanf("%d", &b); // when b is float 

代替

scanf("%f", &b); 

UPDATE:

實際上,對於檢查scanf結果的情況下,我個人更喜歡使用!=與輸入的值的數量與最後的scanf。例如。如果需要兩個逗號隔開的整數,繼續計算片段可以是:

int x, y; 
int check; 
do{ 
    printf("Enter x,y:"); 
    check = scanf("%d,%d", &x, &y); // enter format is x,y 
    while(getchar()!='\n'); // clean the input buffer 
}while(check != 2); 

這個循環會重新要求輸入,如果check2,即如果是0時(甚至第一個值是不正確,如abc,12 ),或者如果它是1(當用戶忘記逗號或逗號後面輸入的不是數字,如12,y

+1

尤達不是更好(現代編譯器可以挑這個問題) –

+0

@EdHeal你已經證明他的老師是愚蠢的標準的基礎上但他並不是因爲他使用編譯器而不是僅僅閱讀這些標準。 –

+0

爲什麼'0 == a'比'a == 0'好? – thiagowfx

1

代碼的整改意見 - 也可以在這裏 - http://ideone.com/eqzRQe

#include <stdio.h> 
#include <math.h> 

int main(void) { 
    float b; 
// printf("Eneter a float number"); 
    printf("Enter a float number"); // Corrected typo 
    fflush(stdout); // Send the buffer to the console so the user can see it 
    int a=0; 
// a=5; -- Not required 
    a=scanf("%f", &b); // See the manual page for reading floats 
    if (a==0) // Need comparison operator not assignemnt 
    { 
     printf("scanf error: (%d)\n",a); // A better error message could be placed here 
    } 
    else 
    { 
     printf("%g\n", b); // Just to check the input with ideone - debugging 
     printf("%g %g %g",floor(b), round(b), ceil(b)); 
    } 
    return 0; // You need the semi-colon here 
} 

對於VenuKant薩胡益處

返回值

這些函數返回成功匹配 和分配的輸入項目數,其可以是較少在 的事件甚至爲零比規定,或早期匹配失敗。

如果在第一次成功轉換或發生匹配故障時 之前達到輸入的結尾,則會返回值EOF。如果發生讀取錯誤,EOF爲 也會返回,在這種情況下,流的錯誤 指示符(請參閱ferror(3))已設置,並且errno設置爲 表示錯誤。

+0

請告訴我,如果我是對的。 'scanf(「%f」,&b)'是一個函數,運行後返回1或0,1表示運行,0表示不運行。我可以認爲它是一個布爾值嗎? –

+0

否 - 因爲如果您在上面閱讀它可以返回EOF –