返回信息流#include <stdio.h>
int iLine=1;
int main(void) { printf("%*s\n", 7-(iLine>4?iLine-4:4-iLine), "*******"+2*(iLine>4?iLine-4:4-iLine));
if(++iLine != 8) main(); return 0; }
这段代码会打印菱形 请问:printf("%*s\n", 7-(iLine>4?iLine-4:4-iLine), "*******"+2*(iLine>4?iLine-4:4-iLine));这一句是什么意思啊?
这是一条镜像帖。来源:北邮人论坛 / cpp / #42990同步于 2010/8/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助] 打印菱形的问题
bleach1235
2010/8/31镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
printf还有一个地方要注意:%s中间可以加一个*(星号)
然后得话中间的7-(iLine>4?iLine-4:4-iLine)就表示从第几行开始打印
"*******"+2*(iLine>4?iLine-4:4-iLine)相当于&"*********"[num]
num就是2*(iLine>4?iLine-4:4-iLine)
【 在 wrmfw 的大作中提到: 】
: printf还有一个地方要注意:%s中间可以加一个*(星号)
: 然后得话中间的7-(iLine>4?iLine-4:4-iLine)就表示从第几行开始打印
: "*******"+2*(iLine>4?iLine-4:4-iLine)相当于&"*********"[num]
: ...................
这段里面唯一不明白的是字符串和Int相加是个啥啊。。
实际上,
&"*******"[int]等价于&*("*******"+int),
去掉&*后,就是"*******"+int了。
【 在 xiecaiji 的大作中提到: 】
: : printf还有一个地方要注意:%s中间可以加一个*(星号)
: : 然后得话中间的7-(iLine>4?iLine-4:4-iLine)就表示从第几行开始打印
: : "*******"+2*(iLine>4?iLine-4:4-iLine)相当于&"*********"[num]
: ...................
还是这段话解释的更清楚啊---引
众所周知,C语言是没有字符串变量的,因而,C89规定,字符串常量就是一个字符数组。因此,尽管字符串常量的外部表现形式跟数组完全不同,但它的确是一个真正的数组,实际上,字符串常量本身就是这个数组的首地址,并且具有数组类型,对一个字符串常量进行sizeof运算,例如sizeof("abcdefghi"),结果是10,而不是4。字符串常量与一般数组的主要区别,是字符串常量存放在静态存储区,而一般数组(非static)则是在栈中静态分配的。由于字符串常量是数组首地址,因此可以数组引用的形式使用它
【 在 xiecaiji 的大作中提到: 】
: : printf还有一个地方要注意:%s中间可以加一个*(星号)
: : 然后得话中间的7-(iLine>4?iLine-4:4-iLine)就表示从第几行开始打印
: : "*******"+2*(iLine>4?iLine-4:4-iLine)相当于&"*********"[num]
: ...................
【 在 wrmfw 的大作中提到: 】
: 还是这段话解释的更清楚啊---引
: 众所周知,C语言是没有字符串变量的,因而,C89规定,字符串常量就是一个字符数组。因此,尽管字符串常量的外部表现形式跟数组完全不同,但它的确是一个真正的数组,实际上,字符串常量本身就是这个数组的首地址,并且具有数组类型,对一个字符串常量进行sizeof运算,例如sizeof("abcdefghi"),结果是10,而不是4。字符串常量与一般数组的主要区别,是字符串常量存放在静态存储区,而一般数组(非static)则是在栈中静态分配的。由于字符串常量是数组首地址,因此可以数组引用的形式使用它
谢谢 明白了很多 还有一些不清楚:i从1到7
i=1-----第四行------一个*
i=2-----第五行------三个*
i=3-----第六行------五个*
i=4-----第七行------七个*
i=5-----第六行------五个*
i=6-----第五行------三个*
i=7-----第四行------一个*
应该是这样吧 可是您看这个行数,好像不太对啊。。。。如果是1-7行就是菱形了。。
你是指列数么?
【 在 bleach1235 的大作中提到: 】
:
: 【 在 wrmfw 的大作中提到: 】
: : 还是这段话解释的更清楚啊---引
: ...................
我之前说的printf函数中间的int是指列数,是从第int列开始显示
LZ为何说它是行数呢?
我执行了下,没问题滴
【 在 bleach1235 的大作中提到: 】
:
: 【 在 wrmfw 的大作中提到: 】
: : 还是这段话解释的更清楚啊---引
: ...................
【 在 wrmfw 的大作中提到: 】
: printf还有一个地方要注意:%s中间可以加一个*(星号)
: 然后得话中间的7-(iLine>4?iLine-4:4-iLine)就表示从第几行开始打印
: "*******"+2*(iLine>4?iLine-4:4-iLine)相当于&"*********"[num]
: ...................
那个是行数还是列数无所谓吧,关键是i的取值从1到7时,对应在哪行或者哪列打印,您的意思是当i=1时 在第四列打印一个*吗?