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;
}
출력:
동일한 입력에 대해 다른 결과를 볼 수 있습니다.
다음과 같습니다num
.
우리는 책을 읽고 있다.num
사용.%d
그래서 들어갈 때010
그것은 첫 번째를 무시한다.0
10진수로 처리한다.10
.
다음과 같습니다num2
.
우리는 책을 읽고 있다.num2
사용.%i
.
즉, 소수점, 8진수 및 16진수를 다르게 취급합니다.
그것이 주어질 때num2
010
그것은 선두를 본다0
8진법으로 해석합니다.
다음을 사용하여 인쇄할 때%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진수 정수로 해석하는 것을 의미합니다.
자세한 것은 이쪽을 참조해 주세요.
다른 사람이 말했듯이 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
'programing' 카테고리의 다른 글
Vuex가 이미 설정된 상태를 재설정하고 있습니다. (0) | 2022.07.11 |
---|---|
Vue에서 데이터베이스에서 html을 렌더링하는 방법 (0) | 2022.07.11 |
Vue는 맵 및 세트 데이터 유형에 대한 반응성을 지원합니까? (0) | 2022.07.11 |
절대 실행되지 않는 코드가 정의되지 않은 동작을 호출할 수 있습니까? (0) | 2022.07.11 |
jar 내에서 리소스 파일 읽기 (0) | 2022.07.11 |