需要一次读取一个字符,直到达到10个字符

时间:2010-11-12 03:36:27

标签: c#

我正在从事家庭作业,从C#开始。

必须接受用户的输入:

  • 带有数字或字符的电话号码
  • 然后只返回数字的数字版本。

我的程序接受输入并返回值,但是在输入10个字符时不会结束。 您可以输入任意数量的字符,然后按下输入时,它只显示前10个字符。 它也不会在输入每个字符后测试案例。似乎最后要做。 我希望在输入后测试每个角色,然后输入十个角色 程序显示结果。

我希望我能提供足够的信息。我非常强调这一点。 它将在明天到期,我还有一些其他计划要做。 任何帮助将不胜感激。

我的代码:

Console.Write("Please enter your phone number: ");
        do
        {
            int temp = Console.Read();
            input = Convert.ToChar(temp);
            //int tempInput = Convert.ToString(tempInput);
            switch (input)
            {
                case '0':
                    alphaNumericPhoneNumber += input.ToString();
                    numericPhoneNumber += input.ToString();
                    counter--;
                    break;
// { other cases }
                default:
                    // if input does not match cases then loop returns to 
                    // request new input
                    Display.Error(input.ToString());
                    Console.Write(alphaNumericPhoneNumber);
                    //Display.Continue();
                    //Console.Clear();
                    input = ' ';
                    break;
            }
        }
        while (numericPhoneNumber.Length < 0);
        return numericPhoneNumber;
    }

5 个答案:

答案 0 :(得分:4)

documentation for the Console.Read() method解释了所描述的行为。

  

当您键入输入字符时,Read方法会阻止其返回;按Enter键时它会终止。 [...]对Read方法的后续调用一次检索输入一个字符。

如果您希望在到达时处理字符,可以在文档中使用KeyAvailableReadKey方法作为demonstrated。该示例以5种.NET语言提供,包括C#。

答案 1 :(得分:3)

基本上你需要使用Console.ReadKey()代替Console.Read(),因为后者希望\n按下ENTER返回,前者在按下键时立即返回。

class Program
    {
        static void Main(string[] args)
        {
            ReadPhone();
            Console.ReadLine();
        }

        private static void ReadPhone()
        {
            var numericPhoneNumber = string.Empty;

            Console.Write("Please enter your phone number: ");
            do
            {
                var keyInfo= Console.ReadKey();
                if (char.IsDigit(keyInfo.KeyChar))
                {
                    numericPhoneNumber += keyInfo.KeyChar;
                }
                else
                {
                    Console.WriteLine();
                    Console.WriteLine("Please enter numeric numbers only");
                }
            }
            while (numericPhoneNumber.Length <= 10);
            Console.WriteLine("Phone Number: {0}", numericPhoneNumber);
        }
    }

答案 2 :(得分:0)

static void Main(string[] args)
{ 
    int i=0;
    string str=String.Empty;
    Char c;            
    Console.WriteLine("Enter number:");
    while (i < 10)
    {
       if (char.IsDigit(c = Console.ReadKey().KeyChar))
       {
            str += c;
            i++;
       }
    }
    Console.WriteLine("str: "+str); 
}

答案 3 :(得分:0)

好的,不太确定如何帮助你完成家庭作业。在我上学的时候,我常常把我的作业卖给其他孩子,所以我想我不能在这里占据道德制高点。

这是一个解决方案,但请确保您进行一些谷歌搜索,并了解它是如何工作的。

// Initialise the result to nothing.
string result = string.Empty;

do
{
    // Prompt for input.
    Console.WriteLine("Please enter your 10-digit phone number: ");

    // Read the response.
    string input = Console.ReadLine();

    // Replace any characters that are not numbers with the empty string (remove them).
    result = System.Text.RegularExpressions.Regex.Replace(input, "[^0-9]", string.Empty);
}
while (result.Length != 10);

// Do something with the result.
Console.WriteLine("You typed: '{0}'.", result);

如果你想一次阅读一个角色(这对我来说有点奇怪),那么你可以这样做:

// Initialise the result to nothing.
string result = string.Empty;

// Prompt for input.
Console.WriteLine("Please enter your 10-digit phone number: "); 

do
{
    string input = Console.ReadKey().KeyChar.ToString();

    // Replace any characters that are not numbers with the empty string (remove them).
    result += Regex.Replace(input, "[^0-9]", string.Empty);         
}
while (result.Length != 10);

// Do something with the result.
Console.WriteLine("You typed: '{0}'.", result);

答案 4 :(得分:0)

感谢大家的帮助。 我最终使用读取键来评估每个字符并根据电话键盘分配其各自的数值。 我不认为我在原帖中对此非常清楚......当时很少有人强调...在这个问题上花了很长时间。 对这篇文章的回复显示了一些相当干净的代码。我希望尽快达到这个水平。 我将展示我最终做的事情,只是让有兴趣的人感兴趣。 再次感谢您的帮助。

 class Request
    {
        public static void GetPhoneNumber(out string UserInput, out string ConvertedString)
        {
            // create instance of ConsoleKeyInfo
            ConsoleKeyInfo cki = new ConsoleKeyInfo();

string alphaNumericPhoneNumber = " "; string numericPhoneNumber = " "; char input = ' '; Console.Write("Please enter your phone number: "); // perform a do... while loop to read 10 characters of input do { cki = Console.ReadKey(); input = cki.KeyChar; switch (char.ToUpper(input)) { case '0': alphaNumericPhoneNumber += input.ToString(); numericPhoneNumber += input.ToString(); break; case '1': alphaNumericPhoneNumber += input.ToString(); numericPhoneNumber += input.ToString(); break; case 'A': case 'B': case 'C': case '2': alphaNumericPhoneNumber += input.ToString(); numericPhoneNumber += "2"; break; case 'D': case 'E': case 'F': case '3': alphaNumericPhoneNumber += input.ToString(); numericPhoneNumber += "3"; break; case 'G': case 'H': case 'I': case '4': alphaNumericPhoneNumber += input.ToString(); numericPhoneNumber += "4"; break; case 'J': case 'K': case 'L': case '5': alphaNumericPhoneNumber += input.ToString(); numericPhoneNumber += "5"; break; case 'M': case 'N': case 'O': case '6': alphaNumericPhoneNumber += input.ToString(); numericPhoneNumber += "6"; break; case 'P': case 'Q': case 'R': case 'S': case '7': alphaNumericPhoneNumber += input.ToString(); numericPhoneNumber += "7"; break; case 'T': case 'U': case 'V': case '8': alphaNumericPhoneNumber += input.ToString(); numericPhoneNumber += "8"; break; case 'W': case 'X': case 'Y': case 'Z': case '9': alphaNumericPhoneNumber += input.ToString(); numericPhoneNumber += "9"; break; default: // if input does not match cases then loop returns to // request new input Console.Clear(); Display.Error(input.ToString()); // display for user to continue... displays valid numbers so far Console.Write("Continue with phone number: " + alphaNumericPhoneNumber); input = ' '; // returns blank character and not added to strings so not counted break; } } while (numericPhoneNumber.Length < 11); // counts until string has 10 digits UserInput = alphaNumericPhoneNumber; ConvertedString = numericPhoneNumber; } }