数据输入输出的概念

数据输入输出的概念及在C语言中的实现

数据的输入与输出是相对于计算机而言的。其中:

  • 从计算机向外部设备输送数据称为输出。通常输出设备包括:显示器、打印机等;
  • 从外部设备向计算机输送数据称为输入。通常输入设备包括:键盘、鼠标、扫描仪等。

 库函数已编译成目标文件,在链接时与编译源程序得到的目标文件(.obj)相连接,生成可执行程序。

 注意:在使用系统库函数时,要用预编译命令#include将有关的头文件包含到用户源文件中(即在程序的开头)头文件中包含了调用函数时所需的有关信息。

简单的格式输入与输出

用简单的printf函数输出数据

  1. printf函数的一般格式

printf (“格式控制”,输出表列) ;

 (1)格式控制 ,用一对双引号括起来,包括两种信息:

  ①格式说明 由“%”和特定字符组成,如:%d、%c、%f等,是格式说明符,用于说明输出项目所采用的格式;

  ②普通字符 作为说明性的文字、符号等,照原样显示出来。

 (2)输出表列 中的各项目指出了所要输出的内容,可是常量、变量或表达式。

 (3)例如:printf(“a=%d b=%f\n”,a,b) ;

  1. 基本的格式字符

    符合含义
    %d按十进制整型数据的实际长度输出。
    %c仅输出一个字符。
    %s输出的结果是字符串
    %f以小数形式输出一个实数(含单双精度数)。整数部分全部输出,并输出6位小数。
    %e 或%E以指数形式输出一个实数(含单双精度数)。小数点前仅1位非0数字,并输出6位小数。

用简单的scanf函数输入数据

  1. scanf函数的一般格式

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

  • 作用

 将从键盘输入的值存入内存中所占的存储单元里。存储单元由地址标识。

  • 说明

  “格式控制”的含义同printf函数,说明输入的数据应使用的格式。

  “地址表列”是由若干个地址组成的,可以是变量的地址或字符串的首地址。&是取地址运算符,用于取出变量的地址。

 与格式输出一样,在格式控制中,用于说明输入数据格式的格式说明符总是以%开头,后面紧跟的是具体的格式。

  • 举例

    请添加图片描述
    请添加图片描述

较复杂的输入输出格式控制

 按指定格式输出数据的宽度、小数位数、上下行数据按小数点对齐、用八进制、十六进制输出等。

输出数据格式控制
  1. 整型格式说明符

请添加图片描述

m表示输出的整型数据所占总宽度(即列数),其中:

  • 当实际数据的位数不到m位时,数据前面将用空格补满;
  • 若实际数据位数大于m,则以数据的实际位数为准进行输出。

一个int型整数也可以%u格式输出,反之一个unsigned型整数也可以%d、%o、%x格式输出。按相互赋值的规则处理。

  1. 字符型格式说明符

    (1)字符char型

    %mc 输出的字符占m列,如:printf(“%3c”,’a’);实际输出为:_ _ a

    (2)字符串

    %ms 输出的字符串占m列。若串长>m,全部输出;若串长<m,左面补空格。

    %-ms 输出的字符串长<m,右面补空格

    %-m.ns 只取字符串前n个字符。若n<m,右面补空格;若n>m,m自动取n值。

说明:一个整数,只要其值在0~255范围内,也可义用“%c”格式使其按字符形式输出。 在输出前,系统会自动将该整数作为ASCII码转换成相应的字符;反之,一个字符也可以输出成一个整数。

演示:

请添加图片描述

请添加图片描述

  1. 实型格式说明符

    十进制数形式:%m.nf 或 %-m.nf

    指数形式:%m.ne 或 %-m.ne

    %g或%G形式:根据数值的大小,自动选%f 或 %e中宽度较短的一种格式,不输出无意义的0。

说明:

 在输出实型数据时,格式说明符中的m表示整个数据所占的宽度,n表示小数点后面所占的位数。

 如果在小数点后取n位后,所规定的数据宽度m不够输出数据前面的整数部分(包括小数点),则按实际的位数进行输出。

 需要指出的是,在C语言中,用于输出单精度实型数据与双精度实型数据格式说明符是一样的。

演示:

请添加图片描述

请添加图片描述

  • ​ 精度实型

单精度实型:%f 或 %e

双精度实型:%lf

  • 与输出不同,输入时无论是单精度还是双精度实型,都不能用m.n来指定输出的宽度和小数点后的位数;
  • 可以指定输入数据所占的列数,系统自动按它截取所需数据,如:scanf(“%3d%3d”,&a,&b); 当输入1234567时,a得到123,b得到456,多余的7无用;
  • 若在%号后有一个“* ”和一个数字,表示跳过它指定的列数,如:scanf(“%2d%*3d%3d”,&a,&b);当输入12345678时,a得到12, %*3d表示读入345这3个数但不赋给变量, b得到678。

 当用于输入整型数据的格式说明符中没有宽度说明时,则在具体输入

数据时分为以下两种情况:

① 如果各格式说明符之间没有其它字符,则在输入数据时,两个数据 之间用"空格"、或"Tab"、或"回车"来分隔。

b得到678。

 当用于输入整型数据的格式说明符中没有宽度说明时,则在具体输入

数据时分为以下两种情况:

① 如果各格式说明符之间没有其它字符,则在输入数据时,两个数据 之间用"空格"、或"Tab"、或"回车"来分隔。

② 如果各格式说明符之间包含其它字符,则在输入数据时,应输入与 这些字符相同的字符作为间隔。

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值