1、
问题描述:
描述
输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。
输入描述:
输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。
输出描述:
三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0。
——————————————————————————————————————
我自己是这样写的,比较麻烦
看了题解才发现可以这样
原因分析:
考查scanf的输入格式控制与输出,可相见本题的提示。
通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。
2、
问题描述:
BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,转换以下ASCII码为对应字符并输出他们。
73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33
——————————————————————————————————————
我用的是循环的方式用%c输出
看了题解才发现可以直接输出,用%s
原因分析:
字符数组是可以用这种方式输出的,因为数组名即代表首地址,数组是一块连续的内存空间,所以能直接输出.如果是其他类型的数组则输出的是一个地址.
因为C和C++不进行数组的边界检查,数组在内存中存放的只是所有数组元素的值,而不存在一个地方可以表示数组的大小.所以cout函数没法知道该输出多少个元素。
而字符串则不同,它有一个’\0’用来表示字符串结束,cout看到’\0’就知道输出结束了.
可能你想问,为什么别的类型不也弄个类似于’\0’的结束符呢.那我就反问你,你认为哪个值用来做结束符合适?字符串可以用’\0’来表示结束,是因为’\0’这个值就是专门用来表示字符串结束的,对于其他类型,比如整数,你能说用0或-1来专门表示数据结束么。