우편 번호의 경우 01001과 같이 앞에 오는 0을 인쇄하는 좋은 방법을 찾으려고합니다. 번호는 1001로 저장되지만, 좋은 방법은 무엇입니까?C로 시작하는 0을 인쇄 중입니까?
나는 어느 case 문을 사용할지 생각해 보았다. 숫자가 몇 자리인지 파악한 다음 인쇄를 위해 여분의 0이있는 문자 배열로 변환하지만 도움이되지만 생각할 수는 없다고 생각합니다. 나를 빠져 나가는 printf 형식 구문으로이 작업을 수행하십시오.
우편 번호의 경우 01001과 같이 앞에 오는 0을 인쇄하는 좋은 방법을 찾으려고합니다. 번호는 1001로 저장되지만, 좋은 방법은 무엇입니까?C로 시작하는 0을 인쇄 중입니까?
나는 어느 case 문을 사용할지 생각해 보았다. 숫자가 몇 자리인지 파악한 다음 인쇄를 위해 여분의 0이있는 문자 배열로 변환하지만 도움이되지만 생각할 수는 없다고 생각합니다. 나를 빠져 나가는 printf 형식 구문으로이 작업을 수행하십시오.
printf("%05d", zipCode);
의 printf는 다양한 포맷 옵션을 할 수 있습니다.
예 : 당신이 * 괜찬아 기계에있는 경우
printf("%05d",zipcode);
직접 페이지 :
0 값은 0으로 채워야합니다. E, f, F, g 및 G 변환의 경우 변환 된 값은 공백이 아닌 0으로 왼쪽 에 채워집니다. 0 및 - 플래그 이 모두 표시되면 0 플래그는 무시됩니다. 숫자 변환 (d, i, o, u, x 및 X)이있는 의 정밀도가 제공된 경우 0 플래그는 이 무시됩니다. 다른 전환의 경우 동작이 정의되지 않습니다.
질문이 C 인 경우에도 this 페이지가 도움이 될 수 있습니다.
가 :
man 3 printf
이가 표시됩니다 당신은 최소 필드 폭 앞에 0을 배치
printf("leading zeros %05d", 123);
3 번호가 필요한 이유는 무엇입니까? – Elric
@ 엘릭'man' 명령어에 숫자 인자를 주면, 그 특정 섹션으로 범위를 좁 힙니다. 그것 없이는 C 함수 대신 쉘 명령어 인'printf'에 대한 맨 페이지를 얻을 수 있습니다. –
sprintf(mystring, "%05d", myInt);
여기에서 "05"는 "앞에 오는 0으로 5 자리 숫자 사용"이라고 말합니다.
올바른 해결책은 우편 번호를 데이터베이스에 STRING으로 저장하는 것입니다. 그것이 숫자처럼 보일 수도 있다는 사실에도 불구하고, 그것은 아닙니다. 각 부분이 의미를 갖는 코드입니다.
숫자는 산술 연산입니다. 우편 번호는 그렇지 않습니다.
우편 번호는 고도로 현지화 된 입력란이며 많은 국가에서 우편 번호에 문자가 있습니다 (예 : 영국, 캐나다). 따라서이 예제에서는 언제든지 다른 국가의 사용자/고객/클라이언트/기타를 출하하거나 가져 오는 경우 문자열/varchar 필드를 사용하여 저장해야합니다.
그러나 일반적으로 권장 답변 (printf("%05d", number);
)을 사용해야합니다.
우편 번호를 문자열이 아닌 숫자가 아닌 숫자로 저장하면 문제가 생길 수 있습니다 (장기적으로).
보다 융통성이 있습니다. 다음은 고정 폭 및 공백이있는 오른쪽 정렬 숫자의 행을 인쇄하는 예입니다.
//---- 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가 읽기 쉽도록 설계되었습니다. 당신은 문자 배열 우편 번호 []에 우편 번호를 저장해야하는 경우
인데 나는 당신의 의도를 100 % 확신 할 수는 없지만'#define FMT (x) (getFmt (8, x) .c_str())'(* x * 매개 변수에주의하십시오!)를 사용하십시오. – Ponkadoodle
, 당신은이를 사용할 수 있습니다
snprintf(zipcode, 6, "%05.5d", atoi(zipcode));
숫자로 된 우편 번호를 저장하지 마십시오. 일부 국가에는 우편 번호가 있습니다. – Sec