ft printf 7 1日目


またひっくり返った.
その前に、mallocを使用してchar*strという変数に配列を作成し、出力する文字列のサイズを一致させ、1つずつ入力します...選択肢が多すぎて、全部実現するのは難しいので、新しい方法で実現しました.

変更された部分


配列が生成されている場合は、直接出力します.
出力と同時に出力文字列の長さも長くなるのでft putchar()をint戻り型に変更し、1も変更しました.
出力공백または0の長さはft sizeファイルに作成された関数によって決まります.

数字なら


出力数字の長さがwidthおよびprecisionより大きい場合、両方とも0に初期化される.

precがwidthより大きい

precから文字列を減算します.そして、出力する数字が負数である場合、またはplusオプションで記号を一緒に出力すると、文字列には記号長1に等しい長さ1が追加されるので、prec+1となる.
ex)-2出力、prec=4
+1の場合、prec=2は2つの0しか出力できません.そのまま004が出力する

printfを使用して検証すると、出力は次のように表示されます.

幅がprecより大きい場合


widthprecより大きいため、precを0に初期化することはできません.上記の場合、出力0はprecに等しいからである.
したがって、widthから출력 숫자 길이およびprecを減算する.

文字(列)の場合


文字(列)Flag使用-オプションのみ、Precision使用なし、width使用のみ.だから数字より簡単です.

テキスト


数値または文字列の場合は、ファイルを個別に作成してサイズオプションを変更できますが、文字は必要ありません.無条件出力長が1なので.また、widthのみが使用されるため、widthが0でなければ-1が使用される.

文字列


文字列は数字より簡単です.widhtを計算するだけなので、出力文字列の長さがwidthより大きい場合、widthは0に初期化され、逆にwidthは出力文字列の長さを減算します.

可変パラメータ(その他)


可変パラメータでva argに使用するオプション(?)以下のように耳にします.
  • charorshort:用int置換
  • float:doubleを変換します.
  • char ch = (char)va_arg(ap, int);
    float f = (float)va_arg(ap, double);
    上のコードのように変形します.