Как принять список целых чисел в качестве входных данных? Единственное, что я могу придумать, - это получить все целые числа из списка, используя STDIN. Есть лучший способ сделать это?Принимать пользовательский ввод perl
ответ
Вот один подход, принимая разделенный запятыми список целых чисел:
my $input = <STDIN>;
chomp($input);
if ($input !~ m/^(\d+(,\d+)*)?$/) { die('invalid input'); }
my @input = split(/,/, $input);
Или вы можете прочитать одно целое число в каждой строке:
my @input;
while (my $input = <STDIN>) {
chomp($input);
if ($input !~ m/^\d+$/) { die('invalid input'); }
push(@input, $input);
} ## end while
Если вам нужна одна строка 'if', используйте обратную сторону:' die qq (Invalid input), если $ input! ~/^ \ D + $/'. –
Это, как я это сделал:
$input = 0;
while($input != -1)
{
print "add input, finish with -1", "\n";
$input = <STDIN>;
chomp($input);
push(@array, $input);
}
#You also need to remove the last input, -1, with pop:
pop(@array);
print @array;
Консольный выход:
add input, finish with -1
1
add input, finish with -1
2
add input, finish with -1
-1
12
Если пользователь вводит строку цифр с разделителями табуляции напрямую, вы можете использовать функцию сращивания для разделения строк.
@array = splice(/\t/,$array[0])
Когда вы показываете код или вывод, отступайте строки на четыре пробела, чтобы он отображался как программа. Вы можете увидеть, как я это сделал, нажав «edit» выше. –
Вы никогда не проверяли свой ввод, который может быть проблемой, если вы вводите нецелые числа. Вы также никогда не расписываете свой ввод, поэтому каждый из них находится на отдельной строке. У вас есть скрытая _ новая строка в конце каждого номера. –
Спасибо, Дэвид. Также -1 должен быть удален с поп-музыкой. Плохое редактирование! –
Вы хотите ввести список целых чисел? Я так понимаю, вы хотите ввести список чисел и принять этот ввод, если они все целые.
В этой программе я цикл навсегда, пока не получу действительный список, таким образом, for (;;)
. Некоторые люди предпочитают while (1)
.
Я использую looks_like_number
, чтобы проверить, является ли ввод числовым, а затем используйте int
, чтобы убедиться, что это число является целым числом. Вы можете использовать регулярное выражение, например, /^\d+$/
, но нет гарантии, что он работает при любых обстоятельствах. Использование результатов int
и looks_like_number
гарантирует результаты.
Я предполагаю, что список целых чисел может быть разделен запятыми или разделен запятыми или обоими, таким образом, мой split /[\s,]+/
.
Вы сказали:
Единственное, что я могу думать получает каждое целое число из списка специально с помощью STDIN. Есть лучший способ сделать это?
Вы читаете данные из дескриптора файла, будь то файл или что-то вроде STDIN
. Ничего подобного. Тем не менее, вы можете, по крайней мере, сделать это одним входом, а не по одному, что, я полагаю, вы имеете в виду.
Кстати, я мог бы совместил свой числовой тест с:
if(not looks_like_number $integer or $integer != $integer) {
Поскольку это or
заявления, если это будет сначала проверить, если $input
выглядит цифровым, и если это не так, предупрежу о вводе перед проверкой, является ли это целым числом. Тем не менее, я не уверен, что это на самом деле яснее, чем сделать это слишком разными заявлениями.
#! /usr/bin/env perl
#
use strict;
use warnings;
use feature qw(say);
use Scalar::Util qw(looks_like_number);
my @integers; # Storage for my integers
#
# Keep looping until you have a valid input
#
INPUT:
for (;;) {
print "List of integers: ";
my $input = <STDIN>;
chomp $input;
@integers = split /[\s,]+/, $input;
#
# Verify inputted "number" is numeric and an integer
#
for my $integer (@integers) {
if(not looks_like_number $integer) {
warn qq(Invalid number entered: "$integer");
next INPUT;
}
if($integer != int $integer) {
warn qq(Invalid integer entered: "$integer");
next INPUT;
}
}
#
# Exit if there's at least one integer in @integers
#
last if @integers;
}
say "Integers: " . join ": ", @integers;
- 1. Принимать пользовательский ввод от Activity
- 2. Perl неблокирующий пользовательский ввод
- 3. Как принимать пользовательский ввод в андроида
- 4. Login Trigger, который будет принимать пользовательский ввод
- 5. Python: Принимать пользовательский ввод в любое время
- 6. Пользовательский ввод Perl для команды unix
- 7. Принимать ввод как Vertex
- 8. ValidatePatternAttribute принимать недопустимый ввод
- 9. Принимать только числовой ввод
- 10. jQuery не может принимать пользовательский ввод при отправке формы
- 11. Петля, которая может принимать пользовательский ввод каждый раз через
- 12. Python 3: принимать пользовательский ввод, включая символы новой строки
- 13. Как принимать пользовательский ввод из HTML формы в программе C
- 14. Python - Как принимать пользовательский ввод и использовать его в функции
- 15. Как принимать поплавки как пользовательский ввод, без страшного бесконечного цикла
- 16. программы Python принимать пользовательский ввод и обновление консоли без «прокрутки»
- 17. питон Tkinter принимать пользовательский ввод с помощью функции
- 18. Скрыть поле ввода и по-прежнему принимать пользовательский ввод
- 19. Как принимать пользовательский ввод с консоли, но не использовать gets.chomp
- 20. Многолинейный пользовательский ввод
- 21. Многоязычный пользовательский ввод python
- 22. WPF Принимать ввод без фокуса
- 23. Пользовательский ввод в Struts2
- 24. Программа пропускает пользовательский ввод
- 25. Мой пользовательский WPF RIchTextBox не будет принимать пользовательский ввод, даже после установки IsReadOnly = false
- 26. Сценарии Bash Shell - Пользовательский ввод
- 27. Как распечатать пользовательский ввод в файл на Perl?
- 28. Пользовательский ввод Perl и MySQL для выбора строки?
- 29. не в состоянии принять пользовательский ввод в perl
- 30. Cassandra UDF и пользовательский ввод
Вам нужно будет объяснить, в чем проблема с чтением из дескриптора файла, поскольку нет другого способа получить данные в программу, и трудно угадать, что может быть лучшим способом *. – Borodin
Существует много способов принятия входных данных. Какой из них вы хотите использовать? – ikegami