<string.h> // 提供strlen()函数原型
C语言没有字符串类型,只能使用char数组来存储字符串!
‘\0’:称为空字符(null character)。空字符不是数字0,它是非打印字符,问:它的ASCII编码值是多少?是0。啊,原来ASCII的第一个字符,是字符串结尾的’\0’。
scanf遇到空格后,就不会读取输入。如果要读取空格,用fgets()代替?注意,有s。有fget()吗?
printf sizeof的值,还需要用%zd
limit.h和float.h提供的是整数和浮点数的大小限制信息。
查询:在limits.h中查找基本数据类型的取值范围P99,同理,float.h中也有最少有效位等信息。都是用的#define!!!
查询:P101,转换说明表,%a, %d…
在%和转换字符之间插入修饰符可修饰基本的转换说明。
查询:P103,printf的修饰符,如%4d,%hd
冷知识:ptrdiff_t类型(两个指针差值类型,没用过)和t修饰符。
float参数的转换:
没有float类型的转换说明!float会被自动转换为double类型。
查询:P104,printf标记的详细说明表
%d,%f这些转换说明的意义是什么?它们把以二进制格式存储在计算机中的值转换成一系列字符。76被存储为01001100,%d将其将其转换为字符7和6,并显示76。
%d可以解释为“把给定的值翻译成十进制整数文本并打印出来”
以前有注意过printf()的返回值吗?
正常返回打印字符的个数,如果输出错误,返回一个负值。写入文件时常用?(现在讲的都是写入到terminal),例如,一张已满的DVD拒绝写入,蜂鸣30s;一个文件拒绝写入,返回负值,采取相应措施。
C语言有多个输入函数(都有哪些,为什么要这么多个?),scanf是最通用的一个。
从键盘输入的都是文本,因为键盘只能生成文本字符。要输入整数2014,就要一次输入2/0/1/4字符,scanf再将其转换成数值。
查询:P113,scanf()常用的转换说明%c, %p以及修饰符*,h等。是否和前面的表格重复?
scanf用%s,会读取空白字符以外的所有字符。
出现了,其它的输入函数getchar()和fgets(),这个fgets中的f,会让人以为是file。
问题:scanf不是遇到空白就退出的吗?为什么最后这一行没问题?scanf会跳过整数(我理解为数字)前面的空白。(试试其它)
scanf需要一个数字,用户却输入一个非数字字符串,scanf返回0(不像printf返回非负)。
当scanf检测到“文件结尾”,返回EOF。EOF定义在stdio.h中,一般定义为-1.
冷知识:*修饰符,先跳过
printf打印对齐:可以使用类似%9d等
冷知识:有些地方(例如法国、荷兰)的小数不是用“.”,而是用“,”。33,33,3其实是33.33.3
查询:附录B参考资料V介绍C支持的本地化。