2014-09-25 117 views
0

因此,我正在編寫代碼來解釋用戶輸入的是否支付小時工資或設定工資。我已經開始了一個switch語句,並在其中的第一條語句是printf() &一個scanf()聲明,上面寫着轉換標識符'。'無效

printf("Enter hourly wage: "); 
scanf("\n $%5.2d", &hRate); 

編譯器不斷給我的scanf()聲明說,一條錯誤消息:「無效的轉換符.

我已經通過並檢查了程序,並且我試過更改陳述,取出$以及什麼不是,似乎沒有任何工作。

有什麼想法?

+0

只要把'scanf函數(「\ n%d」,&hRate);' – Igor 2014-09-25 17:45:03

+0

爲什麼在scanf中使用「5.2」? 只需使用scanf(「%d」,&hRate)。 – 2014-09-25 17:48:25

回答

0

scanf不允許在轉換規範中使用可選的.

.可與某些printf轉換說明符一起使用。

scanf("%5d", &hRate); // allowed 
scanf("%5.2d", &hRate); // not allowed 
printf("%5.2d", hRate); // allowed 
0

'.'不是格式說明符"%d"的有效組成部分。

無論如何,你需要閱讀的價值是肯定的形式是「$ XXX.XX」

讀時薪爲浮動點值。

printf("Enter hourly wage: "); 
double dhRate; 
if (scanf(" $%lf", &dhRate) != 1) Handle_BadInput(); 
// covert to cents if needed 
int hRate = round(dhRate * 100.0); 

另一種方法解讀爲美元和美分

printf("Enter hourly wage: "); 
int hRate_d, hRate_c; 
if (scanf(" $%d.%d", &hRate_d, &hRate_c) != 2) Handle_BadInput(); 
// covert to cents if needed 
int hRate = hRate_d * 100 + hRate_c; 

更好的解決方案使用fgets()讀取整個行,然後使用sscanf()strtol(),分析它,等