printf()를 호출하면 여기에 숫자가 어떻게 추가되나요?
-
21-12-2019 - |
문제
어떻게 이런 일이 일어나는지 이해가 안 돼요 printf()
통화 중 두 개의 전화번호를 합치는 작업이 진행 중입니다.는 %*c
그것과 관련이 있나요?
//function that returns the value of adding two number
int add(int x, int y)
{
NSLog(@"%*c",x, '\r');
NSLog(@"%*c",y, '\r');
return printf("%*c%*c", x, '\r', y, '\r'); // need to know detail view how its working
}
전화를 위해
printf("Sum = %d", add(3, 4));
산출
Sum=7
해결책
아, 이거 영리한데.
return printf("%*c%*c", x, '\r', y, '\r');
성공하면, printf()
인쇄된 문자 수를 반환하고 "%*c", x, '\r'
인쇄하라고 해 x
문자(x-1
공백 뒤에 하나가 옴 \r
).그러므로, printf("%*c%*c", x, '\r', y, '\r')
인쇄된 문자 수를 반환합니다. x+y
.
보다 printf(3)
자세한 내용은
메모:
가 지적한 바와 같이 @shole, 이것 int add(int x, int y)
공장 둘 다에게만 x
그리고 y
음이 아닌 정수입니다.예를 들어:
add(-1, 1) // gives 2 instead of 0
add(0, 1) // gives 2 instead of 1
다른 팁
전달될 때 printf
(또는 유사한 기능), %*c
이는 하나가 아닌 두 개의 매개변수를 전달한다는 의미입니다.첫 번째 매개변수는 필드 너비를 지정하고 두 번째 매개변수는 해당 필드 너비에 쓸 문자(또는 문자열, 정수 등)를 지정합니다.
printf
출력 스트림에 기록된 총 문자 수를 반환합니다.
다음 숫자 %
필드 너비를 지정합니다.그래서 %5c
4개의 공백과 그 뒤에 문자 인수를 인쇄하여 총 5개의 문자를 제공합니다.
*
필드 너비가 인수로 제공되도록 지정합니다. printf
.따라서 이것은 다음의 한 필드를 인쇄합니다. x
문자, 그 다음에는 다른 문자 y
문자.각 필드는 공백과 캐리지 리턴('\r'
), 따라서 눈에 보이는 출력이 없어야 합니다. printf
인쇄된 총 문자 수를 반환합니다. 이 경우에는 x+y
.
나도 leeduhem의 말에 동의한다. 그것은 매우 영리하다.
printf()
인쇄된 문자 수를 반환합니다.인수에 대해서는 예를 들어 이해하는 것이 더 쉽다고 생각합니다.(또한 다음에서 너비 트릭을 볼 수 있습니다. 여기:
#include <iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main() {
// your code goes here
int x = printf("%*c", 100, '\r');
printf("%d\n", x);
return 0;
}
x는 너비를 지정하기 위해 설정한 값입니다(예: 100).
즉, 지정한 너비가 실제로 계산되어 반환됩니다. printf()
하지만 내 생각엔 이렇다 add()
양수로만 결투할 수 있습니다. 숫자 중 하나가 <= 0이면 메서드가 실패합니다. 시도해 보세요. add(-3,-4)
, 내 컴퓨터에서는 여전히 7이 인쇄됩니다 ...