转化标识符无效'。'

时间:2014-09-25 17:28:07

标签: c printf type-conversion scanf

所以我正在编写代码来解释用户关于他们是按小时工资还是设定工资的输入。我已经开始了一个switch语句,其中的第一个语句是printf()&一个scanf()语句,内容为

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

编译器不断给我一条scanf()语句的错误消息,上面写着:“无效的转换说明符.

我已经完成并检查了程序,我已经尝试更改语句,取出$而不是什么,似乎没有任何效果。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

scanf不允许在转化规范中使用可选的.

.可与某些printf转换说明符一起使用。

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

答案 1 :(得分: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()等解析它。