Programing

C에서 선행 0을 인쇄합니까?

lottogame 2020. 3. 9. 08:05
반응형

C에서 선행 0을 인쇄합니까?


우편 번호에 01001과 같은 선행 0을 인쇄하는 좋은 방법을 찾으려고합니다. 숫자는 1001로 저장되지만 좋은 방법은 무엇입니까?

나는 두 가지 경우 중 하나를 사용하여 숫자가 몇 자릿수인지 알아 내고 인쇄를 위해 여분의 0을 가진 char 배열로 변환하려고 생각했지만 도울 수는 없지만 사용할 수있는 방법이 있다고 생각합니다 나를 피하는 printf 형식 구문.


printf("%05d", zipCode);

0당신이 패딩과 무엇을 나타냅니다 5쇼에게 정수의 길이를. 예를 들어 "%02d"(날짜에 유용함)을 사용 하면 1 열의 숫자에 대해 0 만 채 웁니다 (. 06대신 6). 예 2에서는 "%03d"1 열의 1 숫자에 대해 2 0을 채우고 10의 열에 숫자 1을 채우십시오. 즉. (번호 7이 채워 007지고 번호 17이가 채워짐 017).


올바른 해결책은 우편 번호를 데이터베이스에 STRING으로 저장하는 것입니다. 숫자처럼 보일 수도 있지만 그렇지 않습니다. 각 부분마다 의미가있는 코드입니다.

숫자는 산술을하는 것입니다. 우편 번호는 그렇지 않습니다.


최소 필드 너비 앞에 0을 배치합니다.

printf("%05d",zipcode);

우편 번호는 고도로 지역화 된 필드이며 많은 국가에서 영국, 캐나다와 같은 우편 번호에 문자가 있습니다. 따라서이 예에서는 문자열 / varchar 필드를 사용하여 다른 국가에서 배송하거나 사용자 / 고객 / 고객 / 등을 확보 할 경우 저장해야합니다.

그러나 일반적인 경우 권장 답변 ( printf("%05d", number);)을 사용해야합니다 .


* NIX 시스템을 사용중인 경우 :

man 3 printf

다음과 유사한 매뉴얼 페이지가 표시됩니다.

0 값을 0으로 채워야합니다. d, i, o, u, x, X, a, A, e, E, f, F, g 및 G 변환의 경우 변환 된 값은 공백이 아니라 왼쪽에 채워집니다. 0과-플래그가 모두 나타나면 0 플래그는 무시됩니다. 숫자 변환 (d, i, o, u, x 및 X)으로 정밀도를 지정하면 0 플래그가 무시됩니다. 다른 변환의 경우 동작이 정의되지 않습니다.

C에 대한 질문이지만 페이지가 도움 될 수 있습니다.


sprintf(mystring, "%05d", myInt);

여기서 "05"는 "앞에 0이있는 5 자리 숫자를 사용합니다"라고 말합니다.


printf는 다양한 포맷 옵션을 허용합니다.

전의:

printf("leading zeros %05d", 123);

우편 번호를 숫자가 아닌 문자열로 저장하면 문제가 발생할 수 있습니다 (장기).


더 유연합니다. 다음은 고정 너비와 공백으로 채워진 오른쪽 정렬 된 숫자의 행을 인쇄하는 예입니다.

//---- 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를 더 읽기 쉽도록 설계되었습니다.


우편 번호를 문자 배열 zipcode []에 저장해야하는 경우 다음을 사용할 수 있습니다.

snprintf( zipcode, 6, "%05.5d", atoi(zipcode));

참고 URL : https://stackoverflow.com/questions/153890/printing-leading-0s-in-c

반응형