Hogy tudom leellenőrizni C#-ban, hogy a bekért szám string-e?
Úgy értem, hogyha elrontaná valaki az adat megadását, és szám helyett stringet ír, akkor hogy oldjam meg azt, hogy azt ne a fejlesztői környezet debugja, vagy a windows érzékelje, hanem én egy ifben?
Egyesével minden lehetőségre nem csinálhatok egy-egy ifet, mert az ugye végtelen sok variáció...
Nincs valamilyen lehetőség egy változó típusának lekérdezésére?
Azaz nem is a változó típusának lekérdezésére, mert az int az int marad attól még, hogy hibás értéket kapott...
Inkább mondjátok meg ti a megoldást légyszi! :D
(A) Végigmész a karaktereken és ekkor csak 10 lehetőséget kell vizsgálnod. Ha akár csak egy pozíción is nem számjegy van -> HIBA.
(B) Ezt a 10 lehetőséget egészen biztosan megoldhatod egy .isDigit() metódussal valamelyik osztály segítségével.
(C) Bonyolíthatod, de egyúttal teljes ellenőrzésed alá is veheted a dolgot, ha reguláris kifejezést használsz. Ha a szöveg illeszkedik /\d+/-re, akkor csak számok vannak benne.
A B-t meg a C-t nem igazán értem... :D
De az A az megfelel! :)
Köszi!
Egyszerűbb ha eleve stringgént kéred be és és pl. az Int.TryParse() függvénnyel átalakítod. Ha a függvény hamis akkor nem alakítható számmá.
double egyik, masik;
bool joegyik = Double.TryParse(textBox1.Text, out egyik);
if (!joegyik)
{
MessageBox.Show("Hibás számformátum !", "Egyik szám hiba !");
return;
}
Nem inkább azt szeretnéd ellenőrizni hogy a bekért string szám e?
int szam;
bool result = Int32.TryParse("-123456", out szam);
if (result == true) Console.WriteLine(szam);
else Console.WriteLine("Nem sikerült beolvasni a számot!");
1. Bekéred és parzolás előtt ellenőrzöd a String.IsDigit() metódussal.
2. A Int.TryParse metódussal próbálod parzolni, ez a visszatérési értékében jelzi ha nem sikerült, második paramétere pedig egy referncia egy létező int változóra.
3. Bekérés után try-catch blokkban parzolod az Int.Parse metódussal és elkapod a kivételt.
#6-os! itt nem windows formról van szó, hanem console applicationről :P
de ne fáradjatok, már megoldottam, méghozzá így:
Console.Write("Írja be a számot: ");
debug = Convert.ToString(Console.ReadLine());
for (int i = 0; i < debug.Length; i++)
{
if (debug[i] != '1' && debug[i] != '2' && debug[i] != '3' && debug[i] != '4' && debug[i] != '5' && debug[i] != '6' && debug[i] != '7' && debug[i] != '8' && debug[i] != '9' && debug[i] != '0')
{
debug = "BUG";
break;
}
else
szám = Convert.ToInt32(debug);
}
és ha átkonvertálja számmá, mert pl az utoldó karakterre igaz, hogy egy szám, akkor se fogja már átadni ezt a változót a függvényemnek, ami végrehajtja a dolgokat, mert az egyik feltételemben szerepel az is, hogy a debug string szövege "BUG"-e, és ha egy karakter már nem szám, akkor az lesz!
szóval minden frankón működik :D köszönöm a segítségeket!
de amit a #8-as mondott, az se rossz!
a try-catch eszembe juthatott volna.. xDD
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!