-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3-print_all.c
executable file
·99 lines (89 loc) · 1.89 KB
/
3-print_all.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include "variadic_functions.h"
#include <stdlib.h>
#include <stdio.h>
/**
* print_all - Prints anything
* @format: The conversion specifier to prints
*
* Return: Nothing
*/
void print_all(const char * const format, ...)
{
va_list args;
f_dt form_types[] = {
{ "c", print_a_char },
{ "i", print_a_integer },
{ "f", print_a_float },
{ "s", print_a_char_ptr }
};
unsigned int i = 0;
unsigned int j = 0;
char *separator = "";
va_start(args, format);
while (format != NULL && format[i])
{
j = 0;
while (j < 4)
{
if (format[i] == *form_types[j].identifier)
{
form_types[j].f(separator, args);
separator = ", ";
}
j++;
}
i++;
}
va_end(args);
printf("\n");
}
/**
* print_a_char - Prints a character of char type
* @separator: The separator of the character
* @args: A list of variadic arguments
*
* Return: Nothing
*/
void print_a_char(char *separator, va_list args)
{
printf("%s%c", separator, va_arg(args, int));
}
/**
* print_a_integer - Prints a character of integer type
* @separator: The separator of the character
* @args: A list of variadic arguments
*
* Return: Nothing
*/
void print_a_integer(char *separator, va_list args)
{
printf("%s%i", separator, va_arg(args, int));
}
/**
* print_a_float - Prints a character of float type
* @separator: The separator of the character
* @args: A list of variadic arguments
*
* Return: Nothing
*/
void print_a_float(char *separator, va_list args)
{
printf("%s%f", separator, va_arg(args, double));
}
/**
* print_a_char_ptr - Prints the content of pointer to char type
* @separator: The separator of the character
* @args: A list of variadic arguments
*
* Return: Nothing
*/
void print_a_char_ptr(char *separator, va_list args)
{
char *arg = va_arg(args, char *);
if (arg == NULL)
{
printf("%s%s", separator, "(nil)");
return;
}
printf("%s%s", separator, arg);
}