zoukankan      html  css  js  c++  java
  • gets()

    C:
    #include <stdio.h>    //这个头文件包含gets()函数,这个函数在ISO/IEC 9899 2011(C11)标准中被移除
    int main(void)
    {
        char str1[5];  //不要char*p,然后gets(p),这是错误的,因为p没有指向有效的内存,它可能指向任何非法地址          
             //     地方的未知大小的内存块,这样以来,就可能修改了不属于本程序的内存的内容
        gets(str1);
        printf("%s ", str1);
        return 0;
    }
     
    最重要的区别是gets读一行,getchar()读一个字符。
    先看原型:
    char * gets(char * ptr);
    int getchar(void);
    作用是:

    gets()用于从标准输入流stdin读入一个整行(以' '或EOF)结束,写入ptr指向的字符数组,并返回这个指针;出错或遇到文件结束时则返回NULL。行末的' '从流中取出,但不写入数组。gets()不检查被写入的数组大小。

    getchar()用于从标准输入流stdin读入一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。使用时也应该注意这一点。 
     

    今天看到一段话,大致是说gets比scanf()快,有点吃惊,搜了一下,scanf()和gets的区别大致有着几条:

    1.scanf() 会忽略行开头的所有空格,并以空格、换行符结束输入;

     使用getchar()读取scanf语句执行后,缓冲区留下的换行符,

     gets读入以任何字符开始的字符串,以换行符结束,但之后会丢弃换行符并以''代替;

    2. 在数据大量的情况下,用gets读取快于scanf()10倍以上(注:来自pudn,只有一段开头话)

    3.

    第一:要注意不同的函数是否接受空格符、是否舍弃最后的回车符的问题!
    读取字符时:
    scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
    getchar()以Enter结束输入,也不会舍弃最后的回车符;
    读取字符串时:
    scanf()以Space、Enter、Tab结束一次输入
    gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!

    第二:为了避免出现上述问题,必须要清空缓冲区的残留数据,可以用以下的方法解决:
    方法1:C语言里提供了函数清空缓冲区,只要在读数据之前先清空缓冲区就没问题了!
           这个函数是fflush(stdin)。
    方法2:自己取出缓冲区里的残留数据。
    (说实话这个语句我也没看懂,呵呵!为什么格式控制是这样的!希望高手指点一下!)
           scanf("%[^ ]",string);

    gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加''字符。其调用格式为:
    gets(s);
    其中s为字符串变量(字符串数组名或字符串指针)。
    gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。
    也就是说:gets()函数读取到 (我们输入的回车)于是停止读取,但是它不会把 包含到字符串里面去。然而,和它配合使用的puts函数,却在输出字符串的时候自动换行。
  • 相关阅读:
    Asp.net routing vs Url rewriting
    How to combine WCF Route and MVC Route to work together.
    Servlets beat CGI
    What if you encounter a problem when consume your WCF service ? How to Diagnostic it ?
    uva 4965 Sum the Square
    zoj 3633 Alice's present
    4966 Normalized Form
    ZOJ 3015 Collision Ball Game
    二分图 最小路径覆盖
    uva 2696 Air Raid
  • 原文地址:https://www.cnblogs.com/luoquan/p/5295225.html
Copyright © 2011-2022 走看看