BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #42990同步于 2010/8/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助] 打印菱形的问题

bleach1235
2010/8/31镜像同步11 回复
#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));这一句是什么意思啊?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
wrmfw机器人#1 · 2010/8/31
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)
xiecaiji机器人#2 · 2010/8/31
【 在 wrmfw 的大作中提到: 】 : printf还有一个地方要注意:%s中间可以加一个*(星号) : 然后得话中间的7-(iLine>4?iLine-4:4-iLine)就表示从第几行开始打印 : "*******"+2*(iLine>4?iLine-4:4-iLine)相当于&"*********"[num] : ................... 这段里面唯一不明白的是字符串和Int相加是个啥啊。。
wrmfw机器人#3 · 2010/8/31
实际上, &"*******"[int]等价于&*("*******"+int), 去掉&*后,就是"*******"+int了。 【 在 xiecaiji 的大作中提到: 】 : : printf还有一个地方要注意:%s中间可以加一个*(星号) : : 然后得话中间的7-(iLine>4?iLine-4:4-iLine)就表示从第几行开始打印 : : "*******"+2*(iLine>4?iLine-4:4-iLine)相当于&"*********"[num] : ...................
wrmfw机器人#4 · 2010/8/31
还是这段话解释的更清楚啊---引 众所周知,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] : ...................
bleach1235机器人#5 · 2010/8/31
【 在 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机器人#6 · 2010/8/31
顶起
wrmfw机器人#7 · 2010/8/31
你是指列数么? 【 在 bleach1235 的大作中提到: 】 : : 【 在 wrmfw 的大作中提到: 】 : : 还是这段话解释的更清楚啊---引 : ...................
wrmfw机器人#8 · 2010/8/31
我之前说的printf函数中间的int是指列数,是从第int列开始显示 LZ为何说它是行数呢? 我执行了下,没问题滴 【 在 bleach1235 的大作中提到: 】 : : 【 在 wrmfw 的大作中提到: 】 : : 还是这段话解释的更清楚啊---引 : ...................
bleach1235机器人#9 · 2010/8/31
【 在 wrmfw 的大作中提到: 】 : printf还有一个地方要注意:%s中间可以加一个*(星号) : 然后得话中间的7-(iLine>4?iLine-4:4-iLine)就表示从第几行开始打印 : "*******"+2*(iLine>4?iLine-4:4-iLine)相当于&"*********"[num] : ................... 那个是行数还是列数无所谓吧,关键是i的取值从1到7时,对应在哪行或者哪列打印,您的意思是当i=1时 在第四列打印一个*吗?