| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 178 人关注过本帖
标题:求一个标准的输入数据方法~
只看楼主 收藏
九转星河
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:长长久久
等 级:版主
威 望:22
帖 子:3559
专家分:10221
注 册:2016-10-22
结帖率:100%
  已结贴   问题点数:20  回复次数:10   
求一个标准的输入数据方法~
已知用scanf输入数据是有风险的,那么有没有一种比较规范的输入写法例如用fscanf读取一个字符串或者int型的?~并且解决残留缓冲区问题~打算参考一下~
2017-09-13 18:53
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:11
帖 子:333
专家分:1153
注 册:2014-4-22
  得分:10 
自行编写一个scanf()函数啊,或者干脆直接编写一个C编译器和一套函数库

代码测试环境:  WinXP+C-Free5.0.
2017-09-13 21:37
renkejun1942
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:不是这样
等 级:版主
威 望:19
帖 子:1552
专家分:4915
注 册:2016-12-1
  得分:10 
字符串读取,然后转换成数值。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-09-13 21:39
九转星河
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:长长久久
等 级:版主
威 望:22
帖 子:3559
专家分:10221
注 册:2016-10-22
  得分:0 
回复 3楼 renkejun1942
嗯,刚刚测试了一下这个代码~这样应该是可以的~

程序代码:
void Input_Data(const char* format,void* data)     //输入处理函数
{
    char str[MAX_BUFF]={0};
    fscanf(stdin,"%s",str);

    while (sscanf(str,format,data)!=1)
    {
        while (getchar()!='\n');
        puts("输入数据不合法,请重新输入!");
        fscanf(stdin,"%s",str);
    }

    while (getchar()!='\n');
}


[此贴子已经被作者于2017-9-13 22:05编辑过]


[code]/*~最近喜欢吃瓜和睡觉~2017-08-25更~*/[/code]
2017-09-13 22:01
九转星河
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:长长久久
等 级:版主
威 望:22
帖 子:3559
专家分:10221
注 册:2016-10-22
  得分:0 
回复 2楼 vvvcuu
可以啊~虽然感觉自己写性能的很可能没有标准函数库的优越~但感觉自己写的可以熟悉并且自己调用上来比较顺手~

[code]/*~最近喜欢吃瓜和睡觉~2017-08-25更~*/[/code]
2017-09-13 22:03
renkejun1942
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:不是这样
等 级:版主
威 望:19
帖 子:1552
专家分:4915
注 册:2016-12-1
  得分:0 
回复 4楼 九转星河
fscanf 还不是不检查参数的数组上限。
读取函数我发过。

[此贴子已经被作者于2017-9-13 22:06编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-09-13 22:03
renkejun1942
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:不是这样
等 级:版主
威 望:19
帖 子:1552
专家分:4915
注 册:2016-12-1
  得分:0 
程序代码:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include "getstring.h"
#define INITSIZE 124

char *
getstring( FILE *FP )
{
    char *Temp, *Str;
    int CurrentSize, lx;
    int ch;

    CurrentSize = INITSIZE;
    Temp = NULL;
    Str = ( char * )malloc( INITSIZE * sizeof( char ) );
   
    if( NULL != Str )
    {
        for( lx = 0; EOF != ( ch = getc(FP) ) && '\n' != ch; lx++ )
        {
            if( lx == CurrentSize - 1 )
            {
                CurrentSize += INITSIZE;
                Temp = ( char * )realloc( Str, CurrentSize * sizeof( char ) );
                if( NULL == Temp )
                {
                    Str[ lx ] = '\0';
                    return Str;
                }
                Str = Temp;
            }
            Str[ lx ] = ch;
        }

        if( '\n' == ch )
            Str[ lx++ ] = '\n';
        Str[ lx ] = '\0';

        if( 0 == lx )
        {
            free( Str );
            Str = NULL;
            return Str;
        }

        if( lx < CurrentSize )
        {
            Temp = ( char * )realloc( Str, ( lx + 1 ) * sizeof( char ) );
            if( NULL == Temp )
                return Str;
            Str = Temp;
        }
        return Str;
    }
    else
        return NULL;
}

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-09-13 22:05
九转星河
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:长长久久
等 级:版主
威 望:22
帖 子:3559
专家分:10221
注 册:2016-10-22
  得分:0 
回复 6楼 renkejun1942
局限性还是有的~不过感觉已经比单纯用scanf直接输入数据好多了~当然现阶段能达到目标就可~

[code]/*~最近喜欢吃瓜和睡觉~2017-08-25更~*/[/code]
2017-09-13 22:08
renkejun1942
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:不是这样
等 级:版主
威 望:19
帖 子:1552
专家分:4915
注 册:2016-12-1
  得分:0 
回复 8楼 九转星河
局限性?在哪里?

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-09-13 22:09
九转星河
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:长长久久
等 级:版主
威 望:22
帖 子:3559
专家分:10221
注 册:2016-10-22
  得分:0 
回复 9楼 renkejun1942
啊,没事啦,我是说我自己编写的~你的那个倒是有参考价值~

[code]/*~最近喜欢吃瓜和睡觉~2017-08-25更~*/[/code]
2017-09-13 22:11









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

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