PDA

View Full Version : مبتدی: مشکل در تکرار در حلقه for



phpphp7
دوشنبه 11 مرداد 1395, 16:05 عصر
سلام دوستان خسته نباشید

یک حلقه for دارم و داخلش یک if گذاشتم که تشخیص بده یک عنصر (بین دو بازه. مثلا بین عنصر 1 تا 50 ) وجود دارد یا نه . میخوام اگر آن عنصر وجود نداشت ، به عنصر بعدی برود.

کد های من :




string txt_from = txt1.Text;
string txt_to = txt2.Text;
string subdomain = txt3.Text;


for1:
for (int i = int.Parse(txt_from); i <= int.Parse(txt_to); i++)
{

string myurl = "http://" + subdomain + ".mysite.com/product.php?id=" + i;


HtmlNode node_Remove_Tags = doc.DocumentNode.SelectSingleNode("//div[@class='tags']");

//خالیه یا نه tag برای چک کردن اینکه

if (node_Remove_Tags == null)
{
i++;
goto for1;

}
node_Remove_Tags.Remove();





الان مشکل من اینجاست که حلقه همیشه در عدد شروع 1 می ماند

مثلا من به برنامه میگم از عنصر 1 تا 50 را به ترتیب برسی کن .

مثلا 1 وجود داره ، 2 وجود داره ، 3 وجود ندارد .

میخوام بگم اگه عنصری وجود نداشت از آن صرف نظر کن و برو عنصر بعدی را چک کن

c0mmander
دوشنبه 11 مرداد 1395, 16:20 عصر
کدتون رو لازم نیست با goto بصورت unsafe کنید.

فقط کافیه از دستور continue برای تکرار بعدی استفاده کنید مثلا:


string txt_from = txt1.Text;
string txt_to = txt2.Text;
string subdomain = txt3.Text;

for (int i = int.Parse(txt_from); i <= int.Parse(txt_to); i++)
{

string myurl = "http://" + subdomain + ".mysite.com/product.php?id=" + i;


HtmlNode node_Remove_Tags = doc.DocumentNode.SelectSingleNode("//div[@class='tags']");

//خالیه یا نه tag برای چک کردن اینکه

if (node_Remove_Tags == null)
{
i++;

continue;


}
node_Remove_Tags.Remove();





برای اطلاعات بیشتر لینک زیر رو مطالعه کنید:
https://msdn.microsoft.com/en-us/library/923ahwt1.aspx

phpphp7
دوشنبه 11 مرداد 1395, 16:28 عصر
کدتون رو لازم نیست با goto بصورت unsafe کنید.

فقط کافیه از دستور continue برای تکرار بعدی استفاده کنید مثلا:


string txt_from = txt1.Text;
string txt_to = txt2.Text;
string subdomain = txt3.Text;

for (int i = int.Parse(txt_from); i <= int.Parse(txt_to); i++)
{

string myurl = "http://" + subdomain + ".mysite.com/product.php?id=" + i;


HtmlNode node_Remove_Tags = doc.DocumentNode.SelectSingleNode("//div[@class='tags']");

//خالیه یا نه tag برای چک کردن اینکه

if (node_Remove_Tags == null)
{
i++;

continue;


}
node_Remove_Tags.Remove();





برای اطلاعات بیشتر لینک زیر رو مطالعه کنید:
https://msdn.microsoft.com/en-us/library/923ahwt1.aspx

سلام خیلی ممنون درست شد

حتما باید ++i هم باشد ؟ بدون ++i تست کردم ، درست شد و مشکلی نداشت و اینکه چرا وقتی برچسب گذاشتم و i++ هم کرده بودم ، مقدار i بلافاصله به مقدار قبلی خودش باز می گشت ؟

c0mmander
دوشنبه 11 مرداد 1395, 16:37 عصر
سلام خیلی ممنون درست شد

حتما باید ++i هم باشد ؟ بدون ++i تست کردم ، درست شد و مشکلی نداشت و اینکه چرا وقتی برچسب گذاشتم و i++ هم کرده بودم ، مقدار i بلافاصله به مقدار قبلی خودش باز می گشت ؟

اره باید i++ حذف میشد. من زیاد دقت نکردم بهش. چون دستور continue باعث رفتن انتهای حلقه جاری و تکرار مجدد حلقه بررسی شرط ... میشه. و بطور خودکار یکی به شماره for خودکار اضافه میشه و نباید i++وجود داشته باشه. اما به عنوان مثلا اگر حلقه شما while بود و یک شمارنده درون حلقه قرار داشت حتما باید به اون توجه کنید.