关于scanf特殊输入

来源:互联网 发布:马士兵java视频教程pac 编辑:程序博客网 时间:2024/05/20 10:53

/**这次来研究研究 输入与输出那些各种奇葩的事情**/

/**建议复制粘贴到编译器看**/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX 1000000
int main(){
    char arr[100];
    //scanf("%10[]",arr); /**the 奇葩 一号**/
    /** 经过我鼓捣 发现 %[] 可以输入一串任何东西 包括回车 空格 ,但是不清楚如何停止**/
    /** 巴特 可以在[]前加一个数字 比如 %10[] 这代表 最多可以输入10个数 类比(printf)的 %10d **/
    /** 这样的话 %10[] 可以表示 只读取 你输入的前10个东西哦**/
    /** top:C语言是输入是 将键盘输入的东西放在一个缓存中 如果 你不按回车,会一直往缓存里放东西,所以输入结束后 要按回车,把缓存流给scanf**/
    //scanf("%10[a-z A-Z 0-9]",arr); /**继续奇葩**/
    //printf("%s",arr);
    /** 这个怎么说呢,打个比方,少爷喜欢吃 字母表中的字母,无论大小写,还有数字,但是如果给他别的东西,他会气的跑开,差不多这个原理。嗯~ o(* ̄▽ ̄*)o**/
    /**输入只能读取[]中的字符,其他字符都会使输入提前结束**/
    /** 我说是[]中 所有字符,'-'是指定范围,不会当作字符看待吧。但是空格 ' ' 会!,我加空格是为了好区分,%[a-zA-Z0-9]写法比较好**/
    //printf("%s",arr);
    //scanf("%[^a]",arr);/**这个加个^ 猜猜代表什么,没错,代表'^'字符, <( ̄︶ ̄)↗[GO out!]**/
    /**[^a]其实是 除了'a'以外的都可以读入, a 作为输入结束符**/
    /**比如输入111111111111111111111回车 ,它会让你继续输入。。。
    但是 如果 1111111111111111111a 回车,它就结束了**/
    //printf("%s",arr);
    //scanf("%[^abcde]",arr); /**这个的话 试一试 ,会很有趣的**/
    //printf("%s",arr);
    /**再比如**/
    //scanf("%3s",arr);
    //scanf("%3c",arr);
    //scanf("%3d",arr);
    /**接下来就是一些小应用了
        有 fflush(stdin) 可以清空输入缓存,
        getchar() 直接把下一个字符get掉;
    **/
    /**大家可以试试下面这个小程序,明明无限输入 ,巴特 试试就知道了**/
    /*while(1)
    {
        scanf("%[a-z A-Z]",arr);
        printf("%s",arr);
    }*/
    /**然后再试试这个**/
    /*while(1)
    {
        scanf("%[a-z A-Z]",arr);
        getchar();
        printf(" the out is '%s'\n",arr);
    }*/
    /**还有这个**/
    /*while(1)
    {
        scanf("%[a-z A-Z]",arr);
        fflush(stdin);
        printf(" the out is '%s'\n",arr);
    }*/
    /**找到区别没 ,发现 他们都输出一样
    巴特 试试 输入 abcdef3g4h56j
    (●'◡'●)**/
    /**之后在试试把getchar()的那个进化一下**/
    /*while(1)
    {
        int f;
        f = scanf("%[a-z A-Z]",arr);  /**top scanf 会返回一个已经输入的东西的个数,这里的东西指的是一个东西,嗯~ o(* ̄▽ ̄*)o~~~~**/
        /**一个字符串 是一个东西,一个字符也是一个东西,一个数字也是一个东西,反正就是一串东西就是一个东西**/
        /*getchar();
        if(f!=0) printf("the out is '%s'\n",arr);
    }*/
    /**仔细思考一下就会发现他们之间的区别了**/
    /**就到这里吧 ヾ(•ω•`)o**/
return 0;
}