Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# - ukoncovani cyklu

Ahoj. Kdyz v cyklu nacitam napr. cela cisla do pole a chci ho ukoncit nejakou dohodnutou kombinaci naprd. stisk ENTER, jak to udelam aby mi program nespadnul? Kdyz ENTER je vlastne znak a ne cele cislo... dekuji.

Předmět Autor Datum
Vloz sem ten tvoj cyklus lebo vestit neviem, ako a odkial nacitavas tie cisla a odkial nacitavas ten…
MM.. 04.02.2007 21:15
MM..
Tohle zavání sprostým přepsáním cyklu z DOS konzolových aplikací do prostředí Windows. Ale takhle se…
Jan Fiala 04.02.2007 21:17
Jan Fiala
Ak robi konzolovy program tak sa to robi podobne ako v DOSe, konzolovy exe nie je priamo riadeny uda…
MM.. 04.02.2007 21:23
MM..
const string QUIT = ""; bool konecNacitani = false; int[] pole = new int[50]; int i = 0; while (!kon…
Vlada 04.02.2007 21:23
Vlada
jak mozes preboha integer (pole[i]) porovnavat so stringom?
MM.. 04.02.2007 21:25
MM..
myslim ze vyssie jazyky ako C# toto umoznuju, preto to ide do integeru a automaticky sa cast-uju.
IgorK 04.02.2007 21:27
IgorK
Nie, nejde to. Nemozes porovnavat cislo 0 s retazcom "", ani si neviem predstavit aky by to malo vyz…
MM.. 04.02.2007 21:35
MM..
Ma to takovy vyznam, ze tu mam program a ten postupne nacita cisla, uzivatel predem nevi, kolik jich…
Vlada 04.02.2007 21:39
Vlada
Ano, vieme. A uz som 2x napisal co robis zle. Ak to stale nechapes, tak bohuzial.
MM.. 04.02.2007 21:43
MM..
NULL bude predsa ASCII 0 a 0 ASCII 48, cize sa porovnavat mozu a tym padom sa nerovnaju. treba si pr…
IgorK 04.02.2007 21:40
IgorK
Nie, tam nie je ziaden null, ked sa to "" na nieco zmeni, tak na adresu na retazec, a to fakt porovn…
MM.. 04.02.2007 21:42
MM..
nemyslel som C-kovy NULL ale NUL. :-D btw., pokial viem, tak C# s pointrami nerobi, cize sa tam nepo…
IgorK 04.02.2007 21:49
IgorK
Fyzicky tam poiter (=adresa) bude vzdy, tak ked c# nepouzije pointer, tak potom neviem co ten C# por…
MM.. 04.02.2007 21:52
MM..
ak sa nemylim, s pointrami pracuje len vnutorne(pred uzivatelom je pointer radsej schovany :-D), ako…
IgorK 04.02.2007 21:55
IgorK
toto je klasicka konzolova aplikacia. na ukoncenie pouzi CTRL+Z, obdoba CTRL+D v unixoch.
IgorK 04.02.2007 21:29
IgorK
me nejde o ukonceni programu, ale cyklu... zajima me, jak se to ukonci klavesou ENTER... dekuji :.(
Vlada 04.02.2007 21:33
Vlada
vsak tu to mas napisane: if (pole[i] == QUIT) konecNacitani = true; predpokladam ze konstanta QUIT…
IgorK 04.02.2007 21:35
IgorK
pole[i] je int, QUIT je string "", ma ho zadefinovany hore. CTRL-Z nemusis porovnavat v programe, to…
MM.. 04.02.2007 21:38
MM..
aha, ten definovany QUIT som si nevsimol. myslel som, ze to je preddefinovana konstanta.
IgorK 04.02.2007 21:41
IgorK
jo teraz som si uvedomil - oprava: nie ctrl-z ale ctrl-c robi OS. ctrl-z musi testovat program ak to…
MM.. 04.02.2007 22:17
MM..
Pisem ti co robis zle. Bud si testuj ten string predtym ako ho prevedies na cislo, alebo zachytavaj…
MM.. 04.02.2007 21:37
MM..
Ja fakt nevim, jen me zajima jestli jde ten cyklus ukoncit stiskem klavesy ENTER... At uz se zadavaj…
Vlada 04.02.2007 21:27
Vlada
Ano, jde.
MM.. 04.02.2007 21:45
MM..
Tak ja vim co delam spatne, ale vim, ze se to nejak udelat... slo by to udelat tak, ze bych nemackal…
Vlada 04.02.2007 21:57
Vlada
No a preco si to teda neprerobis tak, aby to slo s Enter? Pisal som ti uz ze ako. Bud si testuj ten…
MM.. 04.02.2007 22:13
MM..
V C# nemôžeš porovnávať reťazec s číslom - taký program nejde ani skompilovať. Ak to píšeš pre .NET…
los 04.02.2007 22:20
los
DEKUJI :)) Konecne nekdo, kdo nema reci jen "okolo" a vlastne netusi o co jde, ale i temto lidem dek…
Vlada 04.02.2007 22:23
Vlada
Ty si vazne dement.
MM.. 04.02.2007 22:24
MM..
este nas aj z*ebe. :-D btw., cital si? - http://pc.poradna.net/flash/view/61-zabezpecte-si-s voj-web…
IgorK 04.02.2007 22:25
IgorK
Pekne, to vazne niekto pouziva include(nieco dynamicke)? :-o
MM.. 04.02.2007 22:33
MM..
podla autora aj imageshack.us. ;-)
IgorK 04.02.2007 22:35
IgorK
Jak ho mam testovat pred tim... divil by ses kolik casu jsem uz nad tim vsim stravil... 3-[ Snad zad…
Vlada 04.02.2007 22:21
Vlada
Ty nezadas cislo, ale string a prevadzas ho v tvojom programe na cislo funkciou Parse. je mi uplne j…
MM.. 04.02.2007 22:26
MM..
Dej mi sem mail, nebo ICQ a ja ti sem hodim na cem delam... a treba mi uveris, ze jsem to udelal sam…
Vlada 04.02.2007 22:31
Vlada
ok, tak sa ti to pokusim vysvetlit, snad ti to pomoze dalej. Vsetko co pise uzivatel do konzoly je…
MM.. 04.02.2007 22:41
MM..
Mam Visual Studio 2005 ze skoly... Ale v nemuzu ten dubugger prave spustit. V Cecku mi to krasne cho…
Vlada 04.02.2007 22:45
Vlada
S tym debuggerom neviem co mas za problem, mas v nastaveniach projektu ze to ma byt aj s debug infor… poslední
MM.. 04.02.2007 22:53
MM..

Tohle zavání sprostým přepsáním cyklu z DOS konzolových aplikací do prostředí Windows.
Ale takhle se ve Windows prostě neprogramuje. A jestli to máte v C# za úkol ve škole, měl by se vyučující nad sebou velmi hluboce zamyslet. Klidně mu to vyřiď.

const string QUIT = "";
bool konecNacitani = false;
int[] pole = new int[50];
int i = 0;
while (!konecNacitani)
{
Console.Write("Zadej cislo: ");
pole[i] = Int32.Parse(Console.ReadLine());
if (pole[i] == QUIT)
konecNacitani = true; i++;
}

Tak asi tak... A ten cyklus potrebuju jednoduse ukoncit ENTREM...

Ma to takovy vyznam, ze tu mam program a ten postupne nacita cisla, uzivatel predem nevi, kolik jich chce zadat, ale kdyz ho to prestane bavit, tak jednoduse zmackne prazdny ENTER a cyklus se ukonci... a program smele pokracuje dal v dalsi cinnosti...

V C# nemôžeš porovnávať reťazec s číslom - taký program nejde ani skompilovať.

Ak to píšeš pre .NET 1.1, tak by som to napísal nejako takto:

ArrayList pole = new ArrayList();

while(true) {
  Console.Write("Zadaj číslo: ");
  string s = Console.ReadLine();

  try { pole.Add(Int32.Parse(s)); }
  catch { if (s == string.Empty) break; }
}

Ak to píšeš pre .NET 2.0, tak by to mohlo vyzerať rovnako alebo nejako takto:

List<int> pole = new List<int>();

while (true) {
  Console.Write ("Zadaj číslo: ");
  string s = Console.ReadLine();
  int n;

  if (Int32.TryParse (s, out n))
    pole.Add (n);
  else if (s == string.Empty)
    break;
}

Jak ho mam testovat pred tim... divil by ses kolik casu jsem uz nad tim vsim stravil... 3-[ Snad zadam cislo, nactu do pameti a az pak ho muzu testovat, jestli to je ten ENTER nebo ne... Spis by to chtelo v te podmince if nejake pretypovani myslim.

Ty nezadas cislo, ale string a prevadzas ho v tvojom programe na cislo funkciou Parse.
je mi uplne jasne ze si ten program nenapisal sam kedze ani netusis co v tych 4riakoch je, a zas len opisujes. Naco sa vobec C# ucis ked o tom nemas a hlavne ani nechces mat ani paru?

los ti napisal to co som ti pisal, plus to trochu zelegantnil...

Dej mi sem mail, nebo ICQ a ja ti sem hodim na cem delam... a treba mi uveris, ze jsem to udelal sam... Pred tydnem jsem presel z C na C#, tak v tom mam trosicku bordel, ve stredu tu praci mam odevzdat... vsechno resim sam, nic neopisuju a uz jsem z toho unavenej, takze hledam pomoc tady kdyz nevim...

ok, tak sa ti to pokusim vysvetlit, snad ti to pomoze dalej.

Vsetko co pise uzivatel do konzoly je znakovy retazec (string) aj ked tam napises len cisla, vzdy je to string.
Tento string ti vrati funkcia Console.ReadLine(), a z toho potom prvy losov riadok

string s = Console.ReadLine();

potom si otestujes ten string, tam si mozes testovat co chces, otestovat to s na prazdny string, alebo ako to robil los skusis to previest na cislo, bud tym ze testujes vynimku (try - catch) alebo cez TryParse. Ak prevod na cislo neklapne tak to nie je cislo a ukoncis cyklus (break alebo si nastavis tu premennu konecNacitani).

Mal som pocit ze to co pisem ti musi stacit a ze je to trivialne. Nauc sa aj hladat si informacie, je to dost potrebne (programovat bez informacii o kniznicnych funkciach alebo o API je nemozne), staci do google alebo do msdn.microsoft.com zadat nazov fcie o ktorej chces popis alebo v msdn si pozriet skupiny fcii.
Tiez by bolo dobre pouzivat debugger, mas v tvojom vyvojovom prostredi nejaky debugger?

Mam Visual Studio 2005 ze skoly... Ale v nemuzu ten dubugger prave spustit. V Cecku mi to krasne chodilo, dival jsem se do pameti, mel jsem prehled co kde je ulozene, jenze ted prechazime na objektove orientovane programovani a ja nevim...

S tym debuggerom neviem co mas za problem, mas v nastaveniach projektu ze to ma byt aj s debug informaciami? (ani neviem ci to je tiez u C#). Ked si v projekte tak si skus kliknut na debug - start, nieco to vypise?

dufam ze som ta moc neodradil, hlavne treba chapat co je v programe (ak mas odniekial nejaku funkciu ako napr. to Console.ReadLine() tak si pozri co to robi, staci zadat Console.ReadLine do google, treba ale anglictinu).

Zpět do poradny Odpovědět na původní otázku Nahoru