use loop to determine if number is valid c# - c#

I am trying to ask the user to enter a number from 2-12. I want to use a loop to check if valid, but am having trouble only displaying the result once.
Console.WriteLine("Enter number between 2 and 12");
int x = int.Parse(Console.ReadLine());
bool isValid = true;
for(int p = 2; p < 13; p++)
{
if(p > x)
{
isValid = true;
}
else
isValid = false;
if(isValid == true)
{
Console.WriteLine("{0} is good", x);
}
else
Console.WriteLine("not valid");
}

Why you need loop to check value from range ?
Try like this
if(x>=2 && x<=12)
Console.WriteLine("{0} is good", x);
else
Console.WriteLine("not valid");

Why do you want to use a loop for this?
You could check if the number is between 2 and 12 by doing this instead:
int x = int.Parse(Console.ReadLine());
bool isValid = true;
if (x < 2 || x > 12)
{
isValid = false;
}
Otherwise, if you still want to do your loop, you can try this:
Console.WriteLine("Enter a number between 2 and 12");
int x = int.Parse(Console.ReadLine());
bool isValid = false;
for(int p=2; p<13; p++)
{
if(x == p)
{
isValid = true;
break;
}
}
if(isValid==true)
{
Console.WriteLine("{0} is good", x);
}
else
{
Console.WriteLine("not valid");
}
Edit:
Also just a suggestion but you should be careful with using Parse. If you use Parse and the user enters a non-numeric character or enters a number bigger/smaller than the allowed values for int, your app will stop with a FormatException error.
To fix this, you can use TryParse instead like this:
int x;
bool result = int.TryParse(Console.ReadLine(), out x);
if (result)
{
// Put your for loop or if statement here
}
else
{
Console.WriteLine("Error: Invalid number was detected.");
}

What are you trying to achieve? There's a flaw in the logic on the sample above, where you only ask once, and then loop 10 times. To simplify you can loop and then ask for the user input until 0 is entered and the loop will exit.
Sample:
static void Main(string[] args)
{
int x = 0;
do
{
Console.WriteLine("Enter number between 2 and 12. (0 to exit)");
x = int.Parse(Console.ReadLine());
if (x >= 2 && x <= 12)
{
Console.WriteLine("{0} is good", x);
}
else if(x != 0)
{
Console.WriteLine("{0} is not valid", x);
}
} while (x != 0);
}

Console.WriteLine("Enter number between 2 and 12: ");
int x = int.Parse(Console.ReadLine());
bool isValid = (2 <= x && x <= 12);
Console.WriteLine("{0} is {1}valid", x, isValid ? "" : "not ");

Here try this
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("Enter number between 2 and 12");
int x = int.Parse(Console.ReadLine());
if (!Enumerable.Range(1, 12).Contains(x))
{
Console.WriteLine("{0} Its not Good\n",x);
}
else
{
Console.WriteLine("{0} Its Good\n",x);
break;
}
}
Console.WriteLine("Press any key to exit..");
Console.ReadKey();
}

If you're trying to validate if the number fall within the range 2-12 you should remove your loop and use this instead
bool isValid = true;
if (x < 2 || x > 12) {
isValid = false;
}
or simply
bool isValid = x >= 2 && x <= 12;

Related

school homework - grade calculation

i have got questions.
my problem is The user is asked to enter 20 exam grades. If the grades entered are less than 0 or greater than 100, you should be asked to enter again. How can I do that?
int not;
bool test = true;
for (int i = 0; i < 20; i++)
{
Console.Write((i + 1) + (".Not:"));
not = Convert.ToInt32(Console.ReadLine());
if (not < 0 || not > 100)
{
test = false;
Console.Write("Try again!");
}
else
{
test = true;
}
}
I want to use bool while doing this. would be glad if you help. thank you in advance
i changed code but i used goto. I dont want use to goto. How can i use bool doing this ?
int not;
int temp = 0;
for (int i = 0; i < 20; i++)
{
Console.Write("Add Not : ");
backtoAdd:
not = Convert.ToInt32(Console.ReadLine());
if (not < 0 || not > 100)
{
Console.WriteLine("Try Again!");
goto backtoAdd;
}
Console.WriteLine((i+1)+". Not : "+not);
temp = temp + not;
}
Console.Write("sum of not : "+temp);
Console.ReadKey();
As you mentioned it can be done with a while loop and condition to stop the loop. You can simplify it, I have added comments in the code example:
// declarations
int counter = 0;
int maxExamGradesInputCount = 20;
int highestGrade = 100;
int lowestGrade = 0;
// as long as counter is not equal to maxExamGradesInputCount continue
while (counter != maxExamGradesInputCount)
{
// we give input
string? input = Console.ReadLine();
// we try to parse our input
var parsed = int.TryParse(input, out var grade);
// if our input is parsed correctly
if (parsed)
{
// we check if the input value between the given range
if (grade < lowestGrade || grade > highestGrade)
{
Console.WriteLine("Try Again!");
}
else
{
// if with in range count
counter++;
}
}
}

Console.ReadLine() not exiting Program in c#

I have an assignment where I have to create code to display factors and whether a number is a perfect and/or prime number. I think I have all the code right to run my program, but when I get to the last line (Console.ReadLine()) I expect to hit enter and then exit the program. Currently, when I hit enter, the program displays whether it is a prime number and/or perfect number over and over again (each time you hit enter). So basically, it executes everything after the while loop over and over again.
Keep in mind, I'm very new to C#, so some of my syntax and readability may be weird. I am only interested in answers that will help me solve the ReadLine issue. My instructors will help me with making my code more readable and organized.
Thanks for your advice! Here is my code. I commented where the ReadLine isn't closing the program:
using System;
namespace Factorizer.UI
{
class Program
{
static void Main(string[] args)
{
string input;
int num, i, x = 0, sum = 0;
while (true)
{
Console.Write("Enter a number: ");
input = Console.ReadLine();
if (int.TryParse(input, out num))
{
Console.Write("\nThe factors are: ");
for (i = 1; i <= num; i++)
{
if (num % i == 0)
{
Console.Write("{0} ", i);
}
}
break;
}
else
{
Console.WriteLine("\nThat was not a valid number!\n");
}
}
for (i = 1; i < num; i++)
{
if (num % i == 0)
{
sum = sum + i;
}
if (sum == num)
{
Console.Write("\n\n{0} is a perfect number.\n", num);
}
else
{
Console.Write("\n\n{0} is not a perfect number.\n", num);
}
for (i = 2; i <= num / 2; i++)
{
if (num % i == 0)
{
x++;
break;
}
}
if (x == 0 && num != 1)
{
Console.Write("\n{0} is a prime number.", num);
}
else
{
Console.Write("\n{0} is not a prime number.", num);
}
Console.ReadLine(); //this isn't closing the program!
}
}
}
}
Console.ReadLine() is inside the for loop. Move it down after the next bracket.
Just put Console.ReadLine(); after the for, it's inside the for block that's why it keeps printing and remove the for that you have after the while block, like this:
string input;
int num, i, x = 0, sum = 0;
while (true)
{
Console.Write("Enter a number: ");
input = Console.ReadLine();
if (int.TryParse(input, out num))
{
Console.Write("\nThe factors are: ");
for (i = 1; i <= num; i++)
{
if (num % i == 0)
{
Console.Write("{0} ", i);
}
}
break;
}
else
{
Console.WriteLine("\nThat was not a valid number!\n");
}
}
/*for (i = 1; i < num; i++)
{*/
if (num % i == 0)
{
sum = sum + i;
}
if (sum == num)
{
Console.Write("\n\n{0} is a perfect number.\n", num);
}
else
{
Console.Write("\n\n{0} is not a perfect number.\n", num);
}
for (i = 2; i <= num / 2; i++)
{
if (num % i == 0)
{
x++;
break;
}
}
if (x == 0 && num != 1)
{
Console.Write("\n{0} is a prime number.", num);
}
else
{
Console.Write("\n{0} is not a prime number.", num);
}
Console.ReadLine(); //this isn't closing the program!
//}

C# - Checking for prime numbers in a limit [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 6 years ago.
Improve this question
I would like to write a code that shows a list of prime number one number to another number. For example from 1 to 8, it would be 2, 3, 5, 7. I got a code from "Check if number is prime number" by user1954418 because I did not know where to begin, so I take NO credit whatsoever for the code.
int num1;
Console.WriteLine("Prime Number:");
num1 = Convert.ToInt32(Console.ReadLine());
if (num1 == 0 || num1 == 1)
{
Console.WriteLine(num1 + " is not prime number");
Console.ReadLine();
}
else
{
for (int a = 2; a <= num1 / 10; a++)
{
if (num1 % a == 0)
{
Console.WriteLine(num1 + " is not prime number");
return;
}
}
Console.WriteLine(num1 + " is a prime number");
Console.ReadLine();
}
Here is a sample that should work. The code from isPrime I just got from here Here
Then In the main function just have the loop that goes from you starting number to the end number, and runs the isPrime function on each one.
Here is the code:
class Program
{
static void Main(string[] args)
{
int numberStart;
int numberEnd;
// Take in the start point and the end point
Console.WriteLine("Starting Number:");
if(!int.TryParse(Console.ReadLine(), out numberStart)){
Console.WriteLine("Your input is invalid.");
}
Console.WriteLine("Ending Number:");
if (!int.TryParse(Console.ReadLine(), out numberEnd))
{
Console.WriteLine("Your input is invalid.");
}
// Loop from the first number to the last number, and check if each one is prime
for (int number = numberStart; number < numberEnd; number++)
{
Console.WriteLine(number + " is prime?");
Console.WriteLine(isPrime(number) + "\n");
}
Console.ReadLine();
}
// Function for checking if a given number is prime.
public static bool isPrime(int number)
{
int boundary = (int) Math.Floor(Math.Sqrt(number));
if (number == 1) return false;
if (number == 2) return true;
for (int i = 2; i <= boundary; ++i)
{
if (number % i == 0) return false;
}
return true;
}
}
Note that the function isPrime() only checks up to the root, as it is unnecessary to check further as mentioned by the user from the link.
Hope it helps :)
Make it simple; following code will help you:
Console.WriteLine("Enter the Limit:");
int Limit;
if (!int.TryParse(Console.ReadLine(), out Limit))
{
Console.WriteLine("Invalid input");
}
Console.WriteLine("List of prime numbers between 0 and {0} are :",Limit);
for (int i = 2; i < Limit; i++)
{
if (checkForPrime(i))
Console.WriteLine(i);
}
Console.ReadKey();
Where checkForPrime() is defined as follows:
public static bool checkForPrime(int Number)
{
for (int a = 2; a <= Number / 2; a++)
{
if (Number % a == 0)
{
return false;
}
}
return true;
}
Here's some code I wrote/copied to do this in one of my projects. It could probably be a little smoother but it gets the job done.
// Found this awesome code at http://csharphelper.com/blog/2014/08/use-the-sieve-of-eratosthenes-to-find-prime-numbers-in-c/
// This creates a List of Booleans where you can check if a value x is prime by simply doing if(is_prime[x]);
public static bool[] MakeSieve(int max)
{
var sqrt = Math.Sqrt((double)max);
// Make an array indicating whether numbers are prime.
var isPrime = new bool[max + 1];
for (var i = 2; i <= max; i++) isPrime[i] = true;
// Cross out multiples.
for (var i = 2; i <= sqrt; i++)
{
// See if i is prime.
if (!isPrime[i]) continue;
// Knock out multiples of i.
for (var j = i * 2; j <= max; j += i)
isPrime[j] = false;
}
return isPrime;
}
public static List<int> GetListOfPrimes(int max)
{
var isPrime = MakeSieve(max);
return new List<int>(Enumerable.Range(1, max).Where(x => isPrime[x]));
//var returnList = new List<int>();
//for (int i = 0; i <= max; i++) if (isPrime[i]) returnList.Add(i);
//return returnList;
}
Here's an example of usage:
static void Main(string[] args)
{
var x = GetListOfPrimes(8);
foreach (var y in x)
{
Console.WriteLine(y);
}
Console.Read();
}

How to convert user input to an int Array in c#

The closest thing I found to answering this question was converting several string inputs into an array using a for loop.
I just want to take 1 string and convert the first 7 digits into an int array.
This code takes integer values of characters and then tests them against the Unicode values to return true if it is valid or false to reiterate the while loop and ask for input again. When I do this with the Console.Read(); method, and put in an invalid value first, it will say that my code is invalid for 7 more iterations. That means console.Read() has to run 7 more times even if the string has valid input.
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.");
}
}
I think you should use Regex, example:
MatchCollection matchList = Regex.Matches(Content, Pattern);
var list = matchList.Cast<Match>().Select(match => match.Value).ToList();
I just want to take 1 string and convert the first 7 digits into an int array.
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();
That's it basically, if you want to do it character by character that's fine, too, but's it's far easier to check for a number using int.TryParse() or a regex [0-9] (per character) if you're confortable with that.
Not sure about the "algorithm" you wrote and I agree with Sergey Berezovskiy that the if's looks weird, anyway this should answer your specific question:
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.");
}
}
Here is method which prompts user to input phone number, denies invalid characters and shows current phone number with placeholder for numbers left to input:
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();
}
}
}
Prompt for input:
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;
}
Usage:
Console.WriteLine("Please enter the code you wish to dial.");
int[] code = GetPhoneNumber(); // if you want default length
Console:
Okay so After much deliberation I decided to use a separate Console.Read(); for each element in the array and now it's doing what I want it to do.
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...

c# program for finding if number is prime

I have this task: Write an expression that checks if given positive integer number n (n ≤ 100) is prime. E.g. 37 is prime.
int number = int.Parse(Console.ReadLine());
for (int i = 1; i < 100; i++)
{
bool isPrime = (number % number == 0 && number % i == 0);
if (isPrime)
{
Console.WriteLine("Number {0} is not prime", number);
}
else
{
Console.WriteLine("Number {0} is prime", number);
break;
}
}
This doesn't seem to work. Any suggestioins?
int number = int.Parse(Console.ReadLine());
bool prime = true;
// we only have to count up to and including the square root of a number
int upper = (int)Math.Sqrt(number);
for (int i = 2; i <= upper; i++) {
if ((number % i) == 0) {
prime = false;
break;
}
}
Console.WriteLine("Number {0} is "+ (prime ? "prime" : "not prime"), number);
a. What are you expecting number % number to do?
b. Your isPrime check is "reset" each time through the loop. Something more like this is required:
bool isprime = true;
for(int i = 2; i < number; i++) {
// if number is divisible by i then
// isprime = false;
// break
}
// display result.
The problems are:
the for should start from 2 as any number will be dived by 1.
number % number == 0 - this is all the time true
the number is prime if he meats all the for steps so
else
{
Console.WriteLine("Number {0} is prime", number);
break;
}
shold not be there.
The code should be something like this:
int number = int.Parse(Console.ReadLine());
if (number == 1)
{ Console.WriteLine("Number 1 is prime");return;}
for (int i = 2; i < number / 2 + 1; i++)
{
bool isPrime = (number % i == 0);
if (isPrime)
{
Console.WriteLine("Number {0} is not prime", number);
return;
}
}
Console.WriteLine("Number {0} is prime", number);
please notice that I didn't test this...just wrote it here. But you should get the point.
Semi-serious possible solution with LINQ (need smaller range at least):
var isPrime = !Enumerable.Range(2, number/2).Where(i => number % i == 0).Any();
The Program checks the given number is prime number or not.
A prime number is a number that can only be divided by 1 and itself
class Program
{
bool CheckIsPrimeNumber(int primeNum)
{
bool isPrime = false;
for (int i = 2; i <= primeNum / 2; i++)
{
if (primeNum % i == 0)
{
return isPrime;
}
}
return !isPrime;
}
public static void Main(string[] args)
{
Program obj = new Program();
Console.Write("Enter the number to check prime : ");
int mPrimeNum = int.Parse(Console.ReadLine());
if (obj.CheckIsPrimeNumber(mPrimeNum) == true)
{
Console.WriteLine("\nThe " + mPrimeNum + " is a Prime Number");
}
else
{
Console.WriteLine("\nThe " + mPrimeNum + " is Not a Prime Number");
}
Console.ReadKey();
}
}
Thanks!!!
Here is for you:
void prime_num(long num)
{
bool isPrime = true;
for (int i = 0; i <= num; i++)
{
for (int j = 2; j <= num; j++)
{
if (i != j && i % j == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
Console.WriteLine ( "Prime:" + i );
}
isPrime = true;
}
}

Categories