标题:写了个输入处理程序玩玩~
只看楼主
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
已结贴  问题点数:20 回复次数:2 
写了个输入处理程序玩玩~
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编辑过]

搜索更多相关主题的帖子: 输入 处理 char size puts 
2017-11-18 02:43
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
得分:20 
根本不知道你在玩什么

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-11-20 17:19
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 2楼 Alien_Lee
简单来说就是先把输入内容储存在一个字符串中,再用sscanf进行格式读取~主要是为了解决scanf的读取字符串越界以及缓冲区残余问题~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-20 18:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-482605-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.138075 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved