2016-10-03 4 views
-1

이 문제 문에 입력 코드의 일부를 표시하고 있습니다. 나는 사용자로부터의 알파벳 만 입력하고 싶다. 여기에서는 사용자가 영문자로 입력 할 때까지이 방법을 반복하고 싶습니다. getInput은 클래스의 메소드입니다.사용자가 알파벳 입력 만 제공 할 때까지 메서드에서 반복합니다.

public string getInput() 
{ 
    Console.WriteLine("Please enter your name. If you want to send the parcel: "); 
    this.NameOfSender = Console.ReadLine(); 
    return NameOfSender; 
} 

내가 원한다면 사용자가 입력을 잘못 입력하면이 코드는 "잘못된 입력. 정확한 이름을 입력하십시오."라고 표시합니다. 그런 다음 메서드의 시작 부분으로 다시 이동하십시오. 그렇게하는 법을 도와주세요.

+1

은 부울 변수를 만들고 false로 설정합니다. 변수가 거짓 인 동안 반복하십시오. 입력이 유효한 경우 true로 설정하십시오. –

+0

영숫자 항목에 대해 RegEx를 찾습니다. ReadLine과 Regex를 일치시킵니다. 통과하면 "고맙습니다."라고 적으십시오. 그렇지 않다면 "반드시"이어야하고 getInput을 다시 호출하십시오. –

+0

@D 스탄 틀리 제발 이것에 대한 약간의 코드를 제공해 주시겠습니까? 루프를 사용할 필요가 있습니까? 또는 다른 것. 제게 당신에게 감사 할 코드를 제공해 주시겠습니까? – mac

답변

-1

있는 정보 (Linq에All); (사용자가 단지 누를 경우 입력)를 빈 입력 확인 잊지 마세요 :

public string getInput() { 
    Console.WriteLine("Please enter your name. If you want to send the parcel: "); 

    while (true) { 
    NameOfSender = Console.ReadLine(); 

    // if name is 
    // 1. Not empty 
    // 2. Contains letters only 
    // then return it; otherwise keep asking 
    if (!string.IsNullOrEmpty(NameOfSender) && 
     NameOfSender.All(c => char.IsLetter(c))) 
     return NameOfSender; 

    Console.WriteLine("Wrong input. Enter name again"); 
    } 
} 

편집 : 당신이 공백 문자 사이 (예 : 존 스미스) 사용할 수 있도록 경우 일반 if에서 expresion :

... 
    if (Regex.IsMatch(NameOfSender, @"^\p{L}+(\p{L}+)*$")) 
     return NameOfSender; 
    ... 
+0

형제 님, 저에게 도움이 되었기 때문에 감사합니다. 처음에는 "이름을 입력하십시오."라는 메시지를 표시해야하지만 사용자가 잘못된 입력을 입력하면 "잘못된 입력. 이름을 다시 입력하십시오"라고 말해야합니다. 나는 이것을 이것을 나의 대답으로 표시 할 것이다. – mac

+0

@mac : 약간의 수정이 트릭을 할 것입니다. –

+0

고맙습니다. – mac

0

당신은 사용자 입력의 유효성을 검사하는 정규 표현식을 사용할 수 있습니다, 뭔가 같은 : http://www.regular-expressions.info/tutorial.html

편집 :

if(System.Text.RegularExpressions.Regex.IsMatch(input, @"[\w\s]+")) 
{ 
    ... 

트릭을 할해야

는 정규 표현식에 대해 알아 물론 사용자가 가질 수있는 중 정규식이 실제로 유효한 모든 이름을 포착하지 않도록 이름에 하이픈을 추가하십시오. 사용자가 제공 한 텍스트는 문자를 포함하고 그것이 사실로이 조건을 발견 할 때 사용자가 제공 한 텍스트에 변수 이름을 설정합니다 때까지

0
//declare this variable in your class 
public string Name = null; 

//change the return type to void 
public void getInput(){ 
    string CheckString = null; 
    while (Name.IsNullOrEmpty()){ 
     bool IsValid = true; 
     checkString = Console.ReadLine(); 
     foreach (char c in CheckString.ToCharArray()){ 
      if (!Char.IsLetter(c)){ 
       Console.WriteLine("Wrong Input!"); 
       IsValid = false; 
       break; 
      } 
     } 
     if (IsValid){ 
      Name = CheckString; 
     } 
    } 
} 

이 루프가 실행됩니다. 이런

1
//This regex pattern will accept alphabet only, no numbers or special chars like blank spaces 
Pattern p = Pattern.compile("[a-zA-Z]"); 

do{ 
    Console.WriteLine("Please enter your name. If you want to send the parcel: "); 
    this.NameOfSender = Console.ReadLine(); 
    boolean isOnlyAlpha = p.matcher(this.NameOfSender).matches(); 
}while(!isOnlyAlpha); 
관련 문제