質問

このprintf()呼び出しが2つの数字を追加するためにどのように機能しているかを理解していません。%*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である文字の数を返します。

詳細については、詳細については


注:

@shole 、このprintf(3)int add(int x, int y)の両方のためには、非負の整数でのみこのxが機能します。/強い>。例えば:

add(-1, 1) // gives 2 instead of 0
add(0, 1)  // gives 2 instead of 1
.

他のヒント

printf(または類似の関数)に渡されたとき、%*cとは、1つの代わりに2つのパラメータを渡していることを意味します。最初のパラメータはフィールド幅、および2番目の文字(または文字列、intなど)を指定して、その幅の幅に書き出します。

printfは、出力ストリームに書き込まれた文字数の総数を返します。

%の後の数値フィールド幅を指定します。そのため、%5cは4つのスペースを印刷し、その後文字引数が続き、合計5文字が得られます。

*フィールド幅がprintfの引数として指定されていることを指定します。そのため、これはx文字の1つのフィールドを印刷し、続いてy文字が続きます。各フィールドは、スペースからなり、その後のキャリッジリターン('\r')で構成されているため、目に見える出力があってはいけません。printf印刷された文字数の総数を返します - この場合はx+y

私はリーダムに同意し、それは非常に賢い、

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()は正数でのみ決まると思いますが、その数のうちの1つが<= 0の場合、メソッドは失敗するはずです、あなたは私自身のマシンでまだ印刷7 ...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top