답변:
printf("%05d", zipCode);
는 0
당신이 패딩과 무엇을 나타냅니다 5
쇼에게 정수의 길이를. 예를 들어 "%02d"
(날짜에 유용함)을 사용 하면 1 열의 숫자에 대해 0 만 채 웁니다 (. 06
대신 6
). 예제 2 "%03d"
는 1 열에서 1 개의 숫자에 대해 2 0을 채우고 10의 열에있는 숫자에 대해서는 1을 채워 넣습니다. 즉. (번호 7이 채워 007
지고 번호 17이가 채워짐 017
).
올바른 해결책은 우편 번호를 데이터베이스에 STRING으로 저장하는 것입니다. 숫자처럼 보일 수도 있지만 그렇지 않습니다. 각 부분마다 의미가있는 코드입니다.
숫자는 산술을하는 것입니다. 우편 번호는 그렇지 않습니다.
* NIX 시스템을 사용중인 경우 :
man 3 printf
다음과 유사한 매뉴얼 페이지가 표시됩니다.
0 값을 0으로 채워야합니다. d, i, o, u, x, X, a, A, e, E, f, F, g 및 G 변환의 경우 변환 된 값은 공백이 아니라 왼쪽에 0으로 채워집니다. 0 및-플래그가 모두 나타나면 0 플래그는 무시됩니다. 숫자 변환 (d, i, o, u, x 및 X)으로 정밀도를 지정하면 0 플래그가 무시됩니다. 다른 변환의 경우 동작이 정의되지 않습니다.
man
명령에 숫자 인수를 제공하면 특정 섹션으로 범위가 좁아집니다. 그것 없이는 printf
C 함수 대신 쉘 명령에 대한 매뉴얼 페이지를 얻을 수 있습니다.
보다 유연합니다. 다음은 고정 너비와 공백으로 채워진 오른쪽 정렬 된 숫자의 행을 인쇄하는 예입니다.
//---- Header
std::string getFmt ( int wid, long val )
{
char buf[64];
sprintf ( buf, "% *ld", wid, val );
return buf;
}
#define FMT (getFmt(8,x).c_str())
//---- Put to use
printf ( " COUNT USED FREE\n" );
printf ( "A: %s %s %s\n", FMT(C[0]), FMT(U[0]), FMT(F[0]) );
printf ( "B: %s %s %s\n", FMT(C[1]), FMT(U[1]), FMT(F[1]) );
printf ( "C: %s %s %s\n", FMT(C[2]), FMT(U[2]), FMT(F[2]) );
//-------- Output
COUNT USED FREE
A: 354 148523 3283
B: 54138259 12392759 200391
C: 91239 3281 61423
함수와 매크로는 printfs를 더 읽기 쉽도록 설계되었습니다.
#define FMT(x) (getFmt(8,x).c_str())
참고 !) 와 같은 함수를 정의하려는 것처럼 보입니다 .