2017-12-06 5 views
2

Ich bin sehr neu zu Perl und ich lerne das ist nicht wie C++. Der Benutzer wird also eine beliebige Länge eingeben, und ich möchte jede Ziffer hinzufügen und die Summe ausdrucken. perl von Benutzereingabe einer Zahl, fügen Sie jede Ziffer hinzu

#!/usr/bin/perl -w 
use strict; 
use warnings; 

print "Enter a number :"; 

my $num = <STDIN>; 

my @array = $num; 
my $sum=0; 
for my $arr (@array){ 

    $sum += $arr; 

print $sum; 
} 

Zum Beispiel gibt der Benutzer 1234, die Summe: 10 das tatsächliche Ergebnis bekomme ich 1234.

+0

Wenn Sie 'Verwendung Warnungen verwenden;', brauchen Sie nicht '-w' in shebang Linie. Zweck von beiden ist gleich. – serenesat

Antwort

3

Sie brauchen nur zwei Linien

use strict; 
use warnings; 

print "Enter a number :"; 

my $num = <STDIN>; 

#You missed out to remove the entermark at the end 
chomp($num); my $newnum = "0"; 

$newnum += $_ for split//, $num; 

print $newnum; 

Nachricht hinzuzufügen: ich außer Kraft nicht oder nicht die Methode überlegen, was man jedoch gefolgt habe ich tat genau das, was ich in Perl wissen.

Further More details

+0

Offensichtlich weiß ich nicht, wie man das wirklich theoretisch erklären kann. Da ich auch in Perl lernen kann, habe ich praktisch eine Idee. – ssr1012

+0

ich bin auch neu zu perl, Gibt es einen Unterschied zwischen der Syntax 'split //, $ num' und' split ('', $ num) ''? Ich war an die zweite gewöhnt, aber ich sehe jetzt die erste überall –

+0

Verwenden Sie 'map' nicht, wenn Sie' for' meinen. – Borodin

5

Sie müssen die Eingabezeichenfolge $num in einzelne Ziffern brechen. Versuchen Sie, my @array = $num durch my @array = split //, $num zu ersetzen. Lesen Sie mehr, indem Sie perldoc -f split ausführen.

In Perl werden sowohl Strings als auch Nummern als SCALAR s klassifiziert. Ein Skalar wird automatisch als Zahl behandelt, wenn arithmetische Operationen (wie +) mit ihnen ausgeführt werden, sodass die Summierung innerhalb der for-Schleife wie erwartet funktioniert.

+0

Es wird auch zuerst überprüft, ob es [aussieht_like_number] (https://perldoc.perl.org/perlapi.html#looks_like_number) – zdim

Verwandte Themen