Выравнивание по левому краю - PullRequest
0 голосов
/ 14 сентября 2018

Я работаю над заданием, в котором мне нужно оставить текст для выравнивания.Когда я тестирую, возможно, программирую, я не могу получить выходные данные для выравнивания.Также для 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);

Вывод моей программы выглядит следующим образом enter image description here

Что именно я делаю не так?

1 Ответ

0 голосов
/ 14 сентября 2018

Вам не нужно использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...