@yy0518
2016-03-11T09:14:04.000000Z
字数 2198
阅读 1271
C语言学习笔记
1 C中格式化输出的[标志]都有哪些?分别有什么用
见大曲博客
2 编写一个程序,要求输入汽车行驶里数(整型)和耗油量(整型),输出平均油耗,分别以以下方式显示。
(1)保留后2位小数。
(2)保留后8位不足的用0填补(建议输入12,5)
(3)(C语言)左对齐输出长度5位,小数点后2位的指数并带正负号。
程序如下:
# include < stdio.h >int main(){int distance,consumption;float average;printf("Please input the distance(KM):\n");scanf("%d",&distance);printf("Please input the fuel consumption(L):\n");scanf("%d",&consumption);average = (float)consumption/distance;printf("The average fuel consumption is: %.2f L/KM \n",average);printf("The average fuel consumption is: %.8f L/KM \n",average);printf("The average fuel consumption is: %-5.2e L/KM \n",average);return 0;}
输出结果:
Please input the distance(KM):
5
Please input the fuel consumption(L):
12
The average fuel consumption is: 2.40 L/KM
The average fuel consumption is: 2.40000010 L/KM
The average fuel consumption is: 2.40e+000 L/KM
请按任意键继续. . .
结果分析:(3)中输出长度并不是5,因为最小长度为9,只有输出长度大于等于9时才能按照要求的格式输出。
C函数中包含很多个输入函数,其中scanf( )是最常用的,因为它包含很丰富的格式。与printf函数一样,scanf( )也是被定义在头文件stdio.h里,因此在需要调用该函数时,应在程序前加上#include 。
调用格式为:scanf("<格式化字符串>",<地址表>)
其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址。地址由地址运算符“&”后跟变量名组成,如&a是编译系统为变量a自动分配的地址,我们在使用的时候并不需要知道地址具体是多少,知道怎么使用就好。
scanf()转换说明符
转换说明符 意 义
%c 把输入解释成一个字符
%d 把输入解释成一个有符号十进制整数
%e,%f,%g, %a 把输入解释成一个浮点数 (%a是C99标准)
%E,%F,%G,%A 把输入解释成一个浮点数 (%A是C99标准)
%i把输入解释成一个有符号十进制整数
%o把输入解释成一个有符号八进制数
%p把输入解释成一个指针(地址)
%s把输入解释成一个字符串;输入的内容以一个非空白字符作为开始,并且包含知道下一个空白字符的全部字符
%u把输入解释成一个无符号十进制整数
%x,%X把输入解释成一个有符号十六进制整数
scanf()转换修饰符
* : 滞后赋值。示例:“%*d“
digit(s): 最大字段宽度;在达到最大字段宽度或者遇到第一个空白字符时(不管哪一个先发生都一样)停止对输入项的读取。示例:“%10s“
hh : 把整数读作signed char 或者 unsigned char 。示例:“%hhd“ ”%hhu“
ll: 把整数读作long long 或者 unsigned long long (C99)。示例:“%lld“ ”%llu“
h,l或L :“%hd“ 和 “%hi“指示该值将会存储在一个short int 中。
“%ho“ 和 “%hx“ 和“%hu“指示该值将会存储在一个unsigned short int中。
“%ld“ 和 “%li“指示该值将会存储在一个long中。
“%lo“ 和 “%lx“ 和 “%lu“ 指示该值将会存储在一个unsigned long中。
“%le“ 和 “%lf“ 和 “%lg“知识该值以double类型存储。将L(而非l)与e、f和g一起使用指示该值以long double类型存储。
如果没有这些修饰符,d、i、o、和x知识int类型,而e、f和g指示float类型
(1)scanf()如何读取输入
scanf()函数开始每次输入字符时,跳过空白字符(空格、制表符和换行符)直到遇到一个非空白符。
如果输入格式采用了字段长度,scanf()在字段结尾或者是第一个空白字符处(二者中最先到达的位置)终止。
(2)scanf()函数的返回值
scanf 函数的返回值反映的是按照指定的格式符正确读入的数据的个数。
如果输入数据与指定格式不符,则会产生输入错误。遇到输入错误,scanf函数会立即终止,返回已经成功读取的数据的个数。
所以,通过scanf函数的返回值和指定输入数据的个数(由格式符决定)的比较,可以判断数据输入是否成功。
1 %e输出的最小长度怎么求?
2 如何让scanf()函数正确接受有空格的字符串?如: I love you!
3 如何处理scanf()函数误输入造成程序死锁或出错?
4 什么是空白字符?