程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> [c語言] 模擬實現printf,要求功能: my_printf(dc\ts\ndc\ndc\ts!, ...)

[c語言] 模擬實現printf,要求功能: my_printf(dc\ts\ndc\ndc\ts!, ...)

編輯:關於C
模擬實現printf功能輸出如下形式,'d'輸出整形,'c'輸出字符型,'s'輸出字符串,其他輸出自身形式  my_printf("dc\ts\ndc\ndc\ts!",1, 'b',"zhangweina",2, 'i', 3,'t', "welcome to you");     可變參數列表的一些小知識: //宏 stdard.h //va_list  聲明一個類型 //va_start 第一個參數為va_list變量的名字,第二個參數為省略號前最後一個有名字的參數。 //         用來初始化變量,即將其設置為指向可變參數部分的第一個參數。 //va_arg   第一個參數為va_list變量的名字,第二個參數為可變參數的類型。 //         調用一次,就指向下一個可變參數。返回值的類型即為第二個參數的類型。 //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\ndc\ndc\ts!";
    int len = strlen(str);
    my_printf(str, len,1, 'b',"zhangweina",2, 'i', 3,'t', "welcome to you");
    system("pause");
    return 0;
}

 

   
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved