关于C语言在Linux系统中---------scanf函数与printf函数的使用

文章目录

  • scanf 函数
    • 定义 
    • 功能
    • 调用格式
    • 常见的格式化说明符
    • scanf函数的返回值
    • 注意事项

  

1.定义

        scanf()函数是一种格式输入函数,也就是按照用户在键盘上所输入的数据传入到提前定义的变量中。和下文中printf()函数一样,都被包含在<stdio.h>这一文件中,所以用户在使用前都应该c文件的最前端加入#include <stdio.h>语句。

(下图是在Linux函数中程序员手册对其的格式要求)

在该格式中,括号内统称为字符串常量,const char代表形式参数类型,char*为字符型变量的地址,即字符串中首个字符的地址,format为形式参数名,最后的...为变参(可填可不填)。该函数返回值为int型,此处int为用户有效的输入个数。

2.功能

实现格式化输入 

3.调用格式

scanf(格式控制,地址表列);

格式控制中存在两种形式:

至于为什么在scanf函数中不能像printf函数中一样直接输出变量,而是需要进行取地址操作,

原因是在C语言中,默认传参为值传递,会在内存中开辟新的内存空间拷贝变量值,但并不会对原有变量的值进行改变。在进行C程序的编写中,一般main为主函数,在主调函数中,被调函数无法修改主调函数中变量的值,而scanf函数属于指针传参,是先获取了主调函数中变量的地址,从而对主调函数中的变量地址进行访问再对其内部数据进行修改。

注:仅通过地址无法知晓内存空间的大小

4.常见的格式化说明符

5.scanf函数的返回值

scanf函数的返回值为int类型,此处的int型为用户在输入时的有效输入位数

代码示例如下:

结果如下:

6.注意事项

a.在格式化列表中(在双引号中),写入的普通字符或者格式说明在终端中使用时,用户输入需要按照语句中的原式输入

错误示例如下:

所得结果:

b.在使用scanf过程中,若不对变量进行&取地址操作,在Linux系统中会造成程序崩溃

错误示例如下:

所得结果:

c.在使用scanf函数中会存在缓冲区的问题

在C语言中,用户调用scanf函数进行输入时,系统会开辟一个缓冲区,该缓冲区在数据结构中的类型是先进先出的队列,输入的数据会按照先进先出的原则在缓冲区进行保存。

错误示例如下:

可以看到,输入的1被同为整形的变量input1所接受打印,而后方所打印的字符串输出的是来自定义中input2所被系统赋予的随机数,这是因为所输入类型和格式化类型不匹配,那么输入的字符串是否被系统销毁了呢?实际上不是的,输入的字符串被保存在了缓冲区中。所以,如果数据不符合输入格式,则scanf()函数会读取失败,不再寻找输入缓冲区中后面的数据,不再等待用户输入新的数据,(即该scanf()函数调用结束),但不符合格式的数据依然保留在缓冲区中。

相关推荐

  1. C++函数scanf printf 函数标识符

    2024-01-26 10:52:01       15 阅读
  2. C语言scanfprintf 函数&字符用法

    2024-01-26 10:52:01       29 阅读
  3. Cprintfscanf函数探索

    2024-01-26 10:52:01       23 阅读
  4. c语言sscanf函数

    2024-01-26 10:52:01       31 阅读
  5. C语言输入函数scanfgets得区别

    2024-01-26 10:52:01       14 阅读
  6. C语言】/*printf 函数*/

    2024-01-26 10:52:01       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-26 10:52:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-26 10:52:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-26 10:52:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-26 10:52:01       18 阅读

热门阅读

  1. IPQ5018: Low-Cost OFDMA Supported WiFi 6 IIoT Solution DR5018

    2024-01-26 10:52:01       29 阅读
  2. 演讲比赛流程管理系统代码示例

    2024-01-26 10:52:01       33 阅读
  3. 蒙特卡洛模拟之逆变换法

    2024-01-26 10:52:01       35 阅读
  4. Objective-C中的nil和null的区别

    2024-01-26 10:52:01       30 阅读
  5. 关于 mapper.xml 中 sql使用 in 执行无效的原因

    2024-01-26 10:52:01       34 阅读