zoukankan      html  css  js  c++  java
  • C语言 scanf()和gets()函数的区别

    C语言 scanf()和gets()函数的区别

    1.相同点:scanf( )函数和gets( )函数都可用于输入字符串

    2.不同点:两者在功能上有所区别,具体区别如下:

    要实现如下需求“从控制台输入字符串”有如下两种实现方式:

    1>使用gets()函数实现

    char str[100];
    
    printf("Input a string:
    ");
    
    gets(str);
    
    printf("%s
    ",str);

    使用上诉代码实现时,我们会发现控制台打印如下信息:[即警告gets()是不安全的]

     

    gets()函数总结:

    (1)gets() 从标准输入设备读取字符串,以回车结束读取,使用''结尾,回车符' '被舍弃没有遗留在缓冲区。

    (2)可以用来输入带空格的字符串。

    (3)可以无限读取,不会判断上限,因此使用gets不安全,可能会造成溢出

    2>使用scanf()函数实现

    char str[100];
    
    printf("Input a string:
    ");
    
    scanf("%s",str);
    
    printf("%s
    ",str);

    使用上诉代码实现时,我们会发现控制台打印如下信息:【输入:hello BJS150940 但是只能输出:hello】

     

    scanf()函数总结:

    (1)scanf() 以 空格 或 回车符 结束读取,空格 或 回车符 会遗留在缓冲区。

    (2)不能直接输入带空格的字符串。

    注意:scanf()函数如何才能输入带空格的字符串,应使用:【具体代码和输出内容如下:】

    scanf("%[^ ]", a);  //%[]输入字符集, [^ ] 表示除了' '之外的字符都接收,即可以接收空格,这个可以用来输入带空格的字符串

    char str[100];
    
    printf("Input a string:
    ");
    
    scanf("%[^
    ]",str);
    
    printf("%s
    ",str);

     

    转:循环输入一个字符,怎么样才能保证输入正常呢,仅需添加一句代码(取出缓冲区里特殊的空格和 即可)即可具体代码段如下:

     

    就是这么简单,仅仅一个缓冲区,各种效果,是不是很神奇,哈哈,这就是编程的乐趣。。。。奋斗奋斗

  • 相关阅读:
    在eclipse中API的封装和调用
    冒泡排序
    java中阻止类的继承
    java中数组复制的两种方式
    ssh框架搭建出现的异常: class com.my.entity.user not found while looking for property: id
    ssh框架中struts.xml 的配置参数详解
    线程的五种状态
    Sql Server 分页
    window.opener 子窗体操作父窗体
    贪心算法--汽车加油问题
  • 原文地址:https://www.cnblogs.com/qixinbo/p/7588144.html
Copyright © 2011-2022 走看看