Вам не нужно использовать 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
для объединения выравнивания по правому краю с десятичной точностью.
Чтобы сделать ширину выравниваемых полей динамической, вы можете использовать специальный синтаксис *
(звездочка) для 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);