写了个一个关于输入处理的头文件~
程序代码:
#ifndef INPUT_DATA #define INPUT_DATA #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> #include<ctype.h> #define BUFF_MAX 10 //最大缓冲区 void Input_Init_DATA(void** ,size_t ); //初始化输入数据 void Input_Absorb_Buffer(char** ); //对缓冲区残留数据进行处理 int Input_Solve_Negative(char** ); //对输入负数进行处理 void Input_Free(void** ); //释放堆空间 void Input_Catch(char* ,char** ); //异常处理 int Input_Big_Int(char** ); //输入大整数(支持输入负数) void Input_String(void** ); //从输入字符串 int Input_Data(const void* ,void* ); //输入数据 void Input_Init_Data(void** p,size_t size) //初始化输入数据 { *p=(char* )malloc((BUFF_MAX)*sizeof(char)); assert(*p!=NULL); memset(*p,0,sizeof(size)); } void Input_DATA(char** p,char** pt,size_t* length) //对输入数据进行处理 { ++*length; if (*length%(BUFF_MAX-1)==0) { char* ps=realloc(*p,(*length+BUFF_MAX)*sizeof(char)); Input_Catch(ps,p); *p=ps; memset(*p+*length,0,BUFF_MAX*sizeof(char)); *pt=*p+*length-1; } ++*pt; } int Input_Solve_Negative(char** p) //对输入负数进行处理 { int flag=0; int flag2=0; while (1) //对负数输入进行处理 { **p=getchar(); if (**p=='+'&&flag2!=1) { flag2=1; continue; } else if (**p=='+'&&flag2==1) return EOF; if (**p=='-'&&flag2!=-1) { flag=!flag; flag2=-1; continue; } else if (**p=='-'&&flag2==-1) return EOF; break; } if (!isdigit(**p)) return EOF; if (flag) { char buff=**p; **p='-'; ++*p; **p=buff; } return flag; } void Input_Absorb_Buffer(char** p) { while (getchar()!='\n'); Input_Free(p); *p=strdup(""); } void Input_Free(void** p) //释放堆空间 { if (*p==NULL) return ; free(*p); *p=NULL; } void Input_Catch(char* ps,char** p) { if (ps!=NULL) return ; Input_Free(p); assert(1); } int Input_Big_Int(char** p) //初始化数据 { char* pt=NULL; int k=0; size_t length=0; Input_Init_Data(p,(BUFF_MAX)*sizeof(char)); pt=*p; k=Input_Solve_Negative(&pt); //对输入负数进行处理 if (*pt=='\n') { *pt='\0'; return EOF; } if (k==EOF) { Input_Absorb_Buffer(p); return EOF; } do { Input_DATA(p,&pt,&length); }while (isdigit(*pt=getchar())); //对输入缓冲区进行处理 if (*pt=='\n') { *pt='\0'; return EOF; } Input_Absorb_Buffer(p); //对缓冲区残留数据进行处理 return 1; } void Input_String(char** p) //输入字符串 { char* pt=NULL; size_t length=0; Input_Init_Data(p,(BUFF_MAX)*sizeof(char)); pt=*p; while ((*pt=getchar())!='\n') Input_DATA(p,&pt,&length); *pt='\0'; } int Input_Data(const void* format,void* s) { if (scanf(format,s)!=1) while (getchar()!='\n'); return 1; } #undef BUFF_MAX #endif
程序代码:
#include<stdio.h> #include"Input.h" #include"Big_Intger.h" int main() { char* p1=NULL; char* p2=NULL; Input_Big_Int(&p1); Input_String(&p2); puts(p1); puts(p2); free(p1); free(p2); return 0; }
很久很久以前曾经写了个字符过滤器~用正则表达式匹配输入的字符~~不过回家后的电脑找不到了~打算回校再补充~这个可以看看效果如何~
[此贴子已经被作者于2017-5-29 16:16编辑过]