简体   繁体   中英

How to restrict the user input to five digits?

I'm trying to restrict the user to only input 5 digits into the console for C#. I have my code error check the user, but for some reason after I type let's say...6 digits, the console stops after the while loop initiates. Can someone help me figure out what's wrong please? Thank you in advance!

Console.WriteLine("Enter the the zip code of the contact.");
temp = int.Parse(Console.ReadLine());

while (Console.ReadLine().Length != 5)
{
    Console.WriteLine("Error. Zip code is not 5 digits. Please enter a valid number.");
    temp = int.Parse(Console.ReadLine());

    if (Console.ReadLine().Length == 5)
    {
        temp = int.Parse(Console.ReadLine());
        address.zipCode = temp;
    }
}

You are accessing console multiple times. Check for length of your captured input - temp . Try this:

var temp = Console.ReadLine();
while (temp.Length > 5)
{
    Console.WriteLine("Error. Zip code is not 5 digits. Please enter a valid number.");
    temp = Console.ReadLine(); 
}

address.zipCode = int.Parse(temp);

I think you can use like this also.. if u want to check all the lengths.

if (Console.ReadLine().Length == 5)
    {
        temp = int.Parse(Console.ReadLine());
        address.zipCode = temp;
    }
else{
while (Console.ReadLine().Length != 5)
{
    Console.WriteLine("Error. Zip code is not 5 digits. Please enter a valid number.");
    temp = int.Parse(Console.ReadLine());
    }
}

It can be done this way...

            Console.WriteLine("Enter the the zip code of the contact.");
            var temp = Console.ReadLine();
            string zipcode = string.Empty;
            while (temp.Length != 5)
            {
                Console.WriteLine("Error. Zip code is not 5 digits. Please enter a valid number.");
                if (temp.Length == 5)
                {
                    zipcode = temp;
                    break;
                }
                else
                {
                    temp = Console.ReadLine();
                }
            }
            Console.Write(zipcode);

dont use Console.Readline() again and again

change your code like this.

    Console.WriteLine("Enter the the zip code of the contact.");
     var temp = int.Parse(Console.ReadLine());

        while (temp.ToString().Length != 5)
        {
            Console.WriteLine("Error. Zip code is not 5 digits. Please enter a valid number.");
            temp = int.Parse(Console.ReadLine());

            if (temp.ToString().Length == 5)
            {
                temp = int.Parse(Console.ReadLine());

            }
        }

(to save from null reference you can do if(temp < 100000 && temp > 9999) also.)

Modify your statements as

Console.WriteLine("Enter the the zip code of the contact.");

do
{
    temp = Console.ReadLine();
    if (temp.Length!=5)
    {
        Console.WriteLine("Error. Zip code is not 5 digits. Please enter a valid number.");
    }
    else
    {
        address.zipCode = temp;
    }
} while(temp.Length!=5);

done!

Please view the code given below. I think this will fulfill your requirement. I have found that you have use which has not been declared anywhere in given code so I have replace the with . 尚未在给定代码中的任何地方声明,因此我已用替换了

        int temp,zipCode;

        bool breakLoop = false;

        Console.WriteLine("Enter the the zip code of the contact.");

        while (breakLoop == false)
        {
            string userInput = Console.ReadLine();
            if (userInput.Length != 5)
            {
                Console.WriteLine("Error. Zip code is not 5 digits. Please enter a valid number.");
                continue;
            }

            int.TryParse(userInput, out temp);
            if (temp == 0)
            {
                Console.WriteLine("Error. Please enter a valid number.");
                continue;
            }                

            zipCode = temp;
            breakLoop = true;
            break;

        }

Please let me know if you have any problem with the code.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM