免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2626 | 回复: 12
打印 上一主题 下一主题

STDIN的格式化输出为什么总少一位?内有代码 [复制链接]

论坛徽章:
5
技术图书徽章
日期:2014-02-10 10:55:18技术图书徽章
日期:2014-03-17 16:37:45狮子座
日期:2014-04-25 11:17:42未羊
日期:2014-08-13 11:45:23天蝎座
日期:2015-12-16 10:30:37
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-29 10:27 |只看该作者 |倒序浏览
use warnings;
use strict;

my @kk = 0..9;
push @kk,0..9;
printf "%20s\n",333;
print @kk;
print "\n";
my @xx = <STDIN>;
foreach (@xx){
          printf "%20s",$_;
          }

论坛徽章:
0
2 [报告]
发表于 2009-07-29 10:39 |只看该作者
啥意思?打印出什么了?

论坛徽章:
5
技术图书徽章
日期:2014-02-10 10:55:18技术图书徽章
日期:2014-03-17 16:37:45狮子座
日期:2014-04-25 11:17:42未羊
日期:2014-08-13 11:45:23天蝎座
日期:2015-12-16 10:30:37
3 [报告]
发表于 2009-07-29 10:58 |只看该作者
printf "%20s",333;和printf "%20s",$_;(STDIN输入的333)的结果不一样,print @kk;是基准

这是个测试格式化输出的程序

[ 本帖最后由 godsad 于 2009-7-29 11:03 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2009-07-29 11:30 |只看该作者
原帖由 godsad 于 2009-7-29 10:58 发表
printf "%20s",333;和printf "%20s",$_;(STDIN输入的333)的结果不一样,print @kk;是基准

你期望什么?得到的又是什么?

BTW,不要指望别人去运行你的代码,并猜测你是如何和程序交互的。

论坛徽章:
0
5 [报告]
发表于 2009-07-29 11:32 |只看该作者
[root@localhost perl]# ./perl-printf-test
                           333
01234567890123456789
333
                          333
真是的呀,试过几个方法都没有对齐

[ 本帖最后由 xiaobing927 于 2009-7-29 11:35 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-07-29 11:40 |只看该作者

回复 #5 xiaobing927 的帖子

my @xx = <STDIN>;
foreach (@xx){
          chomp;
          printf "%20s\n",$_;
}

论坛徽章:
5
技术图书徽章
日期:2014-02-10 10:55:18技术图书徽章
日期:2014-03-17 16:37:45狮子座
日期:2014-04-25 11:17:42未羊
日期:2014-08-13 11:45:23天蝎座
日期:2015-12-16 10:30:37
7 [报告]
发表于 2009-07-29 12:37 |只看该作者
原帖由 iceberg77 于 2009-7-29 11:40 发表
my @xx = ;
foreach (@xx){
          chomp;
          printf "%20s\n",$_;
}

这样就可以了,不过chomp不是去换行符的吗?哦明白了,换行也算一个字符,谢谢ls

我的那个代码预期结果是:
                           333
01234567890123456789
333
^D
                           333
实际运行结果总少一位
                           333
01234567890123456789
333
^D
                          333
最后的333少右移一位

[ 本帖最后由 godsad 于 2009-7-29 12:41 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-07-29 12:42 |只看该作者
第一次读到chomp 函数时,它看起来过于专门化。它对变量起作用,而此变量含有字符串。如果字符串结尾有换行符,chomp
可以去掉它。这基本上就是它能完成的所有功能,如下例:
$text = “a line of text\n”; #也可以由<STDIN>输入
chomp($text); #去掉换行符(\n)。

以上是小骆驼中的对这个函数的解释。我还是不明白了,比如我输入333然后再按下CTRL+D这中间发生的过程是什么?
我是刚学习时间不长,还望指点下。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2009-07-29 12:47 |只看该作者
原帖由 xiaobing927 于 2009-7-29 12:42 发表
我还是不明白了,比如我输入333然后再按下CTRL+D这中间发生的过程是什么?

这中间的过程是你输完 333 之后,还按了个回车,然后才是 Ctrl-D,因此 @xx 的第一个元素实际是 "333\n", 而不是 "333"

论坛徽章:
5
技术图书徽章
日期:2014-02-10 10:55:18技术图书徽章
日期:2014-03-17 16:37:45狮子座
日期:2014-04-25 11:17:42未羊
日期:2014-08-13 11:45:23天蝎座
日期:2015-12-16 10:30:37
10 [报告]
发表于 2009-07-29 12:47 |只看该作者
lss看3.8节,有详细描述的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP