• 输入输出串小知识点


    #include <stdio.h>

    int atoi (const char* nptr);

    nptr 是一个以有数字或‘-’的字符开头+数字的字符串。反正从左往右碰到非数字字符(第一个可以是‘-’),就停止转换。

    char tab[] = "345"

    int a = atoi(tab); //a=345

    --------------------------------------------------------------------------

    char tab[]  = "-125dsdgsah";

    int a = atoi (tab);  //a= -125

    -------------------------------------------------------------------------

    char tab[] = "+15645";

    int a = atoi (tab); //a=15645

    -------------------------------------------------------------------------

    char tab[] = "   89849  ";

    int a = atoi(tab) ; //a= 89849

    ---------------------------------------------------------------------------

    char tab[] = "k25ds2";

    int a = atoi (tab); //a= 0 

    --------------------------------------------------------------------------

    如果你的数字很大可以,将数字转换成long ,long long 型;

    long atol (const char* nptr);

    long long atoll (const char* nptr);

    规则是一个样子的。

    char tab[20] = "3249237483439";

    int a = atoi ( tab );

    int b = (int)3249237483439;

    a == b 的;

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    下一个函数是 char*  fget ( char* s,  int size, FILE* stream);

    从流中获取数据,填充到指定的地址出(s), 取多少字符,取决于下面几点:

    1)取流缓冲区数据时,遇到‘ ’或EOF(0)时停止取字符;并且将字符+‘ ’取到s缓冲中;

    2)流缓冲区很多数据,取了size-1个字符还没碰到' '和EOF,那么fgets就取size-1个字符到s缓冲区中,最后一个用‘’填充;

    char tab1[3];

    char tab2[3];

    char tab3[3];

    char tab4[3];

    fgets(tab1, 3, stdin);

    fgets(tab2, 3, stdin);

    fgets(tab3, 3, stdin);

    fgets(tab4, 3, stdin);

    printf ( "%s ", tab1);

    printf ( "%s ", tab2);

    printf ( "%s ", tab3);

    printf ( "%s ", tab4);

    键盘输入:111111111111111111111111111111111111111111111111111

    屏幕输出:

    111

    111

    111

    111

    键盘输入:

    1

    1

    1

    1

    屏幕输出 :

    1

     ' '

    1

     ' '

    1

     ' '

    1

    说明‘ ’都被fgets获取并存起来了。

    键盘输入:

    111

    11

    屏幕输出:

    11

    1

    ‘ ’

    11

    ' '

    试验了这么久,就是说明了那两个规则;fgets就是一个不放过的读取然后存放到指定的内存处,而且只读取size-1个字符也是相当的安全,防止内存越界。

    这很满足我的胃口,因为我就想要全部的输入,结果我自己会处理,而不是像scanf那样,严格按照条件进行读取存放。

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    函数 : int scanf (const char *format, ...);

     值得注意的是scanf的返回值,表示命中了几个格式控制符对应的数据,scanf("%d%d", &a, &b);返回2说明取到了2个整数给a和b,圆满完成任务;返回1,说明只有获取了一个整数,0表示一个整数都没有获取成功。因为获取规则的设定与输入缓冲区的字符不一致,会导致获取失败。当然还有其他的原因。

    ----------------------------------------------------------------------

    scanf("%d", &a);

    键盘输入:f字符,获取失败;缓冲区残留f字符+' ';

    键盘输入:空格123,获取成功,a =  123;scanf会忽略空格和' ';缓冲区残留‘ ’

    键盘输入:f34,获取失败;缓冲区残留' ';

    键盘输入:34f,获取成功;缓冲区残留'f'+' ';

    键盘输入:35 56,获取成功,缓冲区残留空格+56;

    所以来获取输入时就是纯净的数字,就得留意一点了,用scanf("%d", &a),你是不知道用户输入的是不是纯数字的。

    要获取用户输入的纯数字,而将345t这种数字排除掉,那就用字符串获取scanf(“%s”, &str),在自行处理。还有就是使用char* fgets(const char* s, int len, FILE * stream);

    完全自己处理。

    scanf ("%*s%d", &a);它会将缓冲区开始处以空格为分隔符的第一个字符串,读取并丢掉,然后读取数字给a;

  • 相关阅读:
    直接报错了:无法加载文件 C:UsersAdministratorAppDataRoaming pmvue.ps1,因为在此系统中禁止执行脚本
    [vue系列]-vue+vue-i18n+elementUI 国际化
    new vue 实例发生了什么呢?
    vue引用外部JS的两种方案
    web轻量级富文本框编辑
    Cannot read property '_withTask' of undefined
    element 动态合并表格
    前端如何获取原始图片大小
    ASP.Net Core使用Ajax局部更新
    ASP.NET Core中的jQuery Unobtrusive Ajax帮助器
  • 原文地址:https://www.cnblogs.com/emptyYPen/p/7816170.html
Copyright © 2020-2023  润新知