【c言語】シミュレーション実装printf、要求機能:my_printf(「dctsndcndcndcts!」,...)
1576 ワード
シミュレーション実装printf機能出力は以下の形式,'d'出力整形,'c'出力文字型,'s'出力文字列,その他の出力自体の形式である.
my_printf("dc\tsdcdc\ts!",1, 'b',"zhangweina",2, 'i', 3,'t', "welcome to you");
可変パラメータリストのいくつかの小さな知識:
//宏stdard.h
//va_リスト宣言タイプ
//va_startの最初のパラメータはva_ですlist変数の名前、2番目のパラメータは省略記号の前の最後の名前のあるパラメータです.
//変数を初期化し、可変パラメータ部分を指す最初のパラメータに設定します.
//va_argの最初のパラメータはva_ですlist変数の名前で、2番目のパラメータは可変パラメータのタイプです.
//一度呼び出すと、次の可変パラメータを指します.戻り値のタイプは、2番目のパラメータのタイプです.
//va_end最後のパラメータにアクセスし、va_を呼び出します.end.
my_printf("dc\tsdcdc\ts!",1, 'b',"zhangweina",2, 'i', 3,'t', "welcome to you");
可変パラメータリストのいくつかの小さな知識:
//宏stdard.h
//va_リスト宣言タイプ
//va_startの最初のパラメータはva_ですlist変数の名前、2番目のパラメータは省略記号の前の最後の名前のあるパラメータです.
//変数を初期化し、可変パラメータ部分を指す最初のパラメータに設定します.
//va_argの最初のパラメータはva_ですlist変数の名前で、2番目のパラメータは可変パラメータのタイプです.
//一度呼び出すと、次の可変パラメータを指します.戻り値のタイプは、2番目のパラメータのタイプです.
//va_end最後のパラメータにアクセスし、va_を呼び出します.end.
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<string.h>
// , str , ,
void my_printf(const char *str, int len, ...)
{
va_list arg;
va_start(arg, len);
for (int i = 0; i < len; i++,*str++)
{
char a = 0;
char *a1 = NULL;
int a2 = 0;
// ,
switch (*str)
{
case 'c': // ,char
a = va_arg(arg, char);
putchar(a);
break;
case 's': // ,char*
a1 = va_arg(arg,char*);
while (*a1)
{
putchar(*a1);
*a1++;
}
break;
case 'd': // ,int
a2 = va_arg(arg, int);
putchar(a2+'0');
break;
default: // ,
putchar(*str);
break;
}
}
va_end(arg);
}
int main()
{
char *str = "dc\ts
dc
dc\ts!";
int len = strlen(str);
my_printf(str, len,1, 'b',"zhangweina",2, 'i', 3,'t', "welcome to you");
system("pause");
return 0;
}