Spadne to na riadku c1 = int.Parse(Console.ReadLine()), pretože nie je v bloku try..catch. Následné volanie c1 = Console.Read() nedáva zmysel, pretože vstup si už prečítal a týmto si ho prepíšeš hodnotou ďalšieho zadaného znaku.
Lepšie než ošetrovať výnimku je otestovať vstup, t.j. použiť metódu TryParse namiesto metódy Parse.
Dalo by sa to napísať nejako takto (netestované):
int number;
string line;
do
{
Console.Write("Zadaj číslo: ");
line = Console.ReadLine();
}
while (!int.TryParse(line, out number));