【问题标题】:Left justify output左对齐输出
【发布时间】:2018-09-14 03:15:42
【问题描述】:

我正在处理一项作业,我必须左对齐我的输出文本。当我测试可能的程序时,我似乎无法让输出对齐。同样对于 GPA,如果我试图证明文本的合理性,我会丢失 2 个小数点精度。这是我的代码

#Calculating $semester_gpa
if($credits_taken == 0) {
  exit();
}
my $total = $semester_gpa /= $credits_taken;

#Output formatting
printf ("The student name is: %-6s\n",$user_name);
printf ("Credits taken: %-6s\n", $credits_taken);
printf ("Credits passed: %-6s\n", $credits_passed);
printf ("GPA: %-6s %.2f\n", $total);

我的程序的输出如下

我到底做错了什么?

【问题讨论】:

  • 看来您的代码是左对齐的。你能提供一个你希望输出看起来像什么的样本吗?
  • 你确定要/=吗?
  • 你的最后一个 printf 只得到一个变量 $total,因此它被格式化为 %-6s -- 而 %.2f 什么也得不到。是不是忘了$total之前的另一个变量,还是应该没有%-6s

标签: string perl output


【解决方案1】:

如果您尝试左对齐值,则无需使用printf,只需在标签字符串中添加空格即可。通过标签字符串,我的意思是例如"Credits taken: %s\n"(注意:%之间的空格)

$user_name = 'Jogi';
$credits_taken = 13;
$credits_passed = 9;
$semester_gpa = 4.329;

#Calculating $semester_gpa
if($credits_taken == 0) {
  exit();
}
my $total = $semester_gpa /= $credits_taken;

#Output formatting
printf ("The student name is: %s\n", $user_name);
printf ("Credits taken:       %s\n", $credits_taken);
printf ("Credits passed:      %s\n", $credits_passed);
printf ("GPA:                 %.2f\n", $total);

即使你想右对齐,你仍然应该在标签字符串中放置空格以使代码清晰易懂:

printf ("The student name is: %10s\n", $user_name);
printf ("Credits taken:       %10s\n", $credits_taken);
printf ("Credits passed:      %10s\n", $credits_passed);
printf ("GPA:                 %10.2f\n", $total);

注意语法%10.2f 将右对齐与小数精度结合起来。

要使对齐字段的宽度动态化,您可以使用特殊的*(星号)syntax for printf

$width = 20;
printf ("The student name is: %*s\n", $width, $user_name);
printf ("Credits taken:       %*s\n", $width, $credits_taken);
printf ("Credits passed:      %*s\n", $width, $credits_passed);
printf ("GPA:                 %*.2f\n", $width, $total);

如果您愿意,您甚至可以使精度动态化:

$width = 20;
$precision = 2;
printf ("GPA:                 %*.*f\n", $width, $precision, $total);

【讨论】:

    猜你喜欢
    • 2017-09-19
    • 2014-04-20
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2015-02-12
    • 2022-01-17
    • 2010-11-28
    相关资源
    最近更新 更多