第4章 字符串和格式化输入/输出
4.1前导程序
此处name没有&前缀!
char name[40];
scanf("%s",name);
C::复杂换来的是程序的高效和方便控制输入/输出。如果先用了c++(贵校大部分人都是直接使用了<iomanip>
在cout中控制输出)回首再看C就会发现就是%.2f
这么简单。
4.2字符串简介
4.2.1char类型数组和null字符
要空一个字符给'\0'
,给一个能放5个字符的数组放了五个满满当当的东西,你应该可以看到非常著名的“烫烫烫”。
4.2.2使用字符串
scanf()
会在读入的是由给你补上空字符的,双引号引起来的东西都会被编译器自己补上空字符。
scanf()
会在读取到第一个空格的时候不再读取。
4.2.3strlen()函数
这边出现了“对象”的概念!如果不能理解没有关系,我觉得object翻译成东西会更方便初学者理解。。。而不是出现的地方都像Windows那样“55个对象“。
当我细读这一章的时候发现sizeof还有不加括号的用法……我之前学习确实不认真啊。。。
4.3常量和C预处理器
确实见到了c_开头命名常量的人@long, 用const声明的是变量而不是常量(C译者),本书作者认为“明示常量”相当于“符号常量”,探讨之后觉得不扣这个字眼了。//有人指出#define比const快
C::C预处理器是非常有用的工具,要好好利用它。
4.4print()和scanf()
4.4.1printf()函数
4.4.2使用printf()
有一个‘-’标记可以尝试一下,想不到用会比较麻烦。
2.学以致用
4.4.4转换说明的意义
1.转换不匹配
图4.9传递参数以及上面的概念非常重要。
2.printf()
的返回值
打印字符的个数(我居然以前无知的以为是void
)(错误即-1)
3.打印较长的字符串
4.4.5使用scanf()
*修饰符在4.4.6中被讨论,百度上居然没有任何关于抑制赋值的东西。。。
1.从scanf()
的角度看输入
//scanf()
是有返回值的。
输入格式错误会导致烂掉,再也读不进。
2.格式字符中的普通字符
4.4.6printf()&scanf()
中的*修饰符
和之前的东西配合就可以很方便的输出有格式的表格了呢!
顺大便一体cout&&cin
可能会比程序员指定的格式化输入输出慢上5倍甚至以上!//知乎上有分析cin对象。
4.4.7printf()
的用法提示
居然还有本地化这种东西
4.5关键概念
看到这边说的能用#define
就不要使用const
,就想说,能用const就使用const,这几天有一个设计类的作业,不用const死活读入不进去……被@long提意见说能用const就使用const。大概就是鲁棒性吧。
4.6本章小结
读了之后吧,有了不少想法,人之患在好为人师……有些老师还在念printfile||printfuntion就在写书了,讲述的竟然还是c++。