标题:求一个标准的输入数据方法~
只看楼主
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
已结贴  问题点数:20 回复次数:10 
求一个标准的输入数据方法~
已知用scanf输入数据是有风险的,那么有没有一种比较规范的输入写法例如用fscanf读取一个字符串或者int型的?~并且解决残留缓冲区问题~打算参考一下~
搜索更多相关主题的帖子: 标准 输入 数据 方法 字符串 
2017-09-13 18:53
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
得分:10 
自行编写一个scanf()函数啊,或者干脆直接编写一个C编译器和一套函数库

代码测试环境:  WinXP+C-Free5.0.
2017-09-13 21:37
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册: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: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册: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]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-09-13 22:01
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 2楼 vvvcuu
可以啊~虽然感觉自己写性能的很可能没有标准函数库的优越~但感觉自己写的可以熟悉并且自己调用上来比较顺手~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-09-13 22:03
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册: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: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册: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: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 6楼 renkejun1942
局限性还是有的~不过感觉已经比单纯用scanf直接输入数据好多了~当然现阶段能达到目标就可~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-09-13 22:08
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册: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: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 9楼 renkejun1942
啊,没事啦,我是说我自己编写的~你的那个倒是有参考价值~

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



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




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

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