码迷,mamicode.com
首页 > 其他好文 > 详细

99,printf scanf手动功能实现

时间:2018-06-12 22:31:08      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:\n   clu   其他   float   length   amp   ++   div   多个参数   

不知道大伙有没有注意到.
我们使用的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\n", 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\n", 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("你好朋友\n%d\n%s", 100 * 100, l_test);
 system("pause");
}

99,printf scanf手动功能实现

标签:\n   clu   其他   float   length   amp   ++   div   多个参数   

原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/9175224.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!