/************************************************************************/
/* coder:huifeng00
/* 时间:2010-5-23
/* 功能:简单实现自己的printf()函数,识别%d,%s,%c
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void myprintf(const char *format, ...)
{
va_list ap;
char c,nc;
va_start(ap, format);
while (c = *format++)
{
if (c == '%'&&(nc=*format)!='/0')
{
format++;
switch(nc)
{
case 'c': //%c
{
/*为了内存对齐,所以要写int*/
char ch = va_arg(ap, int);
putchar(ch);
break;
}
case 's': //%s
{
char *p = va_arg(ap, char *);
fputs(p, stdout);
break;
}
case 'd'://%d
{
int data = va_arg(ap,int);
char buf[16];
itoa(data,buf,10);
fputs(buf,stdout);
break;
}
default:
putchar('%');
putchar(nc);
}
}
else
{
putchar(c);
}
}
va_end(ap);
}
int main(void)
{
int i = 100;
char ch ='n';
char data[] = "nihao";
myprintf("%d/n%c/n%s/n", i,ch, data);
return 0;
}
主要实现了%s,%d,%c。
相关推荐
AI在个性化营养方案制定中的应用:从代谢组学到膳食规划
本文章的主要目的是全面探讨AI在个性化营养方案制定过程中的应用,从代谢组学的数据收集与分析,到基于这些数据制定合理的膳食规划。范围涵盖了AI技术在该领域的核心概念、算法原理、数学模型、实际项目应用,以及相关的工具和资源推荐等方面。旨在为科研人员、营养师、软件开发人员等提供一个系统的知识体系,帮助他们更好地理解和应用AI技术来实现个性化营养方案的制定。核心概念与联系:介绍AI、代谢组学和膳食规划的核心概念,以及它们之间的相互联系,并通过文本示意图和Mermaid流程图进行展示。
【嵌入式C语言】可变参数 va_start、va_arg、va_end、va_list、stdarg.h 库详解
可变参数详解 printf( )是我们在编程中避不开的函数,之前我们研究了printf( )的实现原理,初步了解了printf( )函数在库中是借用putchar( )来进行实现输出的,但是还有一个问题我们上一篇文章没有解决,那就是printf( )中的可变参数是怎么实现的呢,如何去使用可变参数完成我们自己的输出函数呢? 让我们再来看一眼printf( )的长相,在stdio.h文件中他是这样声明的 int printf(const char *format, ...) printf( )中分为两种参数,
Cadence SIP Layout 简单教程-第一章
以摄像头模组软硬结合板为例,描述layout的整个完整过程,从而掌握基本技能。 第一章 准备工作 第一节 原理图不用说layout前需要绘制原理图,原理图不在本文讨论范围内,所以列为准备工作。 需要特别说明的是,绘制原理的最终目的是导出网络表,网络表中的重要参数footprint是让layout软件选择正确封装的关键,所以这里讲解一下原理图设置footprint的位置。在原理图中双击零件,...
printf实现
printf是c语言下非常常用的一个函数,几乎每个程序员在一开始第一个学的函数应该就是printf吧! 今天来实现一个printf函数,虽然printf是我们常用的函数,但实现起来其实还是蛮考基础的! 下面一步一步带大家实现: 一. 编写一个入口函数并导入标准io头文件 #include<stdin.h> int main(){ } 二. printf函数准备工作 前言...
模型参考自适应控制(MRAC):让PID参数动态优化
本文深入解析模型参考自适应控制(MRAC)技术,它通过实时调整PID参数,使控制系统能自动适应系统特性变化和外部干扰。文章详细介绍了MRAC的工作原理、数学基础,并提供了用C语言实现的实战代码示例,帮助工程师解决传统PID控制在非线性、时变系统中参数整定繁琐的难题。
BEVFusion(mit)最强环境安装,部署复现
BEVFusion作为一项经典的工作,值得深入探索。然而由于配置环境比较麻烦,耽误了一些时间。经过几次成功配置之后,有了一些总结,在这里记录下来,供大家参考避坑,也方便自己下次查阅。
printf函数的实现方法
printf函数的实现
2.设置Salesforce开发环境
Salesforce DX:salesforce Developer Experience (salesforce开发人员体验)LWC:Lightning Web Component(注意首字母是大写的,是一个概念,小写的话有组件本身的含义)CLI:Command Line Interface(命令行界面)version control system (VCS):版本控制系统。
汇编语言综合试验5 - 用C语言实现一个简单的printf函数
本题是王爽老师《汇编语言(第4版)》的压轴题,具有一定难度。笔者基于自己编程中的踩坑经历,并结合大佬的解题思路,写成博客。这个试验设计得非常好,如果有心从头到尾理清逻辑,将会极大加深对C和汇编关系的理解。
海思方案定制hi3531dv200/SS528 DVR方案解析:从硬件选型到编解码实战应用
海思方案,Hi3518EV100,Hi3518CV100,Hi3515CV100,Hi3516CV100,Hi3516ECV100,Hi3516D,Hi3516A,Hi3519,Hi3520D,Hi3521A,Hi3535,Hi3531,Hi3536,Hi3536C,Hi3536D,Hi3518EV200,Hi3518EV201,Hi3520DV200,Hi3516CV200,Hi3516CV300,Hi3516AV200,Hi3520DV300,Hi3519V101,sd3403,hi3519av200
Android11原生设置屏幕亮由Gamma变化改为线性变化
从Android9 开始屏幕亮度调解变成非线性变化,这样的话就会出现 之前亮度变化很小,到后面时变化亮度很快; 修改为线性变化,只需要修改 ./frameworks/base/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache L
【C语言指南】printf()函数详解
printf 函数在输出格式 format 的控制下,将其参数进行格式化,并在标准输出设备(显示器、控制台等)上打印出来。printf函数是C语言最常用且功能强大的库函数,搞明白printf函数能在工作中做到事半功倍的效果
什么是DHCP Snooping?如何配置DHCP Snooping?
功能描述防护类型防御伪造 DHCP 服务器、避免地址冲突、增强网络安全性使用场景企业园区网、校园网、大型局域网配合机制IP Source Guard、DAI、防止 ARP 欺骗部署难度⭐⭐(简单)“DHCP Snooping,是内网 DHCP 安全防护的第一道门神。” 🛡️。
简单实现printf()函数功能
printf函数
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
C语言中可变参数函数的实现——printf
C语言中可变参数函数的实现(`printf()`的实现)
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
STM32单片机极简方法 使用宏定义 代替复杂的重定向printf()函数,实现串口打印。(HAL库例程)
对于 printf() 函数我们并不陌生,初学C语言使用的第一个函数,其作用是在终端打印显示格式化字符串。 但是如果我们使用的是单片机运行C语言代码,如果不经任何修改直接使用 printf() 函数,结果是什么现象都没有。要想使用这个函数,常规方法是重定向 printf() 函数,结合串口来打印到串口助手上位机。这里的重定向就非常复杂了,你需要懂 printf() 函数内部实现机制。。。。。(参...
Outlook Express 6 (OE6) for Win7/Win8/Win10
英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。
利用printf()实现简单动画,触界反弹的球
利用printf()实现简单动画。本程序实现的是一个运动过程中触界反弹的球,在程序演示的过程中,ESC键可以随时终止程序. 当然你可以利用system("cls");实现动画效果,这里采用GotoXy()函数,然后利用背景色的空格擦掉痕迹作图,来实现动画效果
怎样在TI stellaris lm3sxxx 程序中使用C语言printf()函数进行串口输出
串口输出 UART 输出重定向 stellaris lm3sxxx
模拟实现printf函数
模拟实现 printf()函数 如果要想解决这个问题 ,就要 知道一个知识点 ,可变参数列表 , 可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件中,它是标准库的一部分。这个头文件声明 个类型va_list 和三个宏va_start、va_arg和va_end。 转到定义处 查看一下这几个宏和类型 typedef char * va_li
printf的实现
研究printf的实现,首先来看看printf函数的函数体 int printf(const char *fmt, ...) { int i; char buf[256]; va_list arg = (va_list)((char*)(&fmt) + 4); i = vsprintf(buf, fmt, arg); write(buf
printf()函数详解
本文转载自:https://blog.youkuaiyun.com/qq_25544855/article/details/81146800 1. printf()简介 printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。 函数原型: int printf ( const char * format,...
print()、printf() 和 sprintf()三者之间的区别与联系
在 C 语言中,有三种常用的输出函数:print()、printf() 和 sprintf()。虽然它们都可以用来输出字符串,但是它们的使用方法和输出方式是有区别的。下面,我们将介绍这三个函数的区别和用法。
printf()函数的全面介绍及用法——简单易懂
printf()函数介绍及详细用法:三种格式控制字符(教你怎么输出)——格式字符、转义字符、普通字符;输出的示例;指定宽度输出;保留小数位数输出;printf()函数中的格式修饰符,以及printf()函数的返回值类型及内容。
printf()函数和scanf()函数
本文介绍了C语言中的两个基础库函数printf()和scanf()的基本用法。printf()用于格式化输出,支持多种占位符和格式控制;scanf()用于读取用户输入,需要注意变量地址传递和不同类型数据的读取方式。文章详细讲解了这两个函数的参数用法、占位符类型、格式控制选项,以及常见注意事项,如scanf()读取字符串时的长度限制问题。这些基础知识对于C语言初学者理解和掌握标准输入输出操作具有重要意义。
printf()函数以及scanf()函数
就是程序运行到这个语句时,会停下来,等待用户从键盘输入,用户输入数据,按下回车键后,scanf()函数就会处理用户的数据,将其存入变量。
1032



被折叠的 条评论
为什么被折叠?



