写了个输入处理程序玩玩~
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编辑过]






~