99,printf scanf手动功能实现
Posted xiaodaxiaonao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了99,printf scanf手动功能实现相关的知识,希望对你有一定的参考价值。
不知道大伙有没有注意到.
我们使用的scanf和printf,参数的个数可以自己输入,是不确定的.
而使用其他的大部分函数,参数个数都是固定的.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdarg.h>
int
f_add(int p_v1, int p_v2) {
return p_v1 + p_v2;
}
//这样子,我们就实现了任意多个参数进行相加的一个函数.
//第一个参数为后面所有参数的个数.
int
f_add_ex(int p_count, ...) {
int l_sum = NULL;
va_list l_va = NULL; //
int * p = NULL;
va_start(l_va, p_count);// p = &p_count;
for (size_t
i = 0; i < p_count; i++) {
l_sum += va_arg(l_va, int); // p++
l_sum=l_sum + *p;
}
va_end(l_va); // l_va = NULL;
return l_sum;
}
void main() {
int l_sum = NULL;
l_sum = f_add_ex(9, 1,
2, 3, 4, 5, 6, 7, 8, 9);
printf("sum is %d
",
l_sum);
system("pause");
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdarg.h>
int
f_add(int p_v1, int p_v2) {
return p_v1 + p_v2;
}
//这样子,我们就实现了任意多个参数进行相加的一个函数.
//第一个参数为后面所有参数的个数.
int
f_add_ex(int p_count, ...) {
//int l_sum = null;
//va_list l_va = null;
// int * p = null;
//va_start(l_va, p_count);// p = &p_count;
//for
(size_t i = 0; i < p_count; i++) {
// l_sum += va_arg(l_va, int); //
p++ l_sum=l_sum + *p;
//}
//va_end(l_va); // l_va = null;
//return l_sum;
int l_sum = NULL;
char * p = NULL;
p = (char
*)&p_count;
p = p + 4;
for (size_t i = 0; i < p_count; i++)
{
l_sum = l_sum + *(int *)p;
p = p + 4;
}
p = NULL;
return
l_sum;
}
void main() {
int l_sum = NULL;
l_sum = f_add_ex(9, 1,
2, 3, 4, 5, 6, 7, 8, 9);
printf("sum is %d
",
l_sum);
system("pause");
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdarg.h>
int
f_add(int p_v1, int p_v2) {
return p_v1 + p_v2;
}
//这样子,我们就实现了任意多个参数进行相加的一个函数.
//第一个参数为后面所有参数的个数.
int
f_add_ex(int p_count, ...) {
//int l_sum = null;
//va_list l_va = null;
// int * p = null;
//va_start(l_va, p_count);// p = &p_count;
//for
(size_t i = 0; i < p_count; i++) {
// l_sum += va_arg(l_va, int); //
p++ l_sum=l_sum + *p;
//}
//va_end(l_va); // l_va = null;
//return l_sum;
int l_sum = NULL;
char * p = NULL;
p = (char
*)&p_count;
p = p + 4;
for (size_t i = 0; i < p_count; i++)
{
l_sum = l_sum + *(int *)p;
p = p + 4;
}
p = NULL;
return
l_sum;
}
void printf_str(char * p_buffer) {
int l_length =
strlen(p_buffer);
for (size_t i = 0; i < l_length; i++)
{
putchar(p_buffer[i]);
}
}
//printf("abc");
//printf("%d",数字);
//printf("%f",浮点数)
//printf("%%");
//printf("%s",字符串指针);
void
my_printf(char * p_format, ...) { //传址
int l_length =
strlen(p_format);
va_list l_va = NULL; // char * l_va =
NULL;
va_start(l_va, p_format);//l_va = &p_format; l_va+=4;
/*char
* l_va = NULL;
l_va = (char *)&p_format;
l_va += 4;*/
char l_temp[50] = { 0 };
for (size_t i = 0; i < l_length; i++) {
if (p_format[i]
!= ‘%‘) {
putchar(p_format[i]);
}
else {
i++;
switch
(p_format[i]) {
case ‘%‘:
putchar(‘%‘);
break;
case
‘d‘:
sprintf(l_temp, "%d", va_arg(l_va,
int));
printf_str(l_temp);
break;
case
‘f‘:
sprintf(l_temp, "%f", va_arg(l_va,
float));
printf_str(l_temp);
break;
case
‘s‘:
printf_str((char *)va_arg(l_va,
int));
break;
}
}
}
va_end(l_va);
}
void main() {
char l_test[] =
"极客编程!";
my_printf("你好朋友
%d
%s", 100 * 100,
l_test);
system("pause");
}
以上是关于99,printf scanf手动功能实现的主要内容,如果未能解决你的问题,请参考以下文章