Traži po mogućnosti Wroxove ili Apressove, ja imam od potonjeg izdavača i odlična je, čak je prevedena na srpski, ali bolje bi bilo da nije.
C# - Problemi i rješenja
- poruka: 2.151
- |
- čitano: 703.876
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
imam kao console aplikaciju jedan kalkulator, ali imam problem. ako se ne upiše broj program se ruši, dakle ako je tekst izbaci neki error i program neće dalje. kako to srediti?
imam kao console aplikaciju jedan kalkulator, ali imam problem. ako se ne upiše broj program se ruši, dakle ako je tekst izbaci neki error i program neće dalje. kako to srediti?
stavi blok koji vrši upis u try-catch blok a ubaciš do-while petlju da se unos ponovi sa uvjetom true ili false ili da se ponovi unos i program se neće rušiti .
Recimo ovako ,samo izmjeni malo program ali otprilike ideja ti je tu :
string izaberi ="";
bool unos =true;
do
{
Console.Clear();
try
{
Console.WriteLine("Unesite prvi broj : ");
int br1 = int.Parse(Console.ReadLine());
Console.WriteLine("Unesite drugi broj : ");
int br2 = int.Parse(Console.ReadLine());
string operacija = "";
Console.WriteLine("unesite matematičku operaciju koju želite: +,-,*,/");
operacija = Console.ReadLine();
switch (operacija)
{
case ("+"):
Console.WriteLine("Zbroj je : {0}", br1 + br2);
break;
case ("-"):
Console.WriteLine("Razlika je : {0}", br1 - br2);
break;
case ("*"):
Console.WriteLine("Umnožak je : {0}", br1 * br2);
break;
case ("/"):
Console.WriteLine("Podijeljeno je : {0}", br1 / br2);
break;
default:
Console.WriteLine("Sory niste izabrali operaciju!");
break;
}
}
catch (Exception e)
{
Console.WriteLine("Greška {0}", e);
}
Console.WriteLine("Ako želite nastavak y ili n?");
izaberi = Console.ReadLine();
if (izaberi == "y" || izaberi == "Y")
unos = true;
else
break;
//} while (izaberi == "y" || izaberi == "Y");
} while (unos);
..ovo je samo skica ali otprilike tako ,i sad se može uljepšavati ....
A da koristi int.TryParse. I try catch ne bih preporučio za kontrolu logike i granjanja.
Ja mislim da je ovako najbolje. Dodaj ovo u glavni program:
public static System.Boolean DaLiJeBroj(System.Object Broj)
{
if (Broj == null) return false;
if (Broj is Int32 || Broj is Int64 || Broj is Decimal || Broj is Single || Broj is Double) return true;
try
{
if (Broj is string)
Double.Parse(Broj as string);
else
Double.Parse(Broj.ToString());
return true;
}
catch { }
return false;
}
Brojeve deklaliraš kao:
System.Object Broj;
I ispituješ uslov:
if (DaLiJeBroj(Broj))
{
//Ako je broj
}
else
{
//Ako nije broj
}
Ovaj kod je loše dizajniran i problematičan:
Što ako je broj jedan od ovih tipova sbyte, byte, char, short, ushort ,uint, ulong?
Što ako je Double ima vrjednost NaN ili NegativeInfinity?
Double ima TryParse od ako se ne varam 1.0 .NET-a; nema potrebe koristiti catch
Što ako je input string 1.0M ili 1d dali je to ispravan input?
Dali je ispravan unos 123,123 ili 123.123
Dali je 12e3 ispravan input?
Mislim da je ovaj kod dosta sigurniji i bolji ako pišemo vlastitu funkciju
public static class Extensions
{
public static bool IsNumeric(this string s)
{
foreach (char c in s)
{
if (!char.IsDigit(c) && c != '.')
{
return false;
}
}
return true;
}
}
imam kao console aplikaciju jedan kalkulator, ali imam problem. ako se ne upiše broj program se ruši, dakle ako je tekst izbaci neki error i program neće dalje. kako to srediti?
Dao sam već ovdje primjer implementacije TryParse metoda kod konzolnog upisa:
http://www.bug.hr/forum/topic/programiranje/c-problemi-rjesenja/142904.aspx?page=6
To je sve što ti za sad treba, kako je @programko naglasio, a njegov Extension metod možeš napisati za vježbu, ukoliko si se susreo s tom vrstom metoda.
A što se tiče moje implementacije TryParse metoda, baš je prilagođen konzolnom unosu, jer unosiš element u while petlji dok god ne uneseš validni element.
Jel netko zna dobru literaturu na internetu za naučit više o formama?
Jel netko zna dobru literaturu na internetu za naučit više o formama?
Već sam ti dao negdje linkove, najbolje bi bilo knjigu u ruke.
Evo sam oficijelnog sajta:
http://windowsclient.net/learn/videos.aspx
imam kao console aplikaciju jedan kalkulator, ali imam problem. ako se ne upiše broj program se ruši, dakle ako je tekst izbaci neki error i program neće dalje. kako to srediti?
Zar vi ljudi uopce ne validirate unose prije nego ih pocmete koristiti u algoritmima? Vi samo procitate unos, opalite, pa di pukne pukne...
Da, validacija je zaseban proces prilikom razvoja bilo kojeg IT sistema, treba se malo više pozabaviti njome.
imam kao console aplikaciju jedan kalkulator, ali imam problem. ako se ne upiše broj program se ruši, dakle ako je tekst izbaci neki error i program neće dalje. kako to srediti?
Zar vi ljudi uopce ne validirate unose prije nego ih pocmete koristiti u algoritmima? Vi samo procitate unos, opalite, pa di pukne pukne...
..hehehe..zato ljudi dođu ovdje pitati da im kažemo ...
Zar vi ljudi uopce ne validirate unose prije nego ih pocmete koristiti u algoritmima? Vi samo procitate unos, opalite, pa di pukne pukne...
Zanimljivije je kasnije hvatati exceptione u hrpi try..catch koda
Zar vi ljudi uopce ne validirate unose prije nego ih pocmete koristiti u algoritmima? Vi samo procitate unos, opalite, pa di pukne pukne...
Zanimljivije je kasnije hvatati exceptione u hrpi try..catch koda
Da, zbilja je lakse throwat exception nego provjerit jel korisnik unio podatak u formatu koji je potreban, te u slucaju da nije obavijestiti korisnika... sta ja znam... zacrvenjivanjem input polja? Da :)
Ono sto hocu reci je da se ucite nekom redu iz pocetka. Na programima od 10-ak linija koda. Jer se losih navika tesko rijesiti. Validacija inputa je must. Prije nego dodje do business layera.
Evo čitam onu Wroxovu knjigu i došao sam do djela kojeg ne shvaćam pa dalje ne želim dok mi netko ne objasni pa sam došao pitati ovdje :)
Naime spoimnju se implicitne i eksplicitne konverzije...
Ne shvaćam što bi trebalo značiti implicitno i eksplicitno... možda glupo pitanje, ali stvarno ne razumijem :(
Koji je dobar IDE za c#?
Koji je dobar IDE za c#?
Najbolji je Visual C#. Imaš i alternative - Sharp Develop i Mono Develop koji rade i na Linuxu.
Ali po meni, a većinom radim na Windowsu, je VC# zakon. Čak i besplatna Express verzija mi je odlična. Kada se jednom navikneš na taj IDE, ništa ti više ne treba.
Imam mali problem. Ovo ispod je jednostavna login forma koja bi trebala iz lokalne sqlite3 baze pokupiti korisnike.
Problem je u tome što login pušta samo zadnjeg korisnika u bazi. Već 3 sata piljim u ovo, isprobao sam x različitih načina i ovaj mi se čini "najčišći" ali nikako skužit zašto pušta samo zadnjeg iz popisa.
Evo koda. Ovaj button1 click je problematičan.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
namespace SimpleGym
{
public partial class Form1 : Form
{
string username;
string user;
string password;
int pass = 0;
List<string> usernames = new List<string>();
List<string> passwords = new List<string>();
int ucount;
DataTable t_users = new DataTable();
public Form1()
{
InitializeComponent();
string connString = "Data Source=C:\\Documents and Settings\\User\\SimpleGym\\main.db;Version=3;"; // conn string
SQLiteConnection conn = new SQLiteConnection(connString);
string getUsers = "SELECT * from users";
SQLiteDataAdapter usersAdapter = new SQLiteDataAdapter(getUsers, conn);
DataSet users = new DataSet();
usersAdapter.Fill(users, "users");
t_users = users.Tables["Users"];
ucount = t_users.Rows.Count;
for (int i = 0; i < ucount; i++ )
{
username = t_users.Rows[i]["user_name"].ToString();
usernames.Add(username);
password = t_users.Rows[i]["user_password"].ToString();
passwords.Add(password);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
user = textBox1.Text;
password = textBox2.Text;
for (int i = 0; i < ucount; i++)
{
string usr = t_users.Rows[i]["user_name"].ToString();
string pw = t_users.Rows[i]["user_password"].ToString();
label3.Text = pass.ToString();
if (usr == textBox1.Text && pw == textBox2.Text)
{
pass = 1;
}
else
{
pass = 2;
}
}
if (pass == 1)
{
MessageBox.Show("Login Successfull!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (pass == 2)
{
MessageBox.Show("Wrong username or password!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
Uvjeren sam da je neka glupa greška u ovim IFovima na kraju. Svi korisnici osim posljednjeg dobiju "Wrong username or password" iako su im podaci ispravni.
Ako netko ima ideju za elegantnije rješenje, nek slobodno kaže.
[edit] - ova forma će loadati i postavke, liste usera i još dosta toga tako da se nemojte previše čudit
[edit 2] - problem riješen. Kao što rekoh, glup problem među IFovima. Falio je jedan break;
POzdrav svima!
Molim vas ako netko ima ideju kako da rijesim problem.Na pocetku programa korisnik unosi jedno 20ak šifri kupaca.Potrebno je - onako kako ih on unosi da se nekon svakog unosa prikažu neki detalji o kupcu(naziv,sjedište, itd.).Znaci kao nekakva tablica koja bi
se interaktivno kreirala za vrijeme unosa(datagridview?,hrpa databindanih textboxova?).Znaci treba mi ideja ili ako je netko rjesavao slican problem da mi kaze na koji nacin je to ostvario.Uneseni podaci se kasnije koriste za kreiranje izvjestaja(to nije problem).Hvala na odgovoru!
Ja bih samo htio još jednom zahvaliti na preporuci knjiga i vidim da nisam fulao prelazak na C# jer čitam Wroxovu knjigu, došao sam do enumova, structova, arraya i ful je zanimljivo :)
Nisam baš volio programiranje, uvijek je bilo nekako šturo, ali sad izgleda puno bolje :)
Ja bih samo htio još jednom zahvaliti na preporuci knjiga i vidim da nisam fulao prelazak na C# jer čitam Wroxovu knjigu, došao sam do enumova, structova, arraya i ful je zanimljivo :)
Nisam baš volio programiranje, uvijek je bilo nekako šturo, ali sad izgleda puno bolje :)
jel valja wroxova za "total-retarde"?
jel valja wroxova za "total-retarde"?
e, nezz :D Ja sebe valjda smatram total retardom, ali sam imao neko znanje iz consolnih appova u C++-u (za natjecanja)... i onda mi je ova knjiga za sada super legla... sve fino objasni, nema previše stručnih riječi koje su nerazumljive, puno generalnih primjera i try it out primjera...
Sviđa mi se, sve u svemu :)
mislim da ti je problem sto ti petlja kada nađe korisnika i password u bazi nastavi se odvijat do kraja pa ti se u sljedecoj iteraciji mjenjaju i usr i pw varijabla!!!
kad petlja nađe odgovarajući usname i pass zaustavi je breakom ili postavi i=ucount
if (usr==texBox1.Text&&pw==textBox2.Text)p
{
pass=1;
i=ucount;
}
jel valja wroxova za "total-retarde"?
e, nezz :D Ja sebe valjda smatram total retardom, ali sam imao neko znanje iz consolnih appova u C++-u (za natjecanja)... i onda mi je ova knjiga za sada super legla... sve fino objasni, nema previše stručnih riječi koje su nerazumljive, puno generalnih primjera i try it out primjera...
Sviđa mi se, sve u svemu :)
skinuo sam, pa kaj bude, bude :D
inače sam pratio jednu knjigu, isto za početnike, ali je ipak nekako prebrz ritam. ovih 1000 stranica je već bolje :D
10 stranica na dan, naučim da 100 dana :D (kako sam dobar u matematici :) )
skinuo sam, pa kaj bude, bude :D
inače sam pratio jednu knjigu, isto za početnike, ali je ipak nekako prebrz ritam. ovih 1000 stranica je već bolje :D
10 stranica na dan, naučim da 100 dana :D (kako sam dobar u matematici :) )
Tako sam i ja računao, ali ako si kao ja jednu večer = jedno poglavlje :D
ili ako baš nemam vremena onda razvučem jedno poglavlje na par dana :)
skinuo sam, pa kaj bude, bude :D
inače sam pratio jednu knjigu, isto za početnike, ali je ipak nekako prebrz ritam. ovih 1000 stranica je već bolje :D
10 stranica na dan, naučim da 100 dana :D (kako sam dobar u matematici :) )
Tako sam i ja računao, ali ako si kao ja jednu večer = jedno poglavlje :D
ili ako baš nemam vremena onda razvučem jedno poglavlje na par dana :)
sad nemam previše vremena pa ću vrtiti 10 str/dan.
za godinu dana java (minecraft modding :D)
Imam mali problem. Ovo ispod je jednostavna login forma koja bi trebala iz lokalne sqlite3 baze pokupiti korisnike.
Zašto to sve nisi riješio preko jednog SQL upita !? I prvojerio record count , znaći upit select * from nešto where usernmaue like 'nešto' and pwd like 'nešto' , nakon toga prvojeriš broj vračenih recorda i to je to.
Moglo se i tako ali ovo mi je usput poslužilo da popuni jednu klasu koje tu nema.
Bilo je tuda svakakvog kemijanja, taj login moram popravit. Hvala svejedno