Wypisanie nieparzystych liczb "do while"

0

Witam. Mam zrobić coś takiego:

Napisz program pobierający od użytkownika dziesięć liczb typu całkowitego o wartościach z
przedziału 1-50. Niech program wypisze na ekranie tylko nieparzyste wartości wczytane
przez użytkownika. Użyj pędli "do ... while".

Problem w tym, że nie wiem jak napisać by użytkownik mógł wprowadzić tylko liczby z tego przedziału (1-50) oraz dodatkowo program zatrzymuje sprawdzanie nieparzystych liczb po wykryciu jakiejś parzystej. Chciałbym, żeby sprawdzał wszystkie liczby wprowadzone przez użytkownika i wypisał te nieparzyste.

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zad3
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] tab = new int[10];
            int i = 0;

            for (i = 0; i < tab.Length; i++)
            {
                Console.WriteLine("Podaj {0} element tablicy: ", i);
                tab[i] = int.Parse(Console.ReadLine());
            }

            i = 0;
            do
            {
                Console.WriteLine("{0} ", tab[i]);
                i++;
            } while (tab[i] % 2 != 0);
            
            Console.ReadKey();
        }
    }
}
1

Może tak?

for (i = 0; i < tab.Length;)
            {
                Console.WriteLine("Podaj {0} element tablicy z zakresu 1-50: ", i);
                tab[i] = int.Parse(Console.ReadLine());
                if(tab[i] > 0 && tab[i] < 50) 
                {
                    ++i; //inkrementacja tylko jesli z zakresu
                }
            }

A do dziala dobrze - do pierwszej parzystej.
Ale nie o to Ci chodzi, więc użyj fora:

for (i = 0; i < tab.Length; ++i)
{
                if(tab[i]%2 == 1) 
                {
                    Console.WriteLine("{0} ", tab[i]);
                }
}
0
using System;
using System.Collections.Generic;

public class Test {
	private static void Repeat(int times, Action action) {
		for(int i = 0; i < times; ++i) {
			action();
		}
	}
	
	private static string UserInput(Func<string, bool> validate) {
		var input = "";
		do {
			input = Console.ReadLine();
		} while(!validate(input));
		return input;
	}
	
	public static void Main() {
		Func<string, bool> properNumberValidator = x => {
			int input;
			return int.TryParse(x, out input)
				? input >= 1 && input <= 50
				: false;
		};
		
		var numbers = new List<int>();
		
		var desiredNumbersCount = 10;
		
		Repeat(desiredNumbersCount, () => {
			numbers.Add(Int32.Parse(UserInput(properNumberValidator)));
		});
		
		numbers
			.FindAll(x => x % 2 != 0)
			.ForEach(x => Console.WriteLine(x));
	}
}
0
xfin napisał(a):

Może tak?

for (i = 0; i < tab.Length;)
            {
                Console.WriteLine("Podaj {0} element tablicy z zakresu 1-50: ", i);
                tab[i] = int.Parse(Console.ReadLine());
                if(tab[i] > 0 && tab[i] < 50) 
                {
                    ++i; //inkrementacja tylko jesli z zakresu
                }
            }

A do dziala dobrze - do pierwszej parzystej.
Ale nie o to Ci chodzi, więc użyj fora:

for (i = 0; i < tab.Length; ++i)
{
                if(tab[i]%2 == 1) 
                {
                    Console.WriteLine("{0} ", tab[i]);
                }
}

Istotnie teraz działa, ale czy nie da się zrobić tego za pomocą do while?

1 użytkowników online, w tym zalogowanych: 0, gości: 1