Początki z C# - błędy w kodzie konsolowego kalkulatora

0

Witam!

Dopiero zaczynam naukę, więc proszę o tłumaczenie prostym językiem.

Z nudów postanowiłem napisać kalkulator do konsoli. Prosty i krótki kod napisałem w Notepad++ i przeniosłem do SharpDevelop, by sprawdzić ile błędów. Wyświetliła mi się informacja o trzech błędach, i w ogóle nie wiem jak je naprawić. Proszę o pomoc i nie radzenie tworzenia metod, gdyż moim zamierzeniem było zrobienie tego w ten sposób. Wcześniej działała, lecz musiałem z edytować kod, gdyż nie czytało w kolejności: Liczba - znak - liczba, lecz znak - liczba - liczba - enter, co mi nie pasowało. Oto kod:

 
			// TODO: Implement Functionality Here
using System;

	class Program
	{
		public static void Main(string[] args)
		{
			String line;
			String end = "break";
			String rep = "repeat";
		
			String znak;
			int a;
			int b;
			int	p;
		
				Console.WriteLine();
			
				p=0;
			
			for(; ; ){
					if(p == 1){
						goto reload;
					}
			Console.WriteLine();
			
			a = Console.Read();
			znak = Console.ReadLine();
			b = Console.Read();
			
		reload:
			p=0;
			Console.WriteLine("Aby zakończyć wpisz break. Aby powtórzyć wpisz repeat");
			
			line = Console.ReadLine();
			
			if(line == end){
				goto koniec;
			}
			
			if(line == rep){
				goto nowy;
			}
			
			if(line != end){
				if(line != rep){
					Console.WriteLine("Przepraszam, nie rozumiem. Ponow komende");
					Console.WriteLine();
					p=1;
						goto nowyj;
				}
			}
		
			
			switch(znak){
			
			case "*" : int v; v=a * b; Console.WriteLine("Twoj wynik to:  " + v); break;
			case "+" : int n; n=a+b; Console.WriteLine("Twoj wynik to:  " + n); break;
			case "/" : int m; m=a/b; Console.WriteLine("Twoj wynik to:  " + m); break;
			case "-" : int c; c=a-b; Console.WriteLine("Twoj wynik to:  " + c); break;
			
			default: Console.WriteLine("niestety, nie obsługuje takiego znaku...: " + znak); break;
			
			}
		nowyj:
		nowy:
			
			Console.WriteLine();
			
			}
		koniec:
				Console.WriteLine();
			Console.WriteLine("Do zobaczenia... :(");
			Console.WriteLine("Kliknij dowolny przycisk");
			Console.ReadKey(true);
		}
	}

Był wcześniej krótszy o wiele znaków, lecz z względu na błędy wykazywane przez program, został (wg mnie nie potrzebnie) rozwinięty do tego stopnia (kilka razy to samo np.: zamiast int a, b, c, v, n, m; każdy osobno...)

Dziękuję z góry za pomoc i mam nadzieję że znajdzie się kilka wytłumaczeń ' co mam dalej zrobić '.

1

Omujborze, usuń ten kod i napisz go od nowa.


```csharp switch(znak){
        case "*" : int v; v=a * b; Console.WriteLine("Twoj wynik to:  " + v); break;
        case "+" : int n; n=a+b; Console.WriteLine("Twoj wynik to:  " + n); break;
        case "/" : int m; m=a/b; Console.WriteLine("Twoj wynik to:  " + m); break;
        case "-" : int c; c=a-b; Console.WriteLine("Twoj wynik to:  " + c); break;

        default: Console.WriteLine("niestety, nie obsługuje takiego znaku...: " + znak); break;

        }
Co, co, co?

```csharp
int result;
bool isValid = true;

switch (znak)
{
 case "+": result = a+b; break;
 case "-": result = a-b; break;

 default:
  Console.WriteLine("Bledny operator!");
  isValid = false;
  break;
}

if (isValid)
 Console.WriteLine("Wynik to: "+result);

Nie wspominam nawet o tych ohydnych labelach :|
0

@up

Zapomniałem dodać, gdzie jest błąd...

to fragment kodu:

switch(znak){

		case "*" : int v; v=__a__ * __b__; Console.WriteLine("Twoj wynik to:  " + v); break;

a podkreślone mi wyświetla jako błąd.

3

Kompilator Ci nie odpuści najmniejszego błędu ;), świadomego czy nieświadomego także na żywioł, z marszu, z niewielkim poziomem wiedzy nie ma co tworzyć na zasadzie "a nuż się uda" ;)

Polecam Ci książkę na początek:
"Język C#. Szkoła programowania"
http://helion.pl/ksiazki/jezyk-c-szkola-programowania-klaus-michelsen,jcshpr.htm
EDIT: tylko cena jakas durna jakiś czas temu widzialem ze z drugiej reki po 40zł chodziła.

bo z podobnym stanem wiedzy jak u Ciebie, gdy sam się zabierałem za kursy i uczenie się C# to dopiero ta pozycja, do mnie przemówiła do totalnego laika, i jakoś to poszło.

PS. o wiele lepiej czytać błędy które zgłasza kompilator niż pokazywać na forum "gdzie podkreśla" ;)

0

@up
Dzięki za info.

Nie jestem tak bardzo początkującym. Nauczyłem się w pełni 'konsolowej Javy', gdyż nie miałem skąd nauczyć się obiektowej (chyba tak to się nazywało. Wyświetla efekty w okienku, nie w konsoli.)

Zauważyłem, że te języki są podobne gdy ogarnąłem pierwsze 30 lekcji w jedną i pół godziny ze zrozumieniem i poprawnym wykonaniem zadań.

Jeśli możesz, chciałbym wiedzieć czemu tak się dzieje. Gdy będę miał dostęp do komputera, napisze co wyświetla program. Pamiętam na chwilę obecną że błędy były takie same dla każdego podkreślonego słowa i znaczył mniej więcej to:

Nie możesz użyć nie 'zainicjowanej wartości'

Nie wiem czy to w cudzysłowie jest poprawne, ale chodzi o to:

int liczba
String slowo
char znak

Inicjowane są w tych przypadkach wartości: w liczba, słowo i znak.

0
int liczba;
Console.WriteLine(liczba);

coś takiego nie przejdzie, bo zmienna liczba nie ma nadanej żadnej wartości.

int liczba;
liczba = 125;
Console.WriteLine(liczba);

albo

int liczba = 125;
Console.WriteLine(liczba);
0

A takie coś już przejdzie:

class Program
   {
      private static void Main(string[] args)
      {
         var f = new Foo();
         Console.WriteLine(f.Bar);
      }
   }

   class Foo
   {
      public int Bar;
   }

Dlaczego? Do poczytania: http://msdn.microsoft.com/en-us/library/aa645757(v=vs.71).aspx

0
Azarien napisał(a):
int liczba;
Console.WriteLine(liczba);

coś takiego nie przejdzie, bo zmienna liczba nie ma nadanej żadnej wartości.

int liczba;
liczba = 125;
Console.WriteLine(liczba);

albo

int liczba = 125;
Console.WriteLine(liczba);

W mojej poprzedniej wypowiedzi int liczba - to przykład. Nie muszę w przykładzie, w którym mam ukazać tylko i wyłącznie całokształt 'inicjacji wartości', dopisywać że jest równe na przykład: 33 bądź 125...

0

Sorry. 'Cap' to ja, lecz ucięło mi nick, nie wiem czemu...

0

jeśli masz taki błąd, to znaczy że brakuje przypisania wartości do użytej zmiennej.
Albo to przypisanie jest tylko warunkowe, pod jakimś ifem — kompilator nie będzie analizował czy warunek jest spełniony czy nie; warunkową inicjalizację potraktuje jako brak inicjalizacji.

0

Use of unassigned local variable 'M2' (CS0165)

Tworzyłem nowy program z nudów, i znów ten sam błąd, wyrzuca mi na ostatnich danych.

Tym razem potrzebuję do programu taki fragment:

...

D1 = D1 * 10000000;
D2 = D2 * 1000000;
M1 = M1 * 100000;
M2 = M2 * 10000;
Y1 = Y1 * 1000;
Y2 = Y2 * 100;

...

Tym razem też, to co jest po znaku równości wyświetla mi jako błąd:

D1; D2; M1; M2; Y1; Y2;

I także to są wyniki z konstrukcji 'switch ... case.'

Nie rozumiem. W każdym razie wychodzi na to iż problem jest nie z kodem, lecz z instrukcją 'case'.

0

Problem jest w tym, że nie przypisałeś tym zmiennym żadnej wartości wcześniej. Chcesz, aby D1 = D1*100000, ale to D1, które pogrubiłem, nie ma przypisanej żadnej wartości. Nie masz czego pomnożyć przez to 100000.

0

@up.
Wybacz. D1 ma przypisaną wartość. W tym przypadku to '1'.

0

Kiedyś, w ramach przypomnienia sobie C#, popełniłem takie oto dzieło:
Polimorficzny kalkulatorek. W sam raz na rozeznanie się z mechanizmami klas i dziedziczenia.
Może się komuś przyda. (A jak nie to wywalić :) )

Abstrakcyjna klasa 'Dzialanie'

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

namespace Kalkulatorek___polimorfizm {
    abstract class Dzialanie {
        public Dzialanie(double x, double y) {
            this.x = x;
            this.y = y;
        }

        virtual public double wykonaj() {
            return 0;
        }            

        protected double x;
        protected double y;
    }
}

Klasy konkretnych działań:

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

namespace Kalkulatorek___polimorfizm {
    class Dodawanie : Dzialanie{
        public Dodawanie(double x, double y)
            : base(x, y) {

        }

        public override double wykonaj() {
            return this.x + this.y;
        }
    }
}
// Reszta działań rzecz jasna analogiczna

Kod programu głównego:

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

namespace Kalkulatorek___polimorfizm {
    class Program {
        static void Main(string[] args) {
            int numer = 0;
            double x, y;
            Dzialanie dz;

            do {
                System.Console.Clear();
                System.Console.WriteLine("..:: Polimorficzny kalkulatorek ::..\n");
                System.Console.WriteLine("Działania:");
                System.Console.WriteLine("1. Dodawanie\n2. Odejmowanie\n3. Mnożenie\n4. Dzielenie\n5. Koniec");
                System.Console.Write("Wybrane działanie to: ");

                try {
                    numer = int.Parse(System.Console.ReadLine());
                }
                catch (SystemException) {
                    System.Console.WriteLine("Nieprawidłowy format danych!");
                }

                switch (numer) {
                    case 1: {
                            try {
                                System.Console.Write("Proszę podać 'x': "); x = double.Parse(System.Console.ReadLine());
                                System.Console.Write("Proszę podać 'y': "); y = double.Parse(System.Console.ReadLine());
                                dz = new Dodawanie(x, y);
                                System.Console.WriteLine("Wynik: " + dz.wykonaj().ToString());
                                System.Console.Read();
                                numer = 0;
                            }
                            catch (SystemException) {
                                System.Console.WriteLine("Nieprawidłowy format danych!");
                            }
                            break;
                        }
                    case 2: {
                            try {
                                System.Console.Write("Proszę podać 'x': "); x = double.Parse(System.Console.ReadLine());
                                System.Console.Write("Proszę podać 'y': "); y = double.Parse(System.Console.ReadLine());
                                dz = new Odejmowanie(x, y);
                                System.Console.WriteLine("Wynik: " + dz.wykonaj().ToString());
                                System.Console.Read();
                                numer = 0;
                            }
                            catch (SystemException) {
                                System.Console.WriteLine("Nieprawidłowy format danych!");
                            }
                            break;
                        }
                    case 3: {
                            try {
                                System.Console.Write("Proszę podać 'x': "); x = double.Parse(System.Console.ReadLine());
                                System.Console.Write("Proszę podać 'y': "); y = double.Parse(System.Console.ReadLine());
                                dz = new Mnozenie(x, y);
                                System.Console.WriteLine("Wynik: " + dz.wykonaj().ToString());
                                System.Console.Read();
                                numer = 0;
                            }
                            catch (SystemException) {
                                System.Console.WriteLine("Nieprawidłowy format danych!");
                            }
                            break;
                        }
                    case 4: {
                            try {
                                System.Console.Write("Proszę podać 'x': "); x = double.Parse(System.Console.ReadLine());
                                System.Console.Write("Proszę podać 'y': "); y = double.Parse(System.Console.ReadLine());
                                dz = new Dzielenie(x, y);
                                System.Console.WriteLine("Wynik: " + dz.wykonaj().ToString());
                                System.Console.Read();
                                numer = 0;
                            }
                            catch (SystemException) {
                                System.Console.WriteLine("Nieprawidłowy format danych!");
                            }
                            break;
                        }
                    default: {
                            break;
                        }
                }
            } while (numer != 5);
            System.Console.WriteLine("Koniec programu. Naciśnij 'ENTER'.");
            System.Console.Read();
        }
    }
}
0
grzesiek51114 napisał(a):
catch (SystemException)

Nie łap SystemException, czyli praktycznie wszystkiego co się da, a tylko to co cię interesuje konkretnie, czyli IOException w tym przypadku, jeśli to ma być „nieprawidłowy format danych”.

0

To jeszcze podziel to na metody i usuń zduplikowany kod.

0

Chyba analizujemy nie ten program...

0

Wrzuciłem to żeby pomóc Ci zrozumieć gdzie masz błędy. Na pierwszy rzut oka widać, że masz w kodzie przestarzałe rzeczy, których już od dawna się nie używa np: stosowanie etykiet i komend goto. Coś takiego potrafi bardzo namieszać w programie np. poprzez wyskoczenie z pętli w jakieś inne miejsce etc. etc. Dlatego zostałeś poproszony o przepisanie tego od nowa.

A mój stary kod? Wrzuciłem, bo pomyślałem, że może Ci (komuś) się przydać.

0
Capriators napisał(a):

Use of unassigned local variable 'M2' (CS0165)

Tworzyłem nowy program z nudów, i znów ten sam błąd, wyrzuca mi na ostatnich danych.

Tym razem potrzebuję do programu taki fragment:

...

D1 = D1 * 10000000;
D2 = D2 * 1000000;
M1 = M1 * 100000;
M2 = M2 * 10000;
Y1 = Y1 * 1000;
Y2 = Y2 * 100;

...

Tym razem też, to co jest po znaku równości wyświetla mi jako błąd:

D1; D2; M1; M2; Y1; Y2;

I także to są wyniki z konstrukcji 'switch ... case.'

Nie rozumiem. W każdym razie wychodzi na to iż problem jest nie z kodem, lecz z instrukcją 'case'.

Problem jest z kodem. Co ten błąd oznacza, pisali już koledzy, ale Ty nie czytasz co się do Ciebie pisze.
Zmienne w C# muszą mieć przypisaną jakąś wartość zanim zostaną użyte. Nie ma tutaj wartości domyślnej (Nie dotyczy to pól klas).
Poza tym weź na logikę: jaką wartość będzie mieć M1?

0

@Sarrus - po wpisaniu wartości z Console.Read...itd. M1 ma przypisaną wartość pierwszej cyfry dwucyfrowej liczby miesiąca urodzenia, osoby która w konsoli odpowiedziała na pytania. w moim przypadku to:

Data: 17 12 1998

D1 = 1 //dziesiątki z 17
D2 = 7 //jedności z 17
M1 = 1 // dziesiątki z 12
M2 = 2 // jedności z 12
Y1 = 9 // dziesiątki z 1998
Y2 = 8 // jedności z 1998

usunięcie cytowania całego poprzedniego posta - furious programming

0

Ale jeżeli przypisujesz zmiennej wartość z konsoli to przypisujesz ją w trakcie działania programu (dynamicznie), natomiast w momencie kompilacji zmienna nie ma przypisanej wartości, stąd ten błąd. Twoje zmienne musza mieć przypisaną wartość zanim przypiszesz im ją z konsoli, w przeciwnym wypadku kod się nie skompiluje.

0

Dobra. Dałem wszystkiemu co ma pobierać wartość z konsoli wartość = 0; Konsola się odpaliła, dane wpisałem... Niestety w momencie, gdy miał przetworzyć te dane, program się zaciął i pojawiło się nowe okienko gdzie mogłem albo zastopować, albo zapauzować, albo odczytać co mi ma program do powiedzenia. Nic z tego nie rozumiem więc przesyłam wiadomość tu:

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at Coder.Program.Main(String[] args) in c:\Users\Capriators\Documents\SharpDevelop Projects\Program\Coder\Program.cs:line 111

Co teraz?

PS: @up thx bo nie rozumiałem o co chodzi. Przypisałem = 0 i coś się dzieje...

0

Tak jak @gcmarcin napisał. Przekroczony został zakres tablicy w 111 linijce. Nie mając kodu nic więcej nie jesteśmy w stanie stwierdzić.

0

Dziękuję. Teraz już nie ma błędów są tylko 'problemy':

Unreachable code detected (CS0162)

to 'problem' (kolor żółty ikonki, dlatego nie błąd..) dla linijki takiej:

Console.WriteLine();

'Console.' podkreśla na żółto.

Wyświetla trzy razy także dla linijek o tej treści.

PS: @up nie mogę dać kodu, gdyż robię głupotę, dla ćwiczeń, a nie chcę byście wiedzieli co za głupotę robię.

Jej! Znalazłem rozwiązanie. Kod skończony. Dzięki.

Temat do zamknięcia.

0

Dodam jeszcze jednak skończony wyeksportowany plik, byście zobaczyli efekty.

Jak na początek w tym języku to dla mnie dobrze...

Tylko niepokoi mnie ten początkowy błąd. By zobaczyć jaki kliknijcie na początku zamiast 'spacji' 'enter' i spróbujcie coś napisać, bądź kliknijcie parę razy backspace i napiszcie coś. Ja się przyzwyczaiłem, lecz błąd to błąd...

http://www.speedyshare.com/7wrWk/Coder.exe

Oto link do aplikacji. Trochę się namęczyłem z przetwarzaniem danych. Może jakbym przerobił te 33 lekcje co mi zostały w tutorialu, to łatwiej by poszło...

Może nie zajeło by obecnej długości kodu: 362 Linie (oczywiście w tym są jeszcze puste, które ułatwiają odczytywanie, i takie gdzie są klamry zamykające.)

1

Ten temat to powinna być perełka za WTFowy kod z goto i tekst

Nie jestem tak bardzo początkującym. Nauczyłem się w pełni 'konsolowej Javy', gdyż nie miałem skąd nauczyć się obiektowej (chyba tak to się nazywało. Wyświetla efekty w okienku, nie w konsoli.)

Zauważyłem, że te języki są podobne gdy ogarnąłem pierwsze 30 lekcji w jedną i pół godziny ze zrozumieniem i poprawnym wykonaniem zadań.

a wy tu mu jeszcze coś odpowiadacie...

3

E tam, to się nawet fajnie czyta.

// Coder.Program
public static void Main(string[] args)
{
	char[] array = new char[30];
	char[] array2 = new char[50];
	char c = ' ';
	char[] array3 = new char[5];
	int num = 0;
	int num2 = 21;
	int num3 = 22;
	int num4 = 23;
	int num5 = 31;
	int num6 = 32;
	int num7 = 33;
	int num8 = 41;
	int num9 = 42;
	int num10 = 43;
	int num11 = 51;
	int num12 = 52;
	int num13 = 53;
	int num14 = 61;
	int num15 = 62;
	int num16 = 63;
	int num17 = 71;
	int num18 = 73;
	int num19 = 74;
	int num20 = 81;
	int num21 = 82;
	int num22 = 91;
	int num23 = 94;
	int num24 = 89;
	int num25 = 88;
	int num26 = 87;
	int num27 = 79;
	int num28 = 78;
	int num29 = 77;
	int num30 = 69;
	int num31 = 68;
	int num32 = 67;
	int num33 = 59;
	int num34 = 58;
	int num35 = 57;
	int num36 = 49;
	int num37 = 48;
	int num38 = 47;
	int num39 = 39;
	int num40 = 37;
	int num41 = 36;
	int num42 = 29;
	int num43 = 28;
	int num44 = 19;
	int num45 = 16;
	int num46 = 0;
	int num47 = 0;
	int num48 = 0;
	int num49 = 0;
	int num50 = 0;
	int num51 = 0;
	Console.WriteLine(" Spacebar = enter; in frist and second question");
	Console.Write("Name: ");
	string text;
	string text2;
	checked
	{
		do
		{
			array[num] = Console.ReadKey().KeyChar;
			num++;
		}
		while (array[--num] != c);
		Console.WriteLine();
		Console.Write("Surname: ");
		num = 0;
		do
		{
			array2[num] = Console.ReadKey().KeyChar;
			num++;
		}
		while (array2[--num] != c);
		Console.WriteLine();
		Console.Write("Born Day: ");
		text = Console.ReadLine();
		Console.Write("Born Month: ");
		text2 = Console.ReadLine();
		num = 0;
		Console.Write("Born Year: ");
		do
		{
			array3[num] = Console.ReadKey().KeyChar;
			num++;
		}
		while (num != 4);
		Console.WriteLine();
		Console.WriteLine("Gotów?");
		Console.ReadKey(true);
	}
	long num52;
	switch (array[0])
	{
	case 'b':
		num52 = (long)num3;
		goto IL_31C;
	case 'c':
		num52 = (long)num4;
		goto IL_31C;
	case 'd':
		num52 = (long)num5;
		goto IL_31C;
	case 'e':
		num52 = (long)num6;
		goto IL_31C;
	case 'f':
		num52 = (long)num7;
		goto IL_31C;
	case 'g':
		num52 = (long)num8;
		goto IL_31C;
	case 'h':
		num52 = (long)num9;
		goto IL_31C;
	case 'i':
		num52 = (long)num10;
		goto IL_31C;
	case 'j':
		num52 = (long)num11;
		goto IL_31C;
	case 'k':
		num52 = (long)num12;
		goto IL_31C;
	case 'l':
		num52 = (long)num13;
		goto IL_31C;
	case 'm':
		num52 = (long)num14;
		goto IL_31C;
	case 'n':
		num52 = (long)num15;
		goto IL_31C;
	case 'o':
		num52 = (long)num16;
		goto IL_31C;
	case 'p':
		num52 = (long)num17;
		goto IL_31C;
	case 'r':
		num52 = (long)num18;
		goto IL_31C;
	case 's':
		num52 = (long)num19;
		goto IL_31C;
	case 't':
		num52 = (long)num20;
		goto IL_31C;
	case 'u':
		num52 = (long)num21;
		goto IL_31C;
	case 'w':
		num52 = (long)num22;
		goto IL_31C;
	case 'z':
		num52 = (long)num23;
		goto IL_31C;
	}
	IL_271:
	num52 = (long)num2;
	goto IL_31C;
	goto IL_271;
	IL_31C:
	Console.WriteLine("Przetwarzam imię...");
	Console.ReadKey(true);
	int num53;
	switch (array2[0])
	{
	case 'b':
		num53 = num25;
		goto IL_436;
	case 'c':
		num53 = num26;
		goto IL_436;
	case 'd':
		num53 = num27;
		goto IL_436;
	case 'e':
		num53 = num28;
		goto IL_436;
	case 'f':
		num53 = num29;
		goto IL_436;
	case 'g':
		num53 = num30;
		goto IL_436;
	case 'h':
		num53 = num31;
		goto IL_436;
	case 'i':
		num53 = num32;
		goto IL_436;
	case 'j':
		num53 = num33;
		goto IL_436;
	case 'k':
		num53 = num34;
		goto IL_436;
	case 'l':
		num53 = num35;
		goto IL_436;
	case 'm':
		num53 = num36;
		goto IL_436;
	case 'n':
		num53 = num37;
		goto IL_436;
	case 'o':
		num53 = num38;
		goto IL_436;
	case 'p':
		num53 = num39;
		goto IL_436;
	case 'r':
		num53 = num40;
		goto IL_436;
	case 's':
		num53 = num41;
		goto IL_436;
	case 't':
		num53 = num42;
		goto IL_436;
	case 'u':
		num53 = num43;
		goto IL_436;
	case 'w':
		num53 = num44;
		goto IL_436;
	case 'z':
		num53 = num45;
		goto IL_436;
	}
	IL_3AA:
	num53 = num24;
	goto IL_436;
	goto IL_3AA;
	IL_436:
	Console.WriteLine("Przetwarzam nazwisko...");
	Console.ReadKey(true);
	switch (array3[2])
	{
	case '0':
		num46 = 0;
		break;
	case '1':
		num46 = 1;
		break;
	case '2':
		num46 = 2;
		break;
	case '3':
		num46 = 3;
		break;
	case '4':
		num46 = 4;
		break;
	case '5':
		num46 = 5;
		break;
	case '6':
		num46 = 6;
		break;
	case '7':
		num46 = 7;
		break;
	case '8':
		num46 = 8;
		break;
	case '9':
		num46 = 9;
		break;
	}
	Console.WriteLine("Przetwarzam rok(1)...");
	Console.ReadKey(true);
	switch (array3[3])
	{
	case '0':
		num47 = 0;
		break;
	case '1':
		num47 = 1;
		break;
	case '2':
		num47 = 2;
		break;
	case '3':
		num47 = 3;
		break;
	case '4':
		num47 = 4;
		break;
	case '5':
		num47 = 5;
		break;
	case '6':
		num47 = 6;
		break;
	case '7':
		num47 = 7;
		break;
	case '8':
		num47 = 8;
		break;
	case '9':
		num47 = 9;
		break;
	}
	Console.WriteLine("Przetwarzam rok(2)...");
	Console.ReadKey(true);
	switch (text[0])
	{
	case '0':
		num48 = 0;
		break;
	case '1':
		num48 = 1;
		break;
	case '2':
		num48 = 2;
		break;
	case '3':
		num48 = 3;
		break;
	case '4':
		num48 = 4;
		break;
	case '5':
		num48 = 5;
		break;
	case '6':
		num48 = 6;
		break;
	case '7':
		num48 = 7;
		break;
	case '8':
		num48 = 8;
		break;
	case '9':
		num48 = 9;
		break;
	}
	Console.WriteLine("Przetwarzam dzień(1)...");
	Console.ReadKey(true);
	switch (text[1])
	{
	case '0':
		num49 = 0;
		break;
	case '1':
		num49 = 1;
		break;
	case '2':
		num49 = 2;
		break;
	case '3':
		num49 = 3;
		break;
	case '4':
		num49 = 4;
		break;
	case '5':
		num49 = 5;
		break;
	case '6':
		num49 = 6;
		break;
	case '7':
		num49 = 7;
		break;
	case '8':
		num49 = 8;
		break;
	case '9':
		num49 = 9;
		break;
	}
	Console.WriteLine("Przetwarzam dzień(2)...");
	Console.ReadKey(true);
	switch (text2[0])
	{
	case '0':
		num50 = 0;
		break;
	case '1':
		num50 = 1;
		break;
	case '2':
		num50 = 2;
		break;
	case '3':
		num50 = 3;
		break;
	case '4':
		num50 = 4;
		break;
	case '5':
		num50 = 5;
		break;
	case '6':
		num50 = 6;
		break;
	case '7':
		num50 = 7;
		break;
	case '8':
		num50 = 8;
		break;
	case '9':
		num50 = 9;
		break;
	}
	Console.WriteLine("Przetwarzam miesiąc(1)...");
	Console.ReadKey(true);
	switch (text2[1])
	{
	case '0':
		num51 = 0;
		break;
	case '1':
		num51 = 1;
		break;
	case '2':
		num51 = 2;
		break;
	case '3':
		num51 = 3;
		break;
	case '4':
		num51 = 4;
		break;
	case '5':
		num51 = 5;
		break;
	case '6':
		num51 = 6;
		break;
	case '7':
		num51 = 7;
		break;
	case '8':
		num51 = 8;
		break;
	case '9':
		num51 = 9;
		break;
	}
	Console.WriteLine("Przetwarzam miesiąc(2)...");
	Console.ReadKey(true);
	Random random = new Random(99);
	int num54 = random.Next(99);
	Console.WriteLine("Generuje losową liczbę...");
	Console.ReadKey(true);
	Console.WriteLine("Łączę dane...");
	Console.ReadKey(true);
	Console.WriteLine("Gotowe!");
	Console.WriteLine();
	Console.WriteLine();
	Console.WriteLine("Twój indentyfikator to: ");
	Console.WriteLine(string.Concat(new object[]
	{
		num52,
		"0",
		num53,
		num48,
		num49,
		num50,
		num51,
		num46,
		num47,
		num54
	}));
	Console.ReadKey(true);
	Console.WriteLine();
	Console.WriteLine("Program stworzony przez Capriators");
	Console.WriteLine();
	Console.WriteLine("Aby zakończyć kliknij dowolny przycisk...");
	Console.ReadKey(true);
}

W sumie ciekawe ile w tym inwencji autora, a ile rzeczy jest tak świetnych, że ILSpy nie ogarnął. Jedno jest pewne - autor nie potrafi nawet odczytać stringa z konsoli.

Dobra, już wiem o co chodzi:

  1. Pobieramy: imię, nazwisko, dzień, miesiąc i rok urodzenia.
  2. Przetwarzamy imię, tzn. ustawiamy wartość jakiejś zmiennej na podstawie pierwszej litery imienia.
  3. Nadpisujemy zmienną od nazwiska wartością num2 czyli 21.
  4. Wyświetlamy komunikat "Przetwarzam imię".
  5. Przetwarzamy nazwisko (analogicznie jak imię).
  6. Nadpisujemy zmienną od nazwiska wartością num24 czyli 89.
  7. Wyświetlamy komunikat "Przetwarzam nazwisko".
  8. Przetwarzamy trzecią cyfrę roku.
  9. Wyświetlamy komunikat "Przetwarzam rok(1)...".
  10. No i tak dalej z resztą danych, tzn. cyframi roku, miesiąca i dnia, wszystko jest przesunięte w stosunku do komunikatu.
  11. Losujemy liczbę losową mniejszą niż 100.
  12. Potem następuje sekwencja komunikatów i czekania na akcję użytkownika, nic poza tym się nie dzieje.
  13. Potem wyświetlamy jakiś wynik i znowu komunikaty.
    Zgadłem?
0

Jedno jest pewne - autor nie potrafi nawet odczytać stringa z konsoli.

Nie no potrafi pobrać, tylko czasami potrzebuje zamiast stringa tablicę charów. :D
No i trzeba przyznać że gdzieś w połowie tego szaleństwa nauczył się stosować break zamiast goto.

@Capriators
Co do Twojego błędu, string jest tablicą charów więc możesz zrobić tak:

string name;
name = Console.ReadLine();
switch (name[0])
{...}

A, i jestem ciekaw. Co ty za tutorial przerabiasz?

0

@up
jeszcze nie miałem w tym tutorialu opcji pobierania znaków. wszystko jest moim pomysłem i próbą znalezienia rozwiązań w tym nowym dla mnie je języku.

Ale spójrzcie na to z tej strony jak na absolutnego newbie w c# to nieźle, prawda?

Dzięki za dodatkową naukę i pomoc.

PS: @up tutorial z strony si-szarp.pl

0
Capriators napisał(a):

Ale spójrzcie na to z tej strony jak na absolutnego newbie w c# to nieźle, prawda?

Nie, to jest gorzej niż źle nawet jak na początkującego. Nawet początkujący powinien być w stanie sobie wyobrazić, że pobranie całej linijki tekstu z konsoli to jedna operacja i nie trzeba do tego pisać pętli. Podobnie jak nic nie usprawiedliwia używania goto.

Przecież ten program nawet nie robi tego, co chciałbyś, żeby robił. Sam się pogubiłeś w tych goto.

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