写了个输入处理程序玩玩~
scanf安全性问题终于可以暂告一段落了~还加上了个输入安全处理~感觉这样比较灵活~
当然用fgets最后还是会保留'\n'的~为了程序的通用性还是默认去掉了~
程序代码:
#include<stdio.h> #include<string.h> #define N 50 char* myScanf(char* s,size_t size); int main( void ) { char s[N]; char* p_buf=""; int t[3]; int i=0; size_t bufNum=0; memset(t,0,sizeof (t)); do { if (*p_buf=='\0') p_buf=myScanf(s,N); while (i<3&&*p_buf!='\0') if (sscanf(p_buf,"%d%n",&t[i],&bufNum)!=1) { p_buf=""; puts("输入数据有误,请重新输入!"); break; } else { p_buf+=bufNum; ++i; } }while (i<3); puts(""); for (i=0;i<3;++i) printf("%d\n",t[i]); puts(""); puts("请按任意键继续:"); getchar(); puts("结束程序!"); return 0; } char* myScanf(char* s,size_t size) { char* p=NULL; fgets(s,size,stdin); if ((p=strchr(s,'\n'))!=NULL) *p='\0'; else scanf("%*[^\n]%*c"); return s; }
[此贴子已经被作者于2017-12-16 12:51编辑过]