首页 理论教育 C语言程序流程控制-错误及格式化输入函数,教程摘要

C语言程序流程控制-错误及格式化输入函数,教程摘要

时间:2023-10-27 理论教育 版权反馈
【摘要】:在C语言中,主要包含3 种程序结构,即顺序结构、选择结构和循环结构。对于初学者来说,这个错误比较常见,这就需要读者熟记常见的数据类型对应的格式占位符,见表3.2。图3.4格式符与数据类型表3.2各类型的格式占位符对于格式占位符,用户可以借助%md 进一步规范输出数据的格式。图3.7控制实数宽度2)格式化输入函数scanf()scanf()函数的功能是按指定格式从键盘缓冲区中读入数据,存入地址表指定的存储单元中,并按回车键结束。

C语言程序流程控制-错误及格式化输入函数,教程摘要

任务描述

无论多复杂的程序,最终都可以由顺序结构、选择结构和循环结构来实现。本任务将简单介绍程序设计中的三大基本结构。另外在程序中输入与输出是非常重要的环节,还介绍各种基本输入与输出语句。

知识学习

无论做什么事情,都会存在一个“先做什么,后做什么,接着做什么,最后做什么”的顺序,这是生活中的流程。比如烧制一道美食,先要购买材料,然后按照菜谱顺序把握什么时候放油,什么时候放材料,什么时候放调料,火候如何,这样可以完成美食的制作。对于程序来说,也像做菜一样,讲究先做什么,后做什么。

在C语言中,主要包含3 种程序结构,即顺序结构、选择结构和循环结构。任何程序都可以由这3 种结构构成,这样程序结构便于编写、阅读、修改和维护。前面编写的程序绝大多数是顺序结构,从本项目开始将陆续加入选择和循环结构。我们来回顾一下顺序结构。

(1)顺序结构

顺序结构就是按照程序语句的先后顺序,一条一条地依次执行,可以用流程图[图3.3(a)]和N-S 图[图3.3(b)]分别来表述。

(2)输入输出语句

由于顺序结构比较简单,没有太多需要注意的地方,一个简单的顺序结构程序由变量的定义、输入、基本运算和输出来组成。在前面介绍的程序中,经常看到printf 和scanf 就是输入输出语句的常见表达。现在就一起来学习C语言中有哪些标准的输入输出函数。

C语言的输入和输出操作是通过C语言标准函数库中提供的输入输出函数来实现的。由于库函数的信息都在相关的头文件中,因此,使用前应在程序的开头使用相应的编译预处理命令,即使用前必须在程序的头部使用命令:

图3.3 顺序结构流程图

#include<stdio.h>

在前面的程序中,看到第一行都是这么写的,当然也可以换成#include“stdio.h”这种写法。两者的区别在于查找要包含的函数库文件时,查找的顺序不一致。前者是先在系统目录中查找所包含的内容(系统目录→环境变量目录→用户自定义目录),适合由系统写好的文件;后者是在自己的当前程序目录中开始查找所包含的文件(用户自定义目录→系统目录→环境变量目录),适合由编程人员自己编写的文件。根据不同情况选择不同的写法可以提高程序的执行效率,目前还未进入自己编写头文件的阶段,所以目前采用加< >的头文件添加方式。

1)格式化输出函数printf()

printf()函数的功能是按用户指定的格式,把指定的数据输出到显示器屏幕上。

printf()函数的一般格式【printf(“格式字符串”[,输出项表])】。

格式字符串可以由普通字符、格式占位符、转义字符组成。比如printf("转换后的数据为%d%d\n",x,y);其中“转换后的数据”为普通字符,原样输出,’\n’为转义字符,%d 为格式占位符。

输出项表是指要输出的数据,可以是变量也可以是表达式,还可以没有,也可以有多个,之间用‘,’逗号隔开。

例如:

a 对应的是浮点数3.1415,格式占位符应该是%f,b 对应的是整型数128,格式占位符对应的是%d。当不匹配时,编译环境一般不会报错,程序正常执行,但是结果是错误的。对于初学者来说,这个错误比较常见,这就需要读者熟记常见的数据类型对应的格式占位符,见表3.2。

图3.4 格式符与数据类型

表3.2 各类型的格式占位符

对于格式占位符,用户可以借助%md 进一步规范输出数据的格式。其中m 为整数,表示用多少位来存放数据。如果m 值小于要输出数据的位数,原样输出,如果m 值大于要输出数据的位数,则用空格来填充。那么在填充时,会根据m 的正负情况,选择把空格填充在数据左侧或者右侧。当m 为正时,空格填充在左侧,数据在右侧,类似于右对齐;当m 为负时,空格填充在右侧,数据在左侧,类似于左对齐,如图3.5所示。

图3.5 输出对齐

也可以借助%.nf 来约束输出的浮点数中小数点后面的位数,n 前面有个小数点‘.’,n 为几,小数点后保留几位,如图3.6所示。

(www.xing528.com)

图3.6 小数点位数

可以在约束位数的同时,规定浮点数小数后的位数,格式为%m.nf,是指整个小数占m位,包括小数点在内,小数点后有n 位,如图3.7所示。

图3.7 控制实数宽度

2)格式化输入函数scanf()

scanf()函数的功能是按指定格式从键盘缓冲区中读入数据,存入地址表指定的存储单元中,并按回车键结束。

scanf()函数的一般格式【scanf(“格式字符串”,输入项地址表列);】

此处的格式字符串只包含格式占位符和普通字符串两部分。格式占位符与printf 函数基本一致,对于普通字符来说,两者的处理方式不同,printf 函数中的普通字符是按照原样输出到屏幕,但是scanf 函数则需要程序员从键盘上按照顺序输入,不能省略,否则会出现数据读取错误。

输入项地址表,是指一系列的变量地址,这里需要使用取址运算符“&”,【& 变量名】。例如scanf("%d%d",&x,&y);

如果让x 的值为3,y 的值为5,执行代码时,在窗口中需要输入3 空格5 回车,此处的空格也可以换成回车或者Tab 按键。

如果代码“scanf("%d,%d",&x,&y);”变成这种,要想正确地把3 和5 传递到x 和y 的地址空间中,需要在窗口中输入“3 逗号5 回车”。这里逗号一定不能省略,因为scanf 中的普通字符必须原样输入。

该函数实际的执行过程是先从键盘读取数据,然后把数据依次存放到键盘缓冲区中,最后再分配传送到相应变量地址对应的存储空间中。这个函数就像快递员一样,从中转站(键盘缓冲区)拿到数据,根据上面的地址,把快递送到对应的人(变量)手中。

3)字符输出函数putchar()

putchar()函数的功能:在显示器上输出单个字符,格式为【putchar(c);】。

参数c 可以是字符变量、字符常量和整型变量,也可以是一个转义字符,演示程序结果如图3.8所示。

图3.8 putchar()

从结果中可以看到最后一个字符是7,并不是47,这就说明putchar 一次只能输出1 个字符。

4)字符输入函数getchar()

getchar()函数的功能:从键盘上输入一个字符,只接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。输入单个字符后,必须按一次回车,计算机才接受输入的字符。

把输入的字符可以赋给一个字符变量或整型变量,构成赋值语句,也可以不赋给任何变量,而作为表达式的一部分或者清空键盘缓冲区中多余的字符。

程序结果如图3.9所示。

图3.9 getchar()

任务总结

在程序设计中,输入与输出的时候可能会需要有对齐等要求,可以使用本任务所学格式化输入与输出来实现。注意各种格式化输入与输出的用法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈