2016-10-15 58 views
-1

我正在編寫一個程序,通過計算變量ratePerHour,hoursWorked,bonus,overtimeSalary來計算總工資。一切工作正常,但是當我嘗試運行它時,它不會存儲任何變量的輸入值,也不會執行計算。函數問題(char *提示符) - 計算

我認爲問題是因爲有些不對勁我readNumber功能:

double readNumber(char *prompt) { 
    double val; 
    //print the prompt: 
    printf("%s", prompt); 
    scanf(" %lf", &val); 

    if (scanf("%lf", &val) != 1) { 
     printf("Invalid input.\n"); 
    exit(0); 
} 

另外還有一個問題就是程序應該詢問用戶是否他領取獎金或不和,如果用戶把n它不該不要求他輸入獎金,但出於某種原因,我的計劃確實如此。

char readYesOrNo(char *prompt) { 
    char yn = 'n'; 
    //display the prompt: 
    printf("%s", prompt); 

    yn = scanf(" %c", &yn); 

    //return the value 
    return(yn); 
} 

,並最終它顯示了我的計算是零,所以我覺得有一些錯誤的存儲值我會附上我的程序是什麼樣的畫面。我真的很感謝任何幫助,因爲我一直在努力。

enter image description here

+1

您的代碼示例已消失,因此無法分辨代碼和什麼是評論。這使人們很難提供幫助。 'yn = scanf('%c「,&yn)'形式的語句意味着'scanf()'會將一個值讀入'yn',然後立即丟棄它(通過覆蓋'scanf() ' - 從'int'截斷爲'char')。 – Peter

+0

你不想在'readNumber()'中退出(0);'您可能需要'返回val;'。另外,請使用評論符號在您的代碼中嵌入註釋。你的代碼非常類似C,非常非C++類似。 –

+0

將文字發佈爲文字,而不是圖片! – Olaf

回答

1

readnumber()你應該返回val代替或exit(0)

readYesorNo()即使您輸入了N,您仍將返回scanf1的返回值。

1

您認爲您需要閱讀多少次val

double readNumber(char *prompt) { 
    double val;   /* you have 1 val */ 
    print the prompt: 
    printf("%s", prompt); 
    scanf(" %lf", &val);   /* you read it the 1st time here (unneeded) */ 

    if (scanf("%lf", &val) != 1) { /* you read whatever the next num is here */ 
     printf("Invalid input.\n"); 
    exit(0); 
} 

您更好地獲得擺脫不必要的初始讀取和返回double因爲你已經宣佈的功能做的,例如:

double readNumber (const char *prompt) 
{ 
    double val; 
    printf ("%s", prompt);   /* print the prompt */ 
    if (scanf ("%lf", &val) != 1) { /* read/validate the double value */ 
     fprintf (stderr, "error: Invalid input.\n"); 

     exit(0); /* you can handle the error how ever you like here 
        * since you are returning a double, indicating success or 
        * failure by numeric return is a difficult proposition. 
        */ 
    } 
    return val; 
} 

注:傳遞promptconst char *prompt會幫助編譯器進一步優化例程 - 知道prompt不會改變)

(隨着您在C,您可以考慮一次讀取一行fgets,然後使用sscanf從緩衝區解析所需的值,或使用一對字符指針,這樣可以將讀取與解析/轉換解耦,從而提供更加靈活的輸入意外事件處理)。

readNumber改性上述一試(和注意:readnumber避免,因爲它們在C++中沒有與倍受寵愛用於C camelCase變量,它是一種風格的東西,所以這是你的,但它肯定會站在你可能不希望它爲那些閱讀你的C代碼)

其他答案已覆蓋yn返回yn這是不是你所想的那樣做,我不會在這裏重複。