用C语言实现printf的函数
时间: 2023-05-26 22:05:23 浏览: 106
C语言中的printf函数
5星 · 资源好评率100%
此题目为编程题,答案可能有多种实现方式。
以下是一种可能的实现方式:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void my_printf(const char* format, ...) {
va_list args;
va_start(args, format);
const char* p = format;
while (*p) {
if (*p != '%') {
putchar(*p);
p++;
continue;
}
p++;
switch (*p) {
case 'c': {
char c = (char)va_arg(args, int);
putchar(c);
break;
}
case 's': {
const char* s = va_arg(args, const char*);
fputs(s, stdout);
break;
}
case 'd': {
int i = va_arg(args, int);
char buffer[12]; // 最多 11 位数字加一个负号
itoa(i, buffer, 10);
fputs(buffer, stdout);
break;
}
case 'f': {
double d = va_arg(args, double);
char buffer[64];
sprintf(buffer, "%.4f", d); // 保留四位小数
fputs(buffer, stdout);
break;
}
case '%': {
putchar('%');
break;
}
default: {
putchar(*p);
break;
}
}
p++;
}
va_end(args);
}
int main() {
my_printf("Hello, %s! %d + %d = %d\n%f%%\n", "world", 2, 3, 2 + 3, 12.345);
return 0;
}
```
注释:
- `my_printf` 函数中的 `p` 指针用于遍历格式字符串中的每一个字符。
- 如果当前字符不是 `%`,就直接输出。
- 如果当前字符是 `%`,就判断后面的字符是什么,并根据要求输出格式。具体实现方式如下:
- `%c`:取出一个 char 类型的参数,并输出。
- `%s`:取出一个 const char* 类型的参数,并输出。
- `%d`:取出一个 int 类型的参数,并输出。
- `%f`:取出一个 double 类型的参数,并以保留四位小数的形式输出。
- `%%`:输出一个 `%` 符号。
- 其他字符:直接输出。
测试结果:
```
Hello, world! 2 + 3 = 5
12.3450%
```
阅读全文