2016-10-02 22 views
0

在下面的例子中,我希望能夠接受0作爲分子,但不是分母。我也希望排除非數字字符的輸入。我覺得我錯過了很簡單的東西,或者不太明白如何使用sscanf。我將如何使用sscanf接受零作爲輸入,但不是非數字輸入?

#include <stdio.h> 


int main(int argc, char *argv[]) { 

double numerator = 0.0; 
double denominator = 0.0; 
double result = 0.0; 


if (argc == 3.0) { 
    sscanf(argv[1],"%lf", &numerator); 
    sscanf(argv[2],"%lf", &denominator); 

    result = numerator/denominator; 


    if (denominator == 0){ 
     printf("invalid input - divide by zero not allowed\n"); 
    } 
    else if (numerator == 0){ 
     printf("invalid input\n"); 
    } 
    else printf("%lf\n", result); 


} 




return 0; 
} 
+0

在執行操作之前,您應該確實檢查有效值*。 –

+1

您可能還有興趣查看[這個'scanf'(和家庭)參考](http://en.cppreference.com/w/cpp/io/c/fscanf)。密切關注函數*返回的內容*。 –

回答

0

使用scanf系列功能,使舒爾即輸入有效的慣用方法是嘗試閱讀次數和控制之後東西,你只能得到一個單一的值:

if (argc == 3) { 
    char dummy[2]; 
    if (sscanf(argv[1],"%lf%1s", &numerator, dummy) != 1) { 
     printf("%s is not a valid input\n", argv[1]); 
     return 1; 
    } 
    ... 
sscanf(argv[2],"%lf", &denominator); 

%1s只會在輸入後允許空白字符(主要是空格或換行符)