簡體   English   中英

如何在C#中將用戶輸入轉換為int數組

[英]How to convert user input to an int Array in c#

我發現最能回答這個問題的事情是使用for循環將多個字符串輸入轉換為數組。

我只想取1個字符串並將前7位轉換為一個int數組。

此代碼采用字符的整數值,然后針對Unicode值對它們進行測試,以返回true(如果有效),或者返回false,以重申while循環並再次請求輸入。 當我使用Console.Read();進行此操作時 方法,並首先輸入一個無效值,它將說我的代碼對另外7次迭代無效。 這意味着console.Read()必須再運行7次,即使該字符串具有有效的輸入。

public static void GetDigits(ref int[] callNumberArray, ref bool valid)
        {
        Console.WriteLine("Please enter the code you wish to dial.");
        while ( valid == false)
        {//This loop will reiterate the read() function if the code is not valid.
            valid = true;
            for (int i = 0; i < 7; i++ )
            {
                if (i != 6 && i!= 5 && i != 5 && i != 4 && i != 3 && i != 2 && i != 1 && i != 0)
                {
                    i = 0;
                }
                callNumberArray[i] = Console.Read();// I want to change this

            }
            for (int i = 0; i < 7; i++)
            {
                if (i != 6 && i != 5 && i != 5 && i != 4 && i != 3 && i != 2 && i != 1 && i != 0)
                {
                    i = 0;
                }
                if (callNumberArray[0] == 53)
                {
                    valid = false;
                }
                if (callNumberArray[i] < 49)
                {
                    valid = false;
                }
                if (callNumberArray[i] > 57 && callNumberArray[i] < 65)
                {
                    valid = false;
                }
                if (callNumberArray[i] > 90 && callNumberArray[i] < 97)
                {
                    valid = false;
                }
                if (callNumberArray[i] > 122)
                {
                    valid = false;
                }
            }
            if (valid == false)
            {
                Console.WriteLine("You entered an invalid code. Please re-enter your code.");
            }

        }

我認為您應該使用Regex,例如:

MatchCollection matchList = Regex.Matches(Content, Pattern);
var list = matchList.Cast<Match>().Select(match => match.Value).ToList();

我只想取1個字符串並將前7位轉換為一個int數組。

string subString = Console.ReadLine().Substring(0,7);
//Check if the whole string is a parsable number
if(int.TryParse(subString) == false) 
{
      Console.WriteLine("Not a valid number..."); 
      return;
} 
//convert it an int[]
int[] values = subString.ToCharArray().Select( value => int.Parse(value.ToString())).ToArray();

基本上就是這樣,如果您也想逐個字符地進行操作也可以,但是如果您願意的話,使用int.TryParse()或正則表達式[0-9] (每個字符)檢查數字要容易int.TryParse()接着就,隨即。

不確定您編寫的“算法”,我同意謝爾蓋·貝雷佐夫斯基(Sergey Berezovskiy)的觀點,如果看起來很奇怪,無論如何這應該可以回答您的特定問題:

public static void GetDigits(ref int[] callNumberArray, ref bool valid)
    {
    Console.WriteLine("Please enter the code you wish to dial.");
    while ( valid == false)
    {//This loop will reiterate the read() function if the code is not valid.
        valid = true;
        for (int i = 0; i < 7; i++ )
        {
            if (i != 6 && i!= 5 && i != 5 && i != 4 && i != 3 && i != 2 && i != 1 && i != 0)
            {
                i = 0;
            }
            callNumberArray[i] = Console.Read();// I want to change this

        }
        for (int i = 0; i < 7; i++)
        {
            if(!valid) break;
            if (i != 6 && i != 5 && i != 5 && i != 4 && i != 3 && i != 2 && i != 1 && i != 0)
            {
                i = 0;
            }
            if (callNumberArray[0] == 53)
            {
                valid = false;
            }
            if (callNumberArray[i] < 49)
            {
                valid = false;
            }
            if (callNumberArray[i] > 57 && callNumberArray[i] < 65)
            {
                valid = false;
            }
            if (callNumberArray[i] > 90 && callNumberArray[i] < 97)
            {
                valid = false;
            }
            if (callNumberArray[i] > 122)
            {
                valid = false;
            }
        }
        if (valid == false)
        {
            Console.WriteLine("You entered an invalid code. Please re-enter your code.");
        }

    }

這是一種提示用戶輸入電話號碼,拒絕無效字符並使用占位符顯示當前電話號碼以輸入剩余號碼的方法:

private static int[] GetPhoneNumber(int phoneLength = 7)
{
    List<int> phoneNumbers = new List<int>();

    while (true)
    {
        EditorFor("Phone", String.Concat(phoneNumbers), phoneLength);

        var key = Console.ReadKey(intercept: true);
        if (key.Key == ConsoleKey.Escape) 
            return new int[0]; // return empty array if user cancelled input

        var c = key.KeyChar;
        if (!Char.IsDigit(c))
            continue;

        phoneNumbers.Add(Int32.Parse(c.ToString()));
        if (phoneNumbers.Count == phoneLength)
        {
            EditorFor("Phone", String.Concat(phoneNumbers), phoneLength);
            return phoneNumbers.ToArray();
        }
    }
}

提示輸入:

private static void EditorFor(string label, string value, int length)
{
    Console.SetCursorPosition(0, Console.CursorTop);
    Console.Write(new String(' ', Console.WindowWidth));
    Console.SetCursorPosition(0, Console.CursorTop);

    int charactersLeftToInput = length - value.Length;
    string placeholder = new String('*', charactersLeftToInput);

    Console.Write("{0}: {1}{2}", label, value, placeholder);
    Console.CursorLeft -= charactersLeftToInput;
}

用法:

Console.WriteLine("Please enter the code you wish to dial.");
int[] code = GetPhoneNumber(); // if you want default length

安慰:

在此處輸入圖片說明

好的,經過深思熟慮,我決定使用單獨的Console.Read(); 對於數組中的每個元素,現在它正在執行我想要的操作。

while ( valid == false)
        {
            valid = true;
            callNumberArray[0] = Console.Read();
            callNumberArray[1] = Console.Read();
            callNumberArray[2] = Console.Read();
            callNumberArray[3] = Console.Read();
            callNumberArray[4] = Console.Read();
            callNumberArray[5] = Console.Read();
            callNumberArray[6] = Console.Read();
//etc etc...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM