2016-10-04 4 views
1

Ich versuche, ein Programm zu erstellen, um den Benutzer zu bitten, eine Telefonnummer ohne Leerzeichen und Bindestrich mit Schleife eingeben. Wenn der Benutzer einen Leerraum oder einen Bindestrich eingibt, sollte das Programm zerbrechen und den Benutzer auffordern, es erneut zu versuchen. Aber ich habe wirklich harte Zeit mit der Schleife. Ich habe es ein paar Mal gemeistert, dass es nicht so weit ging, was ich habe ist, dass der Benutzer a fragt, eine Nummer einzugeben und die Nummer zu lesen. Wenn Sie mir helfen könnten, schätze ich Ihre Hilfe wirklich.versuchen, eine Telefonnummer ohne Platz zu bekommen

int num; 

Console.WriteLine("plz enter your phone number "); 
num = Convert.ToInt32(Console.ReadLine()); 

Console.WriteLine("the phone number :" + num); 

Console.ReadKey(); 
+11

Eine Telefonnummer ist keine Ganzzahl, die eine Zahl darstellt, die überlaufen kann und führende Nullen verliert. Lies es als eine Zeichenfolge, ersetze Leerzeichen und Bindestriche, überprüfe sein numerisches Zeichen und validiere es dann eine angemessene Länge. –

+0

'string pno =" 123 456 789 "; var s = pno.Replace ("", ""); ' – GauravKP

+0

Verwenden Sie eine MaskedTextBox mit der richtigen Maske – Sehnsucht

Antwort

0

Versuchen Sie folgendes:

int num; 
string input; 

Console.WriteLine("plz enter your phone number "); 
input = Console.ReadLine(); 
Console.WriteLine("the phone number: {0}", input.replace(" ", "").Replace("-","")); 

und jetzt, wenn Sie diese num irgendwo als Integer verwenden möchten, verwenden Sie es aus num:

num = Convert.ToInt32(input); 
+0

aber für num, ersetze es gibt mir einen Fehler – Shahzada

+0

Ich hatte gehofft, Sie würden einen String-Eingang nach den Kommentaren und Antworten verwenden. –

+0

Bearbeitete die Lösung –

4

Sie können versuchen, Linq mit um nur die Ziffern herauszufiltern:

string source = "+039 (923) 1234-456-78"; 

// 039923123445678 
string result = string.Concat(source.Where(c => c >= '0' && c <= '9')); 

Bitte beachten Sie, dass einige Telefonnummern ziemlich lang sein können (Ländervorwahl, Ortsvorwahl usw.) und passen daher nicht int; ein anderes Problem ist, dass eine Zahl kann gut mit Null starten (z. B. +039 ist ein Ländercode für Italien, wenn 39 kann als Vorwahl für Monza behandelt werden), die erhalten sein sollte.

+0

Warum nicht mit' char.IsDigit '? – Fabjan

+1

@Fabjan:' char.IsDigit 'wird alle * Unicode * Ziffern (einschließlich, sagen wir, * persische * Einsen) –

+2

char.IsDigit ('1') == wahr –

0

Da Sie kein Winforms-Steuerelement verwenden, haben Sie wirklich sehr wenig Kontrolle über Benutzereingaben und können nichts annehmen. Daher müssen Sie die Benutzereingabe wirklich als Zeichenfolge lesen.

Console.WriteLine("plz enter your phone number "); 
string input = Console.ReadLine(); 

Von dort würde meine Empfehlung alle Nicht-Ziffern Streifen aus sein:

input = System.Text.RegularExpressions.Regex.Replace(input, @"\D", string.Empty); 

Und dann können Sie versuchen, dies als eine Nummer zu machen:

long phoneNumber; 
Int64.TryParse(input, out phoneNumber); 

Hinweis: Ich denke, ganze Zahlen sind zu klein für das, was Sie brauchen - benutzen Sie einen großen Int.

+0

nicht nur 'int' zu klein (im Allgemeinen), sondern einige Zahlen * müssen * mit' 0' beginnen, zB '039 123456789' - * Italien * (Ländercode '039'), wenn geändert in' 39 123456789', kann gut mit der Ortsvorwahl für * Monza * in Italien verglichen werden –

Verwandte Themen