2014-09-16 3 views
0

나는 기본적으로 사용자가 "비밀 단어"선언 한 것이다임의의 최대 값을받지

일부 웹 사이트와 은행 등을 사용하는 보안 조치의 매우 간단한 버전 콘솔 응용 프로그램을 만들려고하고 있어요 (stringBuilder에 저장 됨). 그 후 사용자가 프로그램/웹 사이트 등에 액세스하려고 할 때마다 단어 (X는 무작위로 생성됨)의 문자 X를 입력해야합니다. 그러나 임의의 단어는 단어의 마지막 문자를 선택하지 않습니다.

예 : 2 글자의 시크릿 단어를 사용하면 다른 방법으로 글자를 선택하려고 할 때 첫 번째 글자 만 선택합니다. 전체 응용 프로그램을 던지는 문자 0이 있다고 생각합니다. .

는 왜 마지막 문자는 결코 선택되고 있지?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

     namespace randomCharSelecter 
     { 
      class Program 
      { 
       static void Main(string[] args) 
       { 
        StringBuilder stringBuilder = new StringBuilder(); 

        Console.WriteLine("Please Enter Your Secret Word"); 
        stringBuilder.Append(Console.ReadLine());   


        EnterInput: 
        Random rndSelect = new Random(); 
        int randomChar1 = rndSelect.Next(1, (stringBuilder.Length)); 

        Console.WriteLine("Please enter character {0} of your secret word", randomChar1); 
        string userInput = Console.ReadLine(); 

        if (userInput == (Convert.ToString(stringBuilder).Substring(randomChar1 - 1, 1))) 
         Console.WriteLine("Correct!"); 
        else 
        { 
         Console.WriteLine("Incorrect! Please try again"); 
         goto EnterInput; 
        } 

        Console.ReadLine(); 
       } 
      } 
     } 

답변

2

이 예상되는 동작입니다 : 아래

코드 (C#을 새로운) 도와주세요.

반환 값
유형 : 다음 documentation에서 선택 System.Int32

32 비트 MINVALUE 및 의 정수보다 크거나 같은 서명 적은 maxValue를보다; 즉, 반환 값의 범위 MINVALUE 아니지만 maxValue를를 포함한다. MINVALUEmaxValue를을 동일한 경우 MINVALUE이 반환됩니다. 즉

당신이, 당신이 사용할 필요가 (결과가 stringBuilder.Length 아마도 동일한 수, 즉) 포함 1 stringBuilder.Length 사이의 임의의 정수를 원하는 경우 :

또는
int randomChar1 = rndSelect.Next(1, stringBuilder.Length + 1); 

, 당신은 단순히 zero-based indexing을 사용하도록 코드를 수정할 수 :

int randomChar1 = rndSelect.Next(0, stringBuilder.Length); 
... 
if (userInput == (Convert.ToString(stringBuilder).Substring(randomChar1, 1))) 
    Console.WriteLine("Correct!"); 
+0

내가 지금 마법처럼 정말 고마워요 작품, 난 당신이 사용자에게 표시 : – KLM

+0

@KLM 메시지 뭔가가 알았 참조 아, 그리고 내부적으로 데이터를 나타내는 데 사용하는 값은 자주 다릅니다. 개인적으로 C#/.NET은 기본적으로 0부터 시작하는 색인을 사용하기 때문에 0부터 시작하는 인덱싱 접근 방식을 선호합니다. 사용자의 이익을 위해 표시 값을 조정할 것입니다. 그러나 두 가지 해결책 모두 유효합니다. 당신이 더 편한 것을 사용하십시오. –

+0

답장을 보내 주셔서 감사합니다. 이유는 제로 - 기반이 바람직하고 이에 따라 코드를 수정 해 줄 수 있습니다. 입력 해 주셔서 감사합니다. P-S-w-g 그래 바로 코드를 통해 가서로 변경 제로 @ – KLM

관련 문제