2014-09-25 3 views
0

그래서 저는 사용자에게 시간당 급여 지급 여부 또는 급여 설정 여부에 대한 해석을 작성하는 코드를 작성하고 있습니다. 나는 switch 문을 시작했는데 그 안에 첫 번째 문은 컴파일러는 나에게 말한다 scanf() 문에 대한 오류 메시지주고 유지잘못된 전환 식별자 '.'

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

을 읽는 printf() & scanf() 성명 : "잘못된 변환 지정자 .을 ".

나는 프로그램을 점검하고 점검했고, 진술을 변경하려고 시도했다. $을 꺼내서 아무것도하지 않았기 때문에 아무런 효과가없는 것으로 보인다.

의견이 있으십니까?

+0

그냥'는 scanf를 넣어 ("\ n % d", & hRate); ' – Igor

+0

scanf 내부에서 "5.2"를 사용하는 이유는 무엇입니까? 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); 

또 다른 방법은 더 나은 솔루션이 fgets()을 사용하여 전체 라인을 읽을 것이다 달러와 센트

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; 

과 같이 다음 sscanf(), strtol()를 사용하여 구문 분석 등

관련 문제