Chinaunix

标题: 谁帮我看看这道笔试题的printf语句,居然看不懂 [打印本页]

作者: sdydding    时间: 2007-09-22 21:08
标题: 谁帮我看看这道笔试题的printf语句,居然看不懂
main()
{
int i;
for(i=0;i<=N;i++)
{
    printf("%*.*s%-*.*s\n",N,i<=N/2?i:N-i,"*******************",N,i<=N/2?i+1:N
-i+1,"*******************");
}

}
作者: yuangong    时间: 2007-09-22 21:12
看到这样的题目就恶心.
作者: wangyq126    时间: 2007-09-22 21:34
不懂,等高人解读..
作者: jamesr    时间: 2007-09-22 21:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: cugb_cat    时间: 2007-09-22 21:47
挺有意思,居然打印一个这个:
          *         
         ***        
        *****      
       *******      
      *********     
     ***********   
      *********     
       *******      
        *****      
         ***        
          *
作者: hb12112    时间: 2007-09-22 23:45
原帖由 sdydding 于 2007-9-22 21:08 发表
main()
{
int i;
for(i=0;i


}

我的理解是%*.*s %-*.*s 共需要6个参数,*表示将参数列表中的下一个参数做为输出精度。所以这里需要4个参数来控制精度。
i<=N/2?i:N-i这条语句是个条件操作符,当i<=N/2为真时取i值,为假时取N-i值。
另外注意在第二个参数中使用了-号,是为了左对齐。
这样解释是否能清楚?
作者: sdydding    时间: 2007-09-23 08:01
标题: 能把我当成傻瓜,解释的再详细点么^-^
比如.是做什么用的%是转义字符? 哪六个符号代表六个参数


先谢了
作者: phy0077    时间: 2007-09-23 11:06
标题: 回复 #1 sdydding 的帖子
在C.Primer.Plus.5th.Edition这本书上Chapter 4
Character Strings and Formatted Input/Output 的第4节
Exploring and Exploiting printf() and scanf()上可以找到详细的答案
推荐你看看
作者: MMMIX    时间: 2007-09-23 11:49
原帖由 jamesr 于 2007-9-22 21:42 发表
运行一遍就行了!
这种题目是典型的应试教育型的,故意刁难人的。会编程的对printf的格式就要100%掌握吗?
强烈BS这种公司!

其实也没啥,看着比较花哨而已。

BTW,这种问题确实无聊。
作者: hb12112    时间: 2007-09-23 11:57
%*.*s 其中2个*号需要2个参数,%s是格式控制符,意思是后面的参数要为字符串。
假设N=10,第一次循环的结果如下:
printf ("%*.*s%-*.*s\n",10,0,"*******************",10,1,"*******************");
%*.*s 取前三个参数,%-*.*s取后面三个参数。
printf ("%10.0s%-10.1s\n","*******************","*******************");

建议找本入门的书看看。
programming in C (the third edition)P349有详细解释.
作者: sdydding    时间: 2007-09-23 14:19
标题: 多谢了
我查看了the C Programming Language Second Edition
P136 的确如你所说
谢谢了
作者: namtso    时间: 2007-09-23 14:33
不同的库,对printf的实现上可能会有一些差异,记住常用的一些格式控制,在实际使用的时候,查看相应的手册就可以了。
题目里用到的技术,有的时候很实用,比如在unix下面,生成文本格式的报表,需要比较精确的格式控制,就要求对printf的格式控制非常熟悉。
作者: ddvv    时间: 2007-09-23 15:12
老谭的书不是有么?
作者: koolcoy    时间: 2007-09-23 17:20
man printf
作者: iceviewer    时间: 2007-09-24 10:44
原帖由 koolcoy 于 2007-9-23 17:20 发表
man printf


正解
作者: newzy    时间: 2007-09-24 11:06
用 c 不熟悉 printf/sscanf 的完整格式串的用法, 将会有很多遗憾, 优其在字符串处理方面.
还有相关函数: sprintf, snprintf, vsnprintf, fprintf, vfprintf,
作者: tassard    时间: 2007-09-24 12:39
原帖由 jamesr 于 2007-9-22 21:42 发表
运行一遍就行了!
这种题目是典型的应试教育型的,故意刁难人的。会编程的对printf的格式就要100%掌握吗?
强烈BS这种公司!

严重同意!要用了再查嘛
作者: MMMIX    时间: 2007-09-24 21:11
原帖由 iceviewer 于 2007-9-24 10:44 发表


正解

一点都不正, 应该是 man 3 printf. 因为 coreutils 中也有个程序叫 printf, 直接 man printf 看到的是 printf(1) 而非 printf(3).

[ 本帖最后由 MMMIX 于 2007-9-26 09:09 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2