2014-09-25 2 views
0

Итак, я пишу код, чтобы интерпретировать ввод пользователей о том, выплачиваются ли они почасовой заработной плате или устанавливают зарплату. Я начал переключатель заявление и первое утверждение в нем является printf() & scanf() заявлением, которое читаетИдентификатор недопустимого преобразования '.'

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

компилятор продолжает давать мне сообщение об ошибке для scanf() заявления, которое говорит: «недопустимое спецификатор преобразования . ".

Я прошел проверку и проверил программу, и я попытался изменить заявление, извлекая $, а что нет, и ничего не работает.

Любые мысли?

+0

Просто поместите 'зсапЕ («\ n% d», & hRate); ' – Igor

+0

Почему вы используете« 5.2 »внутри scanf? Просто используйте scanf («% d», & hRate). –

ответ

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(), и т.д.

Смежные вопросы