형식화 된 IO 함수에서 변환 지정자 % i와 % d의 차이점은 무엇입니까 (* printf / * scanf)


답변:


276

출력에 사용될 때와 동일합니다 (예 : with) printf.

입력으로 지정 등으로 사용될 때, 이들 다른 scanf, %d서명 진수로 정수를 검사하지만, %i소수이지만 디폴트는 (앞에 있으면 진수 있도록 0x선행 경우) 8 진수 (0 ).

따라서 03327은 %i이지만 33은 %d입니다.


8
sscanf에서 가능한 제로 패딩이있는 int를 기대하는 것이 가장 합리적인 기본 동작 인 것 같습니다. Octal을 기대하지 않으면 미묘한 버그가 발생할 수 있습니다. 따라서 이것은 명시 적으로 8 진법 및 / 또는 16 진법을 읽고 싶지 않다면, % d는 임의로 하나를 선택해야 할 때 사용하기에 좋은 지정자입니다.
Eliot

2
아! 말이 되네요! 무엇을 찾아야하는지 알았으므로 printf및 에 대한 설명서에서도 볼 수 있습니다 scanf.
Gabriel Staples

67

이들은 동일 printf하지만 다릅니다 scanf. 를 들어 printf, 모두 %d와는 %i부호 첨부 10 진수의 정수를 지정합니다. 위해 scanf, %d그리고 %i또한 부호있는 정수 있지만 의미 %iinteprets 앞에 경우 16 진수로 입력 0x앞에 경우 진수 0와 다른 진수로 입력을 해석합니다.


20

%i%d형식 지정자 에는 차이가 없습니다 printf. 우리는로 이동하여 볼 수 있습니다 초안 C99 표준 섹션 7.19.6.1 fprintf와 기능 도 포함 printf형식 지정에 관하여 그것이 단락에서 말한다 8 :

변환 지정자와 그 의미는 다음과 같습니다.

다음 글 머리 기호를 포함합니다.

d,i     The int argument is converted to signed decimal in the style
        [−]dddd. The precision specifies the minimum number of digits to
        appear; if the value being converted can be represented in fewer
        digits, it is expanded with leading zeros. The default precision is
        1. The result of converting a zero value with a precision of zero is
        no characters.

반면에 scanf차이가 있기 때문에 자동으로 기준을 감지하는 %d동안 기준 10을 가정 %i합니다. 형식 지정자와 관련하여 다루는 7.19.6.2 fscanf 함수 섹션 12로 이동 하여이를 확인할 수 있습니다.scanf

변환 지정자와 그 의미는 다음과 같습니다.

다음을 포함합니다 :

d     Matches an optionally signed decimal integer, whose format is the
      same as expected for the subject sequence of the strtol function with
      the value 10 for the base argument. The corresponding argument shall
      be a pointer to signed integer.

i     Matches an optionally signed integer, whose format is the same as
      expected for the subject sequence of the strtol function with the
      value 0 for the base argument. The corresponding argument shall be a
      pointer to signed integer.

4

printf둘은 동의어입니다.


6
scanf()허용되는 답변에서 알 수 있듯이 형식 문자열 에서 사용하면 차이가 있습니다 .
J ... S
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.