programing

printf()를 사용하여 C의 정수를 인쇄하려면 %i 또는 %d?

prostudy 2022. 7. 11. 21:14
반응형

printf()를 사용하여 C의 정수를 인쇄하려면 %i 또는 %d?

C를 배운 지 얼마 되지 않아 iOS 개발로 Objective-C에 대해 조금 알고 있습니다만, Objective-C에서는 사용하고 있습니다.NSLog(@"%i", x);콘솔로 변수 x를 인쇄하기 위해 C 튜토리얼을 몇 개 읽었는데%d대신%i.

printf("%d", x);그리고.printf("%i", x);x 를 콘솔에 올바르게 인쇄합니다.

둘 다 같은 장소로 가는 것 같기 때문에 경험 있는 개발자에게 어떤 것이 좋습니까?하나 더 의미론적으로 옳은가 아니면 옳은가?

이 두 가지 요소를 함께 사용하면 완전히 동등합니다.printf()저는 개인적으로%d, 보다 자주 사용됩니다(「의 관용적인 변환 지정자」라고 말할까요?int"?).

(의 1가지 차이점%i그리고.%d와 함께 사용할 경우scanf(),그리고나서%d는 항상 10진수의 정수를 요구합니다만,%i인식하다0그리고.0x프리픽스는 8진수 및 16진수로 지정되지만 정상적인 프로그래머는 사용하지 않습니다.scanf()이 문제는 걱정할 필요가 없습니다.)

예를 들면 이해하기 쉽다고 생각하기 때문에 여기에 예를 추가하겠습니다.

printf()에서는 같은 동작을 하므로 %d 또는 %i 중 하나를 사용할 수 있습니다.단, scanf()에서는 동작은 다릅니다.

예를 들어 다음과 같습니다.

int main()
{
    int num,num2;
    scanf("%d%i",&num,&num2);// reading num using %d and num2 using %i

    printf("%d\t%d",num,num2);
    return 0;
}

출력:

enter image description here

동일한 입력에 대해 다른 결과를 볼 수 있습니다.

다음과 같습니다num.

우리는 책을 읽고 있다.num사용.%d그래서 들어갈 때010그것은 첫 번째를 무시한다.010진수로 처리한다.10.

다음과 같습니다num2.

우리는 책을 읽고 있다.num2사용.%i.

즉, 소수점, 8진수 및 16진수를 다르게 취급합니다.

그것이 주어질 때num2 010그것은 선두를 본다08진법으로 해석합니다.

다음을 사용하여 인쇄할 때%d그것은 8진수에 상당하는 십진수를 인쇄한다010어느 것이8.

d그리고.i변환 지정자는 다음과 같이 동작합니다.fprintf에 대해 다르게 행동하다fscanf.

다른 누군가가 그들의 답변에서 썼듯이, 인쇄하는 관용적인 방법int사용하고 있다d변환 지정자.

에 관하여i지정자 및fprintf, C99의 근거는 다음과 같습니다.

%i 변환 지정자는 fprintf와 함께 사용할 때 %d 변환 지정자와 정확히 동일한 의미를 가지지만 프로그래머의 편의를 위해 fscanf의 %i 변환 지정자와 대칭을 제공하기 위해 C89에 추가되었습니다.

%d은(는) 정수를 인쇄하는 표준인 것 같습니다. 이유는 알 수 없지만, 같은 동작을 합니다.

둘다요.%d그리고.%i정수를 인쇄하는 데 사용할 수 있습니다.

%d는 "control"을 나타내고 %i는 "control"을 나타냅니다.%x를 사용하여 16진수로 인쇄하고 %o를 사용하여 8진수로 인쇄할 수 있습니다.

"10진수" 대신 "integer"를 나타내려면 %i를 %d의 동의어로 사용할 수 있습니다.

입력 시 scanf()를 사용하여 %i와 %d를 모두 사용할 수 있습니다.%i는 임의의 기수(0 또는 0x 접두사로 나타나는 8진수, 16진수 또는 10진수)로 해석하는 것을 의미하며 %d는 10진수 정수로 해석하는 것을 의미합니다.

자세한 것은 이쪽을 참조해 주세요.

%d는 왜 Integer를 나타냅니까?

다른 사람이 말했듯이 printf에서는 동일한 출력이 생성되지만 scanf에서는 다르게 동작합니다.나는 더 좋다%d에 걸쳐서%i이 때문에로 인쇄된 번호%d로 읽을 수 있다%d그러면 같은 번호가 나옵니다.에는 그것이 항상 해당되지 않는다.%i패딩 제로 사용을 선택한 경우.printf 형식 문자열을 scanf 형식 문자열에 복사하는 것이 일반적이기 때문에,%i놀라운 버그를 도입할 수 있기 때문에:

씁니다fprintf("%i ...", ...);

카피와 쓰기를 합니다.fscanf(%i ...", ...);

열을 더 잘 정렬하고 알파벳 정렬을 정렬과 동일하게 수행하기로 결정했습니다.fprintf("%03i ...", ...);(또는%04d)

제 숫자를 읽으시면 10에서 99 사이의 숫자는 8진수로 해석됩니다.어라.

10진수 형식을 원하시면 그렇게 말씀해 주세요.

언급URL : https://stackoverflow.com/questions/17329647/i-or-d-to-print-integer-in-c-using-printf

반응형