2014-09-25 81 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(),分析它,等