문제

어떻게 이런 일이 일어나는지 이해가 안 돼요 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이 인쇄됩니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top