1. 程式人生 > >用可變引數列表模擬實現printf函式

用可變引數列表模擬實現printf函式

用可變引數列表實現printf函式

要實現printf函式,我們首先應該獲取printf函式中由雙引號中的字串,若遇到不是%的字元,我們應該直接將其輸出,若遇到%,我們應該判斷它後面是什麼字元,這裡先只考慮%c,%s的情況,如果是%c那麼我們應該將讀到的字元輸出來,若為%s,應該將讀到的字串通過指標解引用的方式依次輸出,如果是%d%f我們暫且將它當做普通字元輸出。

實現的程式碼如下:

#include<stdlib.h>

#include<stdarg.h>

void my_printf(char *str,...)

{

 va_list arg;

 va_start(arg, str);

 int ch = 0;

 char *pstr = NULL;

 while (*str)

 {

  if (*str == '%')

  {

   str++;

   switch (*str)

   {

   case 'c':

   {

      ch = va_arg(arg, char);

      putchar(ch);

      break;

   }

   case 's':

   {

      pstr = va_arg(arg, char*);

      while (*pstr)

      {

       putchar(*pstr);

       pstr++;

      }

      break;

   }

   default:

    putchar(*(str - 1));

    putchar(*str);

   }

   str++;

  }

  else

  {

   putchar(*str);

   str++;

  }

 }

 va_end(arg);

}

int main()

{

 my_printf("%s %c%c%c\n", "hello", 'b', 'i', 't');

 my_printf("%d%f %c%c %f %s\n", 'a', 'b', "hello");

 system("pause");

 return 0;

}

相關推薦

可變引數列表模擬實現printf函式

用可變引數列表實現printf函式要實現printf函式,我們首先應該獲取printf函式中由雙引號中的字串,若遇到不是%的字元,我們應該直接將其輸出,若遇到%,我們應該判斷它後面是什麼字元,這裡先只考慮%c,%s的情況,如果是%c那麼我們應該將讀到的字元輸出來,若為%s,應

可變引數列表模擬實現printf函式,可完成下面的功能

【問題描述】:模擬實現printf函式,可完成下面的功能//能完成下面函式的呼叫。//print("s ccc d.\n","hello",'b','a','t',100);//函式原型://print

可變引數列表(模擬實現printf)

1.什麼是可變引數列表?通過將函式實現為可變引數的形式,可以使得函式可以接受1個以上的任意多個引數。我們先看一個例子:int average(int n,...) { va_list arg; //相當於宣告一個指標,名字為arg int i =

【C語言】可變引數列表實現printf函式

//用可變引數列表實現printf函式 #include <stdio.h> #include <stdarg.h> void my_printf(const char *st

模擬實現printf函式可變引數列表例項

首先可通過CSDN檢視printf函式原型等資訊 實現功能: Print formatted output to the standard output stream. 即格式化輸出並

可變引數列表實現簡單的printf函式

#include<stdio.h> #include<string.h> #include<stdlib.h> #include<stdarg.h> void print_num(int n) { if (

【c語言】可變引數列表實現一個簡化的printf函式

//實現一個簡化的printf函式。 #include <stdarg.h> #include <string.h> void my_printf(const char *str,...) { va_list arg; //準備訪問可變引

C語言 可變引數列表實現

使用可變引數列表,可以讓函式在不同場合接收不同數量的引數傳入,printf函式的格式化輸出,就是一個典型的例子。 printf("<格式化字串>", <參量表>);           &

C語言:模擬實現printf函式

4.1.模擬實現printf函式,可完成下面的功能 能完成下面函式的呼叫。  print("s ccc d.\n","hello",'b','i','t',100);  函式原型:  print(char *format, ...)  程式碼如下: #include &l

C語言實現printf函式,即引數可變函式原理

我們在C語言程式設計中會遇到一些引數個數可變的函式,例如printf() 這個函式,它的定義是這樣的: int printf( const char* format, ...); 它除了有一個引數format固定以外,後面跟的引數的個數和型別是 可變的,例如我們可以有以下不

c語言 函式可變引數列表

1、編寫函式求一系列值的平均數,引數數目不確定: #include <stdarg.h> double average(int n_values, ...) { va_list var_arg; int count; double sum=0; va_st

Linux 原始碼系列之可變引數列表實現

背景 從事 android 開發四年有餘,應用開發做得越久,就越有“知其然不知其所以然”的感覺,於是乎,過去的大半年,我幾乎一有時間就去啃《Linux核心完全剖析-基於0.12核心》,接近1000頁的 linux 系統原始碼,讀的過程可謂是五味雜陳,終於在20

[Visual Studio C++] [MFC 除錯錯誤]:str.Format()不存在與引數列表匹配的過載函式

1.編譯問題描述: str.Format(“%d”,m_number)不存在與引數列表匹配的過載函式,紅色波浪線出現在“ . ”下方 2.錯誤程式碼:                    

模擬實現strcpy函式功能(優化改進)

strcpy函式,字串拷貝函式,傳入兩個引數,將第二個引數的值拷貝到第一個中去。 首先,給出一個普通的程式碼: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> void

12 裸板實現printf函式

裸板實現printf函式 在uboot上,首先uart第0個控制器已經被uboot驅動好了。 uart控制器負責資料的收發,我們只要把資料交給uart控制器發出,和從uart控制器裡把資料取回來即可。 也就是我們只要找到相應的uart控制器的配置暫存器即可。 檢視

“全棧2019”Java第三十四章:可變引數列表

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第三十四章:可變引數列表 下一章 “全棧2

stdarg.h可變引數列表(非格式控制)

1.C語言可變引數的概念 最常見的就是scanf和printf函式: int scanf(const char * restrict format,...); int printf(const char *fmt, ...); 你可以輸入任意型別的任意個引數,但是必須在格

模擬實現strlen函式

目錄 方式1(遞迴) 方式2(迴圈) 方式3(指標運算) 正文 方式1(遞迴) int my_strlen1(char *str) { if (*str == '\0') {

模擬實現strcmp函式

strcmp int strcmp ( const char * str1, const char * str2 ); Compare two strings Compares the C string str1 to the C string str2. This f

【C/C++】sprintf中如何將容器作為可變引數列表傳入

近日做指令碼介面時遇到一個變參的傳入介面,因為我們遊戲中的腳本系統是自定義的,這個介面的引數因為是可變,所以將引數讀進來存入一個Vector容器中,然後利用Sprintf格式化之後傳送給客戶端做邏輯,以前的做法就是switch…case…這個容器中元素的個數,然後sprintf( szBuff, nBuffS