[c#] C #을 사용하여 한 줄에 두 개의 정수 읽기


Answers

당신은 (오류 검사 코드가없는)

var ints = Console
            .ReadLine()
            .Split()
            .Select(int.Parse);

이것은 라인을 읽고, 공백을 나누고, 분리 된 문자열을 정수로 파싱합니다. 물론 실제로는 입력 된 문자열이 실제로 유효한 정수 (int.TryParse)인지 확인해야합니다.

Question

나는 두 개의 정수를 읽는 방법을 안다.

int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());

내가 2 개의 숫자를 입력하면, 즉 (1 2), 값 (1 2)은 정수로 구문 분석 할 수 없습니다. 만약 내가 1 2를 입력하면 2 개의 정수로 나타납니다.




public static class ConsoleInput
{
    public static IEnumerable<int> ReadInts()
    {
        return SplitInput(Console.ReadLine()).Select(int.Parse);
    }

    private static IEnumerable<string> SplitInput(string input)
    {
        return Regex.Split(input, @"\s+")
                    .Where(x => !string.IsNullOrWhiteSpace(x));
    }
}



이 시도:

string numbers= Console.ReadLine();

string[] myNumbers = numbers.Split(' ');

int[] myInts = new int[myNumbers.Length];

for (int i = 0; i<myInts.Length; i++)
{
    string myString=myNumbers[i].Trim();
    myInts[i] = int.Parse(myString);
}

희망이 도움이 :)




행을 문자열로 읽어 들여 문자열을 분리 한 다음 요소를 구문 분석합니다. 간단한 버전 (오류 검사가 추가되어야 함)은 다음과 같습니다.

string s = Console.ReadLine();
string[] values = s.Split(' ');
int a = int.Parse(values[0]);
int b = int.Parse(values[1]);



나는 훨씬 간단한 해결책을 가지고 switch 문을 사용하고 각각의 경우에 사용자에게 ( "\ n")로 시작하는 Console.write ()를 사용하여 메시지를 작성합니다.

다음은 사용자 입력을받는 동안 for 루프로 배열을 채우는 예제이다. * 참고 :이 작업을 수행하려면 for 루프를 작성할 필요가 없습니다. arrayOfNumbers []라는 정수 배열과 임시 정수 변수를 사용하여이 예제를 시도하십시오. 이 코드를 별도의 콘솔 응용 프로그램에서 실행하고 동일한 행에서 사용자 입력을받는 방법을 살펴보십시오!

           int temp=0;
           int[] arrayOfNumbers = new int[5];

        for (int i = 0; i < arrayOfNumbers.Length; i++)
            {
      switch (i + 1)
                {
                    case 1:
                        Console.Write("\nEnter First number: ");
                        //notice the "\n" at the start of the string        
                        break;
                    case 2:
                        Console.Write("\nEnter Second number: ");
                        break;
                    case 3:
                        Console.Write("\nEnter Third number: ");
                        break;
                    case 4:
                        Console.Write("\nEnter Fourth number: ");
                        break;
                    case 5:
                        Console.Write("\nEnter Fifth number: ");
                        break;


                    } // end of switch

                    temp = Int32.Parse(Console.ReadLine()); // convert 
                    arrayOfNumbers[i] = temp; // filling the array
                    }// end of for loop 

여기서 마술 트릭은 콘솔 어플리케이션을 속이고 있다는 것인데, 비밀은 프롬프트 메시지를 쓰는 것과 같은 줄에서 사용자 입력을 받는다는 것입니다. (메시지 => "첫 번째 번호 입력 :")

이렇게하면 사용자 입력이 같은 줄에 삽입되는 것처럼 보입니다. 나는 약간 원시적이라고 인정하지만, 간단한 작업을 위해 복잡한 코드로 시간을 낭비하지 않고도 필요한 것을 수행한다.




LinQ 및 정규 표현식 덕분에 한 줄에 (유형 검사가 필요 없습니다)

var numbers = from Match number in new Regex(@"\d+").Matches(Console.ReadLine())
                    select int.Parse(number.Value);



Links